Webug4.0 sql延时注入
延时注入
延时注入是基于布尔注入的, 简单来说, 是通过if语句返回的真(true)或假(false)来确定是否执行网页延迟响应
当布尔注入不成功时, 即不能直接观察页面的返回正常与否来判断sql语句是否执行成功, 我们这时候就可以采用延迟注入.
原理
通过构造真或假的条件sql语句,sql语句中根据真假使用sleep()函数向服务器发送请求,观察服务器响应结果是否会执行所设置时
间的延迟响应,以此来判断所构造条件的真假(若执行sleep延迟,则表示当前设置的判断条件为真), 再依据布尔注入的思路,
来逼近真实的值.
实战
作战目标 : webug4.0 第三关---延时注入
1. 探测类型、字段数与数据库版本
熟练的一谈探测, 话不多, 直接上图:
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))#
这里明显延迟了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)
这里博主直接爆出来证明(仅仅用来证明我的结论, 事实上有时候不能直接获得所有数据, 需要一个个的盲注):
上面的框选出来的分别是第一条数据, 第二条数据, 第三条数据......
在实际的延迟盲注中, 我们采用 limit 0,1来获取第一条数据, limit 1,1获取第二条数据, limit 3,1 获取第三条数据.....
那么问题来了:
怎么知道哪个是真正的flag数据呢?
有的人会说: 当然是一个个提交啦, 直到答案正确
那如果提交次数有限制呢?
这里我认为, 可以通过社工的方法来判断出题方的意图:
这里的题目是第三题, 那么初步猜测flag数据是第三个
即: gfdgdfsdg
提交, 正确
最后发现一个彩蛋 = =
第一条flag数据是webug4.0第一关的flag, 第二条是第二关的flag....
虽然有点开挂, 但是要自己做一遍吧 ^_^...