1. 联合查询被禁用时的SQL注入攻防全景
在真实的CTF赛场和渗透测试中,遇到联合查询(UNION SELECT)被过滤的情况比比皆是。这就像武术对决时对手封住了你的惯用手,但真正的武者永远备有后招。经过数十场实战锤炼,我总结出这套完整的替代方案体系,它们按照攻击效率从高到低排序如下:
- 报错注入 - 让数据库主动吐露秘密(需错误回显)
- 布尔盲注 - 通过蛛丝马迹重建数据(需内容差异)
- 时间盲注 - 用时间差作为通信信道(完全无回显时)
- 无列名注入 - 不知道列名时的破解之道
- 堆叠注入 - 多条语句的降维打击(需特殊配置)
下面这张对比表是我在2023年De1CTF、强网杯等赛事中实测有效的技术选型指南:
| 技术类型 | 平均数据提取速度 | 隐蔽性 | 适用条件 | 典型Payload示例 |
|---|---|---|---|---|
| 报错注入 | 极快(秒级) | 低 | 显示详细错误信息 | ' and updatexml(1,concat(0x7e,(select user())),1)-- |
| 布尔盲注 | 中(分钟级) | 中 | 页面内容随条件变化 | ' and substr(database(),1,1)='a'-- |
| 时间盲注 | 慢(小时级) | 高 | 无任何回显差异 | ' and if(ascii(substr(user(),1,1))=114,sleep(3),0)-- |
| 无列名注入 | 取决于基础技术 | 可变 | 列名未知但能执行子查询 | select 2 from (select 1,2,3 union select * from users)x |
| 堆叠注入 |
