SqlMap 的高级用法!

admin 2025年7月4日01:23:08评论33 views字数 3982阅读13分16秒阅读模式
SqlMap 的高级用法!

使用 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:绕过基本关键字过滤(如 SELECTUNION

常见搭配

  • space2comment.py:将空格替换为注释(如 /**/)。

  • equaltolike.py:将 =替换为 LIKE

  • between.py:将比较操作(如 ><)替换为 BETWEEN

适用场景

  • 目标过滤了空格或常见 SQL 关键字(如 SELECTUNION)。

  • 数据库为 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

如图:

SqlMap 的高级用法!

尝试增加上述几个 tamper,发现可以正常获取数据库名,命令:

sqlmap -u http://jz.xazlsec.com/w/album_list?tag=3-p tag --current-db --random-agent --tamper=space2comment,equaltolike,between

结果如图(未获取完整数据,只做证明可以查询):

SqlMap 的高级用法!

场景 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 的技巧

  1. 分步测试

    • 先用 --tamper单独测试一个脚本,确认是否有效。

    • 逐步增加 tamper 脚本,避免性能浪费。

  2. 结合 --level和 --risk

    • 使用 --level=3或更高,增加测试的 payload 种类。

    • 使用 --risk=3尝试更激进的注入方式,但注意可能触发 WAF 封锁。

  3. 指定数据库类型

    • 使用 --dbms=mysql或 --dbms=mssql明确数据库类型,减少无关 payload 测试。

  4. 使用 --proxy或 --tor

    • 如果目标有 IP 限制或 WAF 封锁,结合代理或 Tor 网络绕过。

  5. 分析 WAF 类型

    • 使用 --identify-waf检测目标使用的 WAF(如 Cloudflare、ModSecurity)。

    • 根据 WAF 类型选择特定 tamper(如 cloudflare.py)。

  6. 调试与日志分析

    • 启用 --verbose=3查看详细日志,分析哪些 payload 被拦截。

    • 根据拦截情况调整 tamper 组合。

  7. 自定义 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 搭配,高效利用

SqlMap 的高级用法!

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

内容转自信安之路,侵删
SqlMap 的高级用法!

原文始发于微信公众号(马哥网络安全):SqlMap 的高级用法!

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年7月4日01:23:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SqlMap 的高级用法!https://cn-sec.com/archives/4220781.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息