regaan/sqlmap-tamper-collection

GitHub: regaan/sqlmap-tamper-collection

一个基于上下文感知的 SQL 转换框架,为 SQLMap 提供针对主流 WAF 的现代绕过 Tamper 脚本。

Stars: 11 | Forks: 3

# SQL Tamper 框架 [![MySQL 5.7+](https://img.shields.io/badge/MySQL-5.7%2B-blue)](https://www.mysql.com/) [![MariaDB 10.x](https://img.shields.io/badge/MariaDB-10.x-orange)](https://mariadb.org/) [![测试](https://img.shields.io/badge/tests-49%2B%20passing-brightgreen)](./tests/) [![许可证](https://img.shields.io/badge/license-GPL%20v2-green)](./LICENSE) [![Python 3.8+](https://img.shields.io/badge/python-3.8%2B-yellow)](https://www.python.org/) [![GitHub stars](https://img.shields.io/github/stars/noobforanonymous/sqlmap-tamper-collection?style=social)](https://github.com/noobforanonymous/sqlmap-tamper-collection) 具备上下文感知能力的 SQL 转换框架,用于 WAF 绕过,并配备完善的安全保障机制。 **作者:** Regaan **许可证:** GPL v2 **版本:** 2.1.0 ## 功能特性 ### 基于 Token 的转换 - 完整的 SQL 词法分析器,支持 UUID 追踪 - 多字符运算符支持(`>=`、`<=`、`<>`、`!=`) - 上下文感知转换 - 字符串字面量和注释保留 ### 基于 AST 的转换 - 层次化 SQL 结构 - 嵌套子查询处理 - 深度感知转换 - 函数调用检测 ### 安全保障 - 确定性输出(相同输入 = 相同输出) - 重复应用保护 - SQL 有效性保持 - 无随机变异 ## 安装 ``` git clone https://github.com/noobforanonymous/sqlmap-tamper-collection.git cd sqlmap-tamper-collection # 将 tamper 脚本复制到 SQLMap cp tamper_scripts/cloudflare2025.py /path/to/sqlmap/tamper/ # 或安装框架用于开发 pip install -e . ``` ## 快速开始 ### 与 SQLMap 配合使用 ``` sqlmap -u "https://target.com?id=1" --tamper=cloudflare2025 ``` ### 独立测试 ``` cd tamper_scripts python3 cloudflare2025.py ``` ## Tamper 脚本 ### cloudflare2025.py 上下文感知多层 WAF 绕过。 **转换步骤:** 1. **关键字包裹** - MySQL 版本注释 SELECT -> /*!50000SELECT*/ 2. **空格替换** - 内联注释 ' ' -> '/**/' 3. **值编码** - URL 编码(仅限 WHERE/HAVING) >= -> %3E%3D 4. **大小写交替** - 交替大小写 SELECT -> sElEcT **示例:** ``` Input: SELECT * FROM users WHERE id>=5 Output: /*!50000sElEcT*//**/*/**//*!50000fRoM*//**/users/**//*!50000wHeRe*//**/id%3E%3D5 ``` **关键修复:** - 运算符编码正确(`>=` 变为 `%3E%3D`,而非 `%3E=`) - UUID 追踪防止位置错误 - 上下文感知(仅在 WHERE/HAVING 中编码) - 确定性输出 - 字符串/注释保留 ## 框架架构 ### 核心组件 **词法分析器**(`tamper_framework/lexer.py`) - 对 SQL 查询进行分词 - 基于 UUID 的 Token 追踪 - 多字符运算符支持 **上下文追踪器**(`tamper_framework/context.py`) - 追踪 SQL 子句状态 - 区分 WHERE、SELECT、FROM - 嵌套深度追踪 **转换器**(`tamper_framework/transformer.py`) - 上下文感知转换 - 重复应用保护 - 确定性输出 **AST 构建器**(`tamper_framework/ast_builder.py`) - 层次化 SQL 结构 - 子查询检测 - 函数调用处理 ### 转换模块 **核心转换:** - `keyword_wrap.py` - MySQL 版本注释包裹 - `space_replace.py` - 空格替换为 `/**/` - `case_alternate.py` - 大小写交替(sElEcT) - `value_encode.py` - 运算符 URL 编码 **高级转换(v2.1.0+):** - `homoglyph.py` - Unicode 形似字符 - `function_wrap.py` - IF()/CASE 包裹 - `numeric_obfuscation.py` - 十六进制/浮点数/数学数字 - `comment_chaos.py` - 多样化注释风格 - `logical_operator_swap.py` - AND/OR 转换为 &&/|| - `hex_encode.py` - 字符串转十六进制编码 - `version_comment_vary.py` - 可变 MySQL 版本 ### WAF 专用 Tamper 脚本 | WAF | 脚本 | 关键技术 | |-----|--------|----------------| | Cloudflare | `cloudflare2025.py` | 版本注释、大小写、空格 | | AWS WAF v2 | `awswaf2026.py` | 十六进制编码、&&/||、v50700 | | Azure WAF | `azurewaf2026.py` | 十六进制字符串、注释混乱 | | ModSecurity CRS | `modsec_crs2026.py` | 大小写优先、数学数字 | | Imperva | `imperva2026.py` | 形似字符、函数包裹 | | Akamai Kona | `akamai2026.py` | 浮点数、企业版 | | 自动选择 | `meta_tamper.py` | 基于环境的链式组合器 | ## 使用示例 ### 基础转换 ``` from tamper_framework.transformer import SQLTransformer from tamper_framework.transformations import create_keyword_wrap_rule transformer = SQLTransformer() transformer.add_rule(create_keyword_wrap_rule()) result = transformer.transform("SELECT * FROM users") # 结果:/*!50000SELECT*/ * /*!50000FROM*/ users ``` ### 上下文感知转换 ``` from tamper_framework.transformations import create_value_encode_rule transformer = SQLTransformer() transformer.add_rule(create_value_encode_rule()) # 仅在 WHERE 子句中编码 result = transformer.transform("SELECT * FROM users WHERE id>=5") # WHERE 子句:id%3E%3D5 # SELECT 子句:*(未编码) ``` ### 自定义转换 ``` from tamper_framework.transformer import TransformationRule from tamper_framework.lexer import Token, TokenType from tamper_framework.context import SQLContext, ClauseType def my_transform(token: Token, context: SQLContext) -> Token: if context.clause == ClauseType.WHERE: # Transform only in WHERE clause pass return token rule = TransformationRule( name="my_rule", transform_func=my_transform, target_types=[TokenType.OPERATOR], allowed_clauses=[ClauseType.WHERE] ) ``` ## 测试 ### 运行测试 ``` # 所有测试 python3 tests/test_lexer.py # 10 tests python3 tests/test_transformer.py # 10 tests python3 tests/test_integration.py # 13 tests # 总计:33/33 个测试通过 ``` ### 测试结果 - **词法分析器测试:** 多字符运算符、字符串字面量、注释、UUID 追踪 - **转换器测试:** 所有转换、上下文感知、确定性输出 - **集成测试:** 真实 SQLMap 载荷、复杂查询、边界情况 ## 文档 - **[架构设计](docs/ARCHITECTURE.md)** - 框架设计与组件 - **[API 参考](docs/API.md)** - 完整的 API 文档 - **[开发指南](docs/DEVELOPMENT.md)** - 贡献指南与最佳实践 ## 技术细节 ### 关键修复 **1. 多字符运算符支持** 问题:简单的词法分析会将 `>=` 拆分为 `>` 和 `=` ``` # 错误:'>=' -> '%3E' + '=' = '%3E='(SQL 损坏) # 正确:'>=' -> '%3E%3D'(完整编码) ``` 解决方案:在词法分析器中优先检查多字符运算符 **2. 基于 UUID 的 Token 追踪** 问题:基于位置的追踪在 Token 值改变时会出错 ``` # 位置 10 处的令牌:"SELECT" # 包装后:"/*!50000SELECT*/" # 位置 10 现在无效! ``` 解决方案:每个 Token 获得一个永不改变的 UUID **3. 上下文感知** 问题:无法判断运算符是在 SELECT 还是 WHERE 中 ``` SELECT * FROM users WHERE id=1 ^ ^ (don't encode) (encode this) ``` 解决方案:追踪 SQL 子句状态 ## 已知限制 ### 当前范围 1. **MySQL/MariaDB 专注** - 专为 MySQL 语法设计 - 可能不适用于 PostgreSQL、MSSQL、Oracle 2. **简化解析** - 非完整 SQL 解析器 - 复杂嵌套查询可能存在边界情况 3. **WAF 依赖性** - 有效性因 WAF 配置而异 - 不保证通用绕过 ### 边界情况 **复杂嵌套查询:** - 深度嵌套子查询可能失败 - 解决方法:简化查询结构 **非 MySQL 数据库:** - 脚本专为 MySQL 语法设计 - 解决方法:根据目标数据库进行修改 ## 性能 **基于 Token 与基于 AST:** - 基于 Token:更快、更简单(大多数情况使用) - 基于 AST:更准确、处理嵌套(复杂查询使用) **基准测试:** - 简单查询(10 个 Token):约 1ms - 复杂查询(100 个 Token):约 5ms - 嵌套子查询:约 10ms ## 法律声明 **✅ 允许的使用场景:** - 您拥有的系统 - 获得书面授权 - 经授权的渗透测试项目 - 漏洞赏金计划(在定义范围内) - 本地漏洞应用测试(DVWA、bWAPP、SQLi-labs) **❌ 禁止的使用场景:** - 未经授权的系统 - 非法活动 - 造成危害或损害 - 违反服务条款 - 未经明确许可的生产系统 **法律框架:** 未经授权访问计算机系统在以下法律下属于违法行为: - 《计算机欺诈与滥用法》(CFAA)- 美国 - 《计算机滥用法》- 英国 - 《信息技术法 2000》第 66 条 - 印度 - 其他司法管辖区的类似法律 使用这些工具即表示您同意合法、负责任地使用它们。 **作者(Regaan)不对这些工具的滥用或造成的损害负责。** ## 支持 - **GitHub Issues:** https://github.com/noobforanonymous/sqlmap-tamper-collection/issues - **文档:** 参见 `docs/` 目录 - **邮箱:** support@rothackers.com ## 更新日志 ### v2.1.0 - 2026 年 2 月 - **新增 WAF 脚本:** AWS WAF、Azure WAF、ModSecurity CRS、Imperva、Akamai - **新增转换:** 形似字符、函数包裹、数字混淆、注释混乱、逻辑运算符替换、十六进制编码、版本变化 - **元 Tamper:** 支持环境变量的自动链式组合器 - **示例库:** `docs/EXAMPLES.md`,包含 20+ 场景 - 反引号标识符支持 - CROSS/FULL JOIN 支持 - 增强文档 ### v2.0.0 - 2025 年 12 月 - 基于 Token 框架完全重写 - UUID 追踪实现正确的 Token 管理 - 多字符运算符支持 - 上下文感知转换 - 层次化结构的 AST 构建器 - 全面的测试套件(33+ 测试) - 修复运算符编码错误 - 确定性输出 - 重复应用保护 **以工程规范构建,经过充分测试,文档完备。**
标签:2025, API安全, AppImage, AWS, Azure, CISA项目, Cloudflare, DPI, JSON输出, MITRE ATT&CK, SQLMap, SQLMapTamper, WAF绕过, Web应用防火墙, 子域分类, 技术栈: Python, 最新绕过技术