mysql基于时间盲注_基于时间型SQL盲注

本文详细介绍了基于时间的MySQL SQL盲注技术,包括利用sleep()函数进行延时判断,if()函数进行逻辑控制,以及BENCHMARK()函数在查询延迟中的应用。通过响应时间差异,可以判断SQL注入的存在,并逐步揭示数据库信息,如版本号。
摘要由CSDN通过智能技术生成

1 基于时间型SQL盲注

注入SQL 代码之后, 存在以下两种情况:

如果注入的SQL代码不影响后台[ 数据库] 的正常功能执行, 那么Web 应用的页面显示正确( 原始页面) 。

如果注入的SQL 代码影响后台数据库的正常功能( 产生了SQL 注入) , 但是此时Web 应用的页面依旧显示正常( 原因是Web 应用程序采取了“ 重定向" 或“ 屏蔽 ”措施)。

产生一个疑问: 注入的SQL 代码到底被后台数据库执行了没有? 即web 应用程序是否存在SQL 注入?

面对这种情况, 之前讲的基于布尔的SQL 盲注很难发挥作用了( 因为基于布尔的SQL 盲注的前提是web 程序返回的页面存在true 和false 两种不同的页面) 。这时, 一般采用基于web 应用响应时间上的差异来判断是否存在SQL 注入, 即基于时间型SQL 盲注。

1.1 sleep()函数——延时函数

在MySQL中, sleep() 函数语法如下:

sleep(seconds) ,即sleep() 函数代码执行延迟若干秒。Sleep() 函数执行是有条件的,必须保障sql语句执行结果存在数据记录才会停止指定的秒数,如果sql 语句查询结果为空,那么sleep() 函数不会停止。S1eep 函数执行停留后,执行后返回值为0

4ab8f29e4a9ce714c786e0e05db974c7.png

通过逻辑判断控制sleep()函数的执行

32fa93467040ad95e5fd241c67a734dd.png

1.2 逻辑判断函数if()

在基于时间型SQL盲注中, 经常使用条件语句来判断操作是否正确:

if condition then do_someing else do_something_elsell 即如果某条件发生, 那么执行语句一, 否则, 执行语句二

在MySQL中, if () 函数语法如下:

IF(expr1 ,expr2 ,expr3) 如果expr1 为真, 则IF() 函数执行expr2 语句; 否则IF() 函数执行expr3 语句。

输入:

select user from users where user_id=1 and1=if(ascii (substr(database(),11))>1,sleep(5),1);  //这里如果条件ascii (substr(database(),11))>1成立, 则执行sleep(5) , 否则执行1

577ebb3a102657018697469c4fe473c8.png

1.3 BENCHMARK()函数

在MySQL中, BENCHMARK()函数语法如下:

BENCHMARK(count,expr) 即BENCHMARK()函数重复执行表达式expr  count 次,实际表现就是查询延迟。可配合if 函数,实现延迟的注入判断。

构造输入如下:

select

user from users where user_id=1 union select if (ascii

(substring(database(),1,1))>100,BENCHMARK(500000000,encode('MSG' ,'by

5 seconds' )),1);

d499aa4090f5ce898a654a053448e86e.png

1.4 注入思路:

基于时间盲注的一般思路是延迟注入,说白了就是利用sleep()或benchmark()等函数让mysql执行时间变长并结合判断条件语句if(expr1,expr2,expr3),然后通过页面的响应时间长短来判断语句返回的值是TRUE还是False,从而猜解一些未知的字段。

注入流程(以获取数据库版本信息为例):

确定注入点及注入类型

使用if判断语句,猜测version()的长度并用sleep函数作为判断依据

重复步骤2直至获取真正长度

使用if判断语句,猜测version()的第一个字符的ascii码并使用sleep函数作为判断依据构造注入语句,

重复步骤4,直至获取全部长度的版本字符的ascii码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值