SQL注入之延时注入

延时注入简介


个人理解:

延时注入又称时间盲注,也是盲注的一种。通过构造延时注入语句后,浏览器页面的响应时间来判断正确的数据/

应用场景:

延时注入的应用场景是,在我们输入and 1或者and 0的时候,页面的返回无变化,这个时候可以通过and sleep(5)来判断一下页面的响应时间,相应时间在五秒多一点的话,说明此处可以使用延时注入

相关函数


延时注入会用到布尔盲注的所有函数,包括:length()、substr()、ascii()函数 

 if()函数:

if()函数,顾名思义,这个一个条件判断函数,所以

if()函数有三个参数,其用法为if(a,b,c)

第一个参数a:判断语句,返回结果为真假

第二个参数b:如果前面的判断返回为真,则执行b

第三个参数c:如果前面的判断返回为假,则执行c

实例:select if(1=1,1,2)select if(1=2,1,2),如下图

sleep()函数:

通过在语句中添加一个sleep(n)函数,强制让语句停留n秒钟

实例:select 1 sleep(5),如下图

 

注入实现


延时注入用到的函数length()、substr()、ascii()、if()和sleep()函数。

这里直接用数据库阐述原理,在实际中,如下面的例子注入点为id=1,我们已经无法使用union来直接查询并且正确页面和错误页面一致,我们无法区分。此处我们需要用到关键字and,我们知道只有and前后的条件都为真的时候,数据库才会输出结果。

判断数据库名长度:

首先我们来判断一下数据库的是几个字符,用到length()、if()、sleep()函数,此处选取的数据库名称为test,如下图所示当判断条件为等于4时,输出为Empty并沉睡五秒,当判断条件不等于4时,输出了我们查询的数据,这是因为如果不为4,if函数返回后面的值1,and 1为真,所以数据库名的字符个数为4。

实例:select user from test where id=1 and if((length(database())=4),sleep(5),1),其中(database())为子查询,需要加括号,如下图

 

猜解数据库名:

我们已经知道了数据库名是四个字符,接下来我们可以使用substr()函数对数据库名的字符一个个截取。在通过ascii()函数判断字符的ascii码值,第一个字符的ascii码值为116,第二个为101,同养的步骤,第三个为115,第四个为116,然后和ascii码表比对,发现数据库名为test

实例:select user from test where id=1 and if((ascii(substr(database(),1,1))=116),sleep(5),1),如下图

 

其他步骤:

其余步骤与布尔盲注一致,在现在的语句基础上替换database()子查询即可,布尔盲注见上一篇文章

知识扩展


MySQL中除了sleep()函数外,其他的可用于时间盲注的函数或者方法

BENCHMARK()函数

语法为:

  1. BENCHMARK(count,expr)   
  2. BENCHMARK()函数重复countTimes次执行表达式expr,它可以用于计时MySQL处理表达式有多快。结果值总是0。意欲用于mysql客户,它报告查询的执行时间。

其具体实践在另一篇,非常规注入文章中有

笛卡尔积

heavy query顾名思义就是通过做大量的查询导致查询时间较长来达到延时的目的。通常选择一些比较大的表做笛卡尔积运算,

终于找到了这个MySQL中的方式,此方式与oracle中的查询all_object方式类似,详情转oracle注入文章

下面借用一下网路图,如下

此图来源于网络,多谢大哥

 

get_lock()函数

加锁函数get_lock(),语法为

GET_LOCK(key, timeout)

解锁函数release_lock(),语法为

RELEASE_LOCK(key)

 GET_LOCK有两个参数,一个是key,就是根据这个参数进行加锁的,另一个是等待时间(s),即获取锁失败后等待多久回滚事务。

简单来说,在一个客户端加锁之后想在另外一个客户端对同样的key加锁,需要等待这个timeout,实例操作顺序如下

实际例子,如下图

  • 14
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值