Web安全之SQL注入漏洞学习(四)-时间盲注

2024-06-21 14:48

本文主要是介绍Web安全之SQL注入漏洞学习(四)-时间盲注,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于时间延迟注入(Time-based)- 时间盲注

利用sleep()或benchmark()等函数让mysql执行时间变长,通过页面的响应时间来判断条件是否正确。经常与if(expr1,expr2,expr3)语句结合使用,if(expr1,expr2,expr3)含义是如果expr1是True,则返回expr2,否则返回expr3。

通俗讲就是当页面不返回查询结果或者是返回空无法判断注入的语句是否成功时,通过注入特定的SQL语句,根据也面对请求的时间反馈来判断是否注入成功。

时间盲注原理介绍

--后端SQL语句写法
select * from tables where id ='?'
--构造输入完成注入后的SQL,输入为:1' and sleep(3) --
select *from tables where id = '1' and sleep(3) --'
​
--注入作用说明:
--1、当id='1' 条件为真时,注入请求就会等待3秒钟
--2、当id='1' 条件为假时,注入请求就会立即返回

时间盲注经常搭配的数据库函数

substr(a,b,c):从b位置开始截取a字符串的C长度

count():统计总数

ascii():返回字符的ASCII码

length():返回字符串的长度

left(a,b):从左往右截取字符串a的前b个字符

sleep(x):SQL语句执行程序睡眠x秒

。。。。

时间盲注过程演示

分析:该查询接口并不会返回查询结果也没有报错信息,因此无法使用前几篇文章演示的在输入中添加'符号分析返回错误信息判断该接口是否存在注入漏洞,可行的方案是通过时间盲注的方式。

猜测后端的SQL查询语句

从上图可以看出这是一个通过输入电影名称查询电影信息功能,由此可以推测后端可能的SQL查询语句如下

--模糊查询(从业务分析大概率是支持模糊查询)
select *from movie_table where movie like '%?%'
--精确查询
select *from movie_table where movie = '?'

构造输入验证

构造输入的内容为:t%' and sleep(5) --

select *from movie_table where movie like '%t%' and sleep(5)

 

正常查询

从上述执行验证过程中的接口响应时间可以看出sleep函数是被执行的,这就说明此处存在注入漏洞。 

漏洞利用

利用该漏洞获取数据库名称长度信息演示过程

使用hackbar工具辅助进行测试,输入:World War Z' and length(database())<5 and sleep(4) --

用于判断数据库的名称长度是否小于5,如果为真则请求将阻塞4秒,否则请求立即完成。

通过测试可确定数据库的长度是大于等于5的

 

请求耗时

修改输入:World War Z' and length(database())=5 and sleep(4) --

因为前一步已经知道数据库名称长度是大于等于5的,则判断数据库名称长度是否等于5

通过请求耗时可以确定数据库名称长度就是等于5(正常情况下需要进行多次重复这个过程才能找出数据库的名称长度)

 

请求耗时

通过上述分析我们使用length函数我们得出了数据库的名称长度为5,我们也可以通过substr函数获取数据库的真实名称,过程如下:

判断数据库名称的第一个字母是否为a,通过测试数据库名称第一个字母不为a

 

请求耗时

 

判断数据库名称的第一个字母是否为b,通过测试数据库名称第一个字母就为b。(实际分析过程可能需要对比多次才能找到匹配的字母,一次遍历每一个字最后得出完整数据名称)

请求耗时

 

思考题

从上述注入过程中我们不但获取了数据库的名称长度和真实数据库名称,通过结合其他函数以及自动化脚本的帮助我们就可以对数据库、表、表字段、表中的数据进行分析最终获取到数据库所有信息。

欢迎大家关注我的订阅号,会定期分享一些关于测试相关的文章,有问题也欢迎一起讨论学习!
在这里插入图片描述

 

这篇关于Web安全之SQL注入漏洞学习(四)-时间盲注的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081514

相关文章

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

修复已被利用的高危漏洞! macOS Sequoia 15.6.1发布

《修复已被利用的高危漏洞!macOSSequoia15.6.1发布》苹果公司于今日发布了macOSSequoia15.6.1更新,这是去年9月推出的macOSSequoia操作... MACOS Sequoia 15.6.1 正式发布!此次更新修复了一个已被黑客利用的严重安全漏洞,并解决了部分中文用户反馈的

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则