使用 sqlmap
检测漏洞时,tamper
脚本是绕过 Web 应用防火墙(WAF)、过滤规则或特殊编码的关键工具。以下是一些常见的 tamper
搭配,以及如何高效利用它们,结合实际场景进行说明。内容基于 sqlmap
的常见用法和社区实践,避免涉及任何非法操作。
1. 理解 Tamper 脚本的作用
Tamper
脚本用于修改 SQL 注入 payload,使其能够绕过目标系统的过滤机制(如 WAF、输入验证)。sqlmap
提供了丰富的 tamper 脚本,位于 tamper/
目录下。选择合适的 tamper 搭配需要根据目标网站的过滤规则、编码方式和数据库类型来决定。
高效利用 tamper 的原则:
-
分析目标环境:通过手动测试或错误信息,了解目标的过滤机制(如大小写过滤、关键字屏蔽)。
-
逐步尝试:从单个 tamper 开始测试,逐步组合,避免一次性使用过多 tamper 导致性能下降。
-
结合数据库类型:不同数据库(如 MySQL、PostgreSQL、MSSQL)支持的 SQL 语法不同,选择适配的 tamper。
-
观察日志:查看
sqlmap
日志,分析哪些 tamper 有效,哪些被过滤。
2. 常见 Tamper 搭配
以下是一些常见的 tamper 搭配,适用于不同场景。每个搭配都针对特定的过滤机制或 WAF 规则。
场景 1:绕过基本关键字过滤(如 SELECT
, UNION
)
常见搭配:
-
space2comment.py
:将空格替换为注释(如/**/
)。 -
equaltolike.py
:将=
替换为LIKE
。 -
between.py
:将比较操作(如>
,<
)替换为BETWEEN
。
适用场景:
-
目标过滤了空格或常见 SQL 关键字(如
SELECT
,UNION
)。 -
数据库为 MySQL 或 PostgreSQL。
示例命令:
sqlmap -u"http://example.com/index.php?id=1" --dbms=mysql
解释:
-
space2comment
将SELECT id FROM users
转换为SELECT/**/id/**/FROM/**/users
。 -
equaltolike
将id=1
转换为id LIKE 1
。 -
between
将id>1
转换为id BETWEEN 2 AND 999
。
真实案例
首先使用常规方法进行 sql 注入检测,发现可以检测出存在 SQL 注入,但是在进行数据查询时,无法正确获取,
命令:
sqlmap -u http://jz.xazlsec.com/w/album_list?tag=3-p tag --current-db --random-agent
如图:
尝试增加上述几个 tamper,发现可以正常获取数据库名,命令:
sqlmap -u http://jz.xazlsec.com/w/album_list?tag=3-p tag --current-db --random-agent --tamper=space2comment,equaltolike,between
结果如图(未获取完整数据,只做证明可以查询):
场景 2:绕过大小写敏感过滤
常见搭配:
-
randomcase.py
:随机更改关键字的大小写(如SeLeCt
)。 -
charencode.py
:对 payload 进行 URL 编码。
适用场景:
-
目标对 SQL 关键字进行大小写敏感匹配。
-
WAF 拦截特定格式的 SQL 语句。
示例命令:
sqlmap -u"http://example.com/index.php?id=1"--tamper=randomcase,charencode
解释:
-
randomcase
将SELECT
变为SeLeCt
或其他随机大小写组合。 -
charencode
将 payload 编码为%53%45%4C%45%43%54
,绕过简单字符串匹配。
场景 3:绕过 WAF 的复杂过滤
常见搭配:
-
space2comment.py
:替换空格。 -
apostrophemask.py
:将单引号编码为 UTF-8 格式。 -
base64encode.py
:将 payload 编码为 Base64。 -
modsecurityversioned.py
:针对 ModSecurity WAF 的特定规则。
适用场景:
-
目标使用 ModSecurity 或其他高级 WAF。
-
检测到单引号或特殊字符被严格过滤。
示例命令:
sqlmap -u"http://example.com/index.php?id=1"--tamper=space2comment,apostrophemask,base64encode,modsecurityversioned --level=3
解释:
-
apostrophemask
将单引号'
编码为%27
或 UTF-8 格式。 -
base64encode
将 payload 编码为 Base64,适用于某些特殊输入处理。 -
modsecurityversioned
针对 ModSecurity 的规则集进行优化。
场景 4:针对特定数据库的优化
MySQL 常见搭配:
-
space2mysqlcomment.py
:使用 MySQL 特有的注释(如--
或#
)。 -
versionedkeywords.py
:添加 MySQL 版本特定的注释。 -
unmagicquotes.py
:绕过 PHP 的魔术引号(magic quotes)。
MSSQL 常见搭配:
-
mssqlcomments.py
:使用 MSSQL 特有的注释。 -
charencode.py
:编码 payload 以绕过过滤。
PostgreSQL 常见搭配:
-
space2dash.py
:将空格替换为--
注释。 -
greatest.py
:将>
替换为GREATEST
函数。
示例命令(MySQL):
sqlmap -u"http://example.com/index.php?id=1"--tamper=space2mysqlcomment,versionedkeywords,unmagicquotes --dbms=mysql
场景 5:绕过复杂编码或特殊字符过滤
常见搭配:
-
charunicodeencode.py
:将 payload 编码为 Unicode 格式。 -
multiplespaces.py
:在 payload 中插入多个空格。 -
randomcomments.py
:随机插入/**/
注释。
适用场景:
-
目标对特殊字符(如
<
,>
)或编码方式有严格限制。 -
检测到复杂的正则表达式过滤。
示例命令:
sqlmap -u"http://example.com/index.php?id=1"--tamper=charunicodeencode,multiplespaces,randomcomments
解释:
-
charunicodeencode
将字符编码为u0027
形式的 Unicode。 -
multiplespaces
在 payload 中插入随机数量的空格。 -
randomcomments
在 payload 中随机插入注释,增加混淆。
3. 高效利用 Tamper 的技巧
-
分步测试:
-
先用
--tamper
单独测试一个脚本,确认是否有效。 -
逐步增加 tamper 脚本,避免性能浪费。
-
结合
--level
和--risk
: -
使用
--level=3
或更高,增加测试的 payload 种类。 -
使用
--risk=3
尝试更激进的注入方式,但注意可能触发 WAF 封锁。 -
指定数据库类型:
-
使用
--dbms=mysql
或--dbms=mssql
明确数据库类型,减少无关 payload 测试。 -
使用
--proxy
或--tor
: -
如果目标有 IP 限制或 WAF 封锁,结合代理或 Tor 网络绕过。
-
分析 WAF 类型:
-
使用
--identify-waf
检测目标使用的 WAF(如 Cloudflare、ModSecurity)。 -
根据 WAF 类型选择特定 tamper(如
cloudflare.py
)。 -
调试与日志分析:
-
启用
--verbose=3
查看详细日志,分析哪些 payload 被拦截。 -
根据拦截情况调整 tamper 组合。
-
自定义 Tamper 脚本:
-
如果默认 tamper 无效,可根据目标过滤规则编写自定义脚本(参考
tamper/
目录中的脚本模板)。
4. 注意事项
-
合法性:仅在获得明确授权的情况下使用
sqlmap
进行漏洞测试,未经授权的扫描可能违法。 -
性能优化:过多 tamper 会显著增加测试时间,优先选择与目标环境匹配的脚本。
-
更新 sqlmap:确保使用最新版本的
sqlmap
,以获取最新的 tamper 脚本和功能。 -
备份与记录:记录每次测试的命令和结果,便于后续分析。
5. 示例综合命令
假设目标是一个 MySQL 数据库,存在 WAF 且过滤空格和关键字:
sqlmap -u"http://example.com/index.php?id=1"--tamper=space2comment,equaltolike,apostrophemask,randomcase --dbms=mysql --level=3--risk=2--identify-waf
-
检测 WAF 类型。
-
使用多种 tamper 绕过常见过滤。
-
适度增加测试深度和风险。
6. 推荐资源
-
官方文档:
sqlmap
的 GitHub 仓库(tamper/
目录)提供所有 tamper 脚本的说明。 -
社区资源:参考
sqlmap
论坛或 StackOverflow 上的案例,了解特定场景的 tamper 搭配。 -
WAF 绕过技巧:学习常见 WAF(如 Cloudflare、ModSecurity)的规则,针对性选择 tamper。
7. 总结
文章内容来自于 AI 生成,提问内容为:
使用 sqlmap 检测漏洞,有哪些常见 tamper 搭配,高效利用
经多多轮实际案例的测试,其中,场景 1 比较通用,很容易找到实际案例,可以作为常用命令使用,AI 真的是一个很好的帮手,在我们有需求时,可以提供很多方法可选,最终使用哪个,需要自己进行测试后选择。
原文始发于微信公众号(马哥网络安全):SqlMap 的高级用法!
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论