Webug4.0 sql延时注入

延时注入

延时注入是基于布尔注入的, 简单来说,  是通过if语句返回的真(true)或假(false)来确定是否执行网页延迟响应

当布尔注入不成功时, 即不能直接观察页面的返回正常与否来判断sql语句是否执行成功, 我们这时候就可以采用延迟注入.

 

原理

通过构造真或假的条件sql语句,sql语句中根据真假使用sleep()函数向服务器发送请求,观察服务器响应结果是否会执行所设置时

间的延迟响应,以此来判断所构造条件的真假(若执行sleep延迟,则表示当前设置的判断条件为真), 再依据布尔注入的思路,

来逼近真实的值.

 

实战

作战目标  :  webug4.0  第三关---延时注入

  Webug4.0 sql延时注入_第1张图片

 

1.  探测类型、字段数与数据库版本

熟练的一谈探测, 话不多, 直接上图:

Webug4.0 sql延时注入_第2张图片

Webug4.0 sql延时注入_第3张图片

Webug4.0 sql延时注入_第4张图片

 

 

2. 爆数据库长度

关键核心来了.

我们用利用mysql的两个函数:

if(exp, exp1, exp2)  :  若exp为真, 则执行exp1, 否则执行exp2

sleep(t)                   :  延迟相应t秒

核心语句为:     ' and if( (length(database()) > 5),  sleep(0), sleep(5))#

举一个栗子:

当注入sql:  ' and if( (length(database()) > 5),  0, sleep(5))#

Webug4.0 sql延时注入_第5张图片

这里明显延迟了5秒钟,  说明if里面的条件未成立, 继续猜测数据库长度:

                           sql注入 页面是否延迟
' and if( (length(database()) > 4), 0, sleep(5))# 不延迟
' and if( (length(database()) = 5), 0, sleep(5))# 不延迟

可知数据库长度为5

 

3. 换汤不换药

知道方法之后, 就可以像布尔注入一样去爆表爆字段了,  这就是为什么说延迟注入是基于布尔注入一样的

只是当布尔注入不能通过页面是否变化判断注入的sql语句是否成功执行时,

可以换个思路:  通过网页延迟响应来判断

 

4. 注意点

当我们爆到表为 env_list,  字段为envFlag时候,

我们采用 limit 0, 1 来控制每一条数据, (每一条数据都是一个flag)

这里博主直接爆出来证明(仅仅用来证明我的结论, 事实上有时候不能直接获得所有数据, 需要一个个的盲注):

Webug4.0 sql延时注入_第6张图片

上面的框选出来的分别是第一条数据,  第二条数据,  第三条数据...... 

在实际的延迟盲注中,  我们采用 limit 0,1来获取第一条数据,  limit 1,1获取第二条数据,  limit 3,1 获取第三条数据..... 

那么问题来了: 

怎么知道哪个是真正的flag数据呢?

有的人会说:  当然是一个个提交啦,  直到答案正确

那如果提交次数有限制呢?

这里我认为, 可以通过社工的方法来判断出题方的意图:

这里的题目是第三题,  那么初步猜测flag数据是第三个

即: gfdgdfsdg

Webug4.0 sql延时注入_第7张图片

提交, 正确

最后发现一个彩蛋 = = 

第一条flag数据是webug4.0第一关的flag, 第二条是第二关的flag....

虽然有点开挂, 但是要自己做一遍吧 ^_^...

你可能感兴趣的:(Webug4.0)