regaan/sqlmap-tamper-collection
GitHub: regaan/sqlmap-tamper-collection
一个基于上下文感知的 SQL 转换框架,为 SQLMap 提供针对主流 WAF 的现代绕过 Tamper 脚本。
Stars: 11 | Forks: 3
# SQL Tamper 框架
[](https://www.mysql.com/)
[](https://mariadb.org/)
[](./tests/)
[](./LICENSE)
[](https://www.python.org/)
[](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, 最新绕过技术