首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SqlMap 的高级用法!

SqlMap 的高级用法!

作者头像
信安之路
发布2025-05-23 12:57:06
发布2025-05-23 12:57:06
71000
代码可运行
举报
文章被收录于专栏:信安之路信安之路
运行总次数:0
代码可运行

使用 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。

示例命令

代码语言:javascript
代码运行次数:0
运行
复制
sqlmap -u"http://example.com/index.php?id=1"  --dbms=mysql

解释

  • space2commentSELECT id FROM users转换为 SELECT/**/id/**/FROM/**/users
  • equaltolikeid=1转换为 id LIKE 1
  • betweenid>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

如图:

image-20250522153307272
image-20250522153307272

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

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

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

image-20250522153538750
image-20250522153538750
场景 2:绕过大小写敏感过滤

常见搭配

  • randomcase.py:随机更改关键字的大小写(如 SeLeCt)。
  • charencode.py:对 payload 进行 URL 编码。

适用场景

  • 目标对 SQL 关键字进行大小写敏感匹配。
  • WAF 拦截特定格式的 SQL 语句。

示例命令

代码语言:javascript
代码运行次数:0
运行
复制
sqlmap -u"http://example.com/index.php?id=1"--tamper=randomcase,charencode

解释:

  • randomcaseSELECT变为 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。
  • 检测到单引号或特殊字符被严格过滤。

示例命令

代码语言:javascript
代码运行次数:0
运行
复制
sqlmap -u"http://example.com/index.php?id=1"--tamper=space2comment,apostrophemask,base64encode,modsecurityversioned --level=3
代码语言:javascript
代码运行次数:0
运行
复制

解释

  • 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)

代码语言:javascript
代码运行次数:0
运行
复制
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:随机插入 /**/注释。

适用场景

  • 目标对特殊字符(如 <, >)或编码方式有严格限制。
  • 检测到复杂的正则表达式过滤。

示例命令

代码语言:javascript
代码运行次数:0
运行
复制
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 且过滤空格和关键字:

代码语言:javascript
代码运行次数:0
运行
复制
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 搭配,高效利用

image-20250522160616220
image-20250522160616220

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信安之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 理解 Tamper 脚本的作用
  • 2. 常见 Tamper 搭配
    • 场景 1:绕过基本关键字过滤(如 SELECT, UNION)
      • 真实案例
    • 场景 2:绕过大小写敏感过滤
    • 场景 3:绕过 WAF 的复杂过滤
    • 场景 4:针对特定数据库的优化
    • 场景 5:绕过复杂编码或特殊字符过滤
  • 3. 高效利用 Tamper 的技巧
  • 4. 注意事项
  • 5. 示例综合命令
  • 6. 推荐资源
  • 7. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档