Skip to content

Commit 529ffcb

Browse files
committed
feat: add encrypted params SQL injection test scenarios to vulnshop
1 parent 3b13e89 commit 529ffcb

7 files changed

Lines changed: 1739 additions & 0 deletions

File tree

doc/encrypted_params/CAUTIONS.md

Lines changed: 327 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,327 @@
1+
# 嵌套加密参数测试注意事项
2+
3+
## ⚠️ 重要警告
4+
5+
### 1. 严禁修改第三方库
6+
7+
**绝对不要**向以下目录写入任何文件:
8+
- `src/backEnd/third_lib/sqlmap/`
9+
- `src/backEnd/third_lib/sqlmap/tamper/`
10+
- `src/backEnd/third_lib/sqlmap/preprocess/`
11+
12+
这是 SQLMap 开源项目的 git 子模块,修改会导致:
13+
- 子模块状态异常
14+
- 无法更新 SQLMap 版本
15+
- 代码提交冲突
16+
- 违反开源协议
17+
18+
### 2. Tamper 脚本的正确位置
19+
20+
#### 方案一:SQLMap 安装目录(推荐临时使用)
21+
```
22+
/path/to/sqlmap/tamper/your_script.py
23+
```
24+
25+
#### 方案二:项目目录(推荐长期维护)
26+
```
27+
sqlmapWebUI/
28+
├── src/
29+
│ ├── backEnd/
30+
│ │ └── tampers/ # 自建目录
31+
│ │ └── base64_nested.py
32+
```
33+
34+
使用时通过 `--tamper` 指定完整路径:
35+
```bash
36+
python sqlmap.py -u URL --tamper=/path/to/project/src/backEnd/tampers/base64_nested.py
37+
```
38+
39+
#### 方案三:当前工作目录
40+
```bash
41+
# 将 tamper 脚本放在执行 sqlmap 的目录
42+
cd /path/to/workspace
43+
python sqlmap.py -u URL --tamper=./base64_nested.py
44+
```
45+
46+
---
47+
48+
## 安全注意事项
49+
50+
### 1. 授权测试
51+
52+
**仅在获得明确授权的情况下进行测试!**
53+
54+
未经授权的测试可能违反:
55+
- 《网络安全法》
56+
- 《刑法》第 285、286 条
57+
- 公司安全政策
58+
- 国际法律法规
59+
60+
### 2. 测试环境隔离
61+
62+
- 使用本地靶场(如 VulnShop)
63+
- 避免在生产环境测试
64+
- 使用虚拟机或容器隔离
65+
- 测试后清理数据
66+
67+
### 3. 数据保护
68+
69+
- 不要泄露真实用户数据
70+
- 敏感信息及时清理
71+
- 测试报告加密存储
72+
- 限制访问权限
73+
74+
---
75+
76+
## 技术注意事项
77+
78+
### 1. 编码问题
79+
80+
```python
81+
# 确保使用正确的编码
82+
def tamper(payload, **kwargs):
83+
# 错误:可能导致编码错误
84+
data = json.dumps(inner)
85+
86+
# 正确:指定编码
87+
data = json.dumps(inner, ensure_ascii=False)
88+
encoded = base64.b64encode(data.encode('utf-8')).decode('utf-8')
89+
```
90+
91+
### 2. 特殊字符处理
92+
93+
```python
94+
# SQLMap payload 可能包含特殊字符
95+
def tamper(payload, **kwargs):
96+
# 需要正确处理引号、换行等字符
97+
inner = {"name": payload.replace("'", "''")}
98+
# 或根据具体情况转义
99+
```
100+
101+
### 3. 长度限制
102+
103+
Base64 编码会增加约 33% 的长度:
104+
- 原始长度:100 字节
105+
- Base64 后:约 133 字节
106+
107+
如果服务器有长度限制,可能需要:
108+
- 使用更短的注入技术
109+
- 分块传输
110+
- 调整服务器配置(测试环境)
111+
112+
### 4. 时间同步
113+
114+
动态密钥场景下:
115+
```python
116+
import time
117+
118+
def tamper(payload, **kwargs):
119+
# 确保与服务器时间同步
120+
# 可能需要从响应中提取时间戳
121+
timestamp = int(time.time())
122+
#
123+
timestamp = kwargs.get('headers', {}).get('X-Server-Time')
124+
```
125+
126+
---
127+
128+
## 调试技巧
129+
130+
### 1. 使用代理查看请求
131+
132+
```bash
133+
python sqlmap.py -u URL --data='...' --tamper=script -p param --proxy=http://127.0.0.1:8080
134+
```
135+
136+
在 Burp 中查看实际发送的请求内容。
137+
138+
### 2. 添加调试输出
139+
140+
```python
141+
def tamper(payload, **kwargs):
142+
import sys
143+
sys.stderr.write(f"[DEBUG] Original: {payload}\n")
144+
145+
# 处理逻辑
146+
result = process(payload)
147+
148+
sys.stderr.write(f"[DEBUG] Result: {result}\n")
149+
return result
150+
```
151+
152+
### 3. 本地测试 Tamper 脚本
153+
154+
```python
155+
# test_tamper.py
156+
import sys
157+
sys.path.insert(0, '/path/to/sqlmap')
158+
159+
from tamper.base64_nested import tamper
160+
161+
# 测试
162+
test_payload = "test' AND 1=1--"
163+
result = tamper(test_payload)
164+
print(f"Input: {test_payload}")
165+
print(f"Output: {result}")
166+
167+
# 验证输出
168+
decoded = base64.b64decode(result)
169+
print(f"Decoded: {decoded}")
170+
```
171+
172+
### 4. Verbose 模式
173+
174+
```bash
175+
# 增加输出详细程度
176+
python sqlmap.py -u URL ... -v 3 # 或 -v 4, -v 5, -v 6
177+
```
178+
179+
---
180+
181+
## 常见问题排查
182+
183+
### Q: SQLMap 报错 "tamper module not found"
184+
185+
**原因**
186+
- 脚本路径错误
187+
- 脚本语法错误
188+
- 缺少依赖
189+
190+
**解决**
191+
```bash
192+
# 检查路径
193+
ls -la /path/to/tamper_script.py
194+
195+
# 检查语法
196+
python -m py_compile tamper_script.py
197+
198+
# 使用绝对路径
199+
python sqlmap.py ... --tamper=/absolute/path/to/script.py
200+
```
201+
202+
### Q: Tamper 脚本执行但没有效果
203+
204+
**原因**
205+
- 脚本逻辑错误
206+
- SQLMap 缓存了旧结果
207+
- 参数名不匹配
208+
209+
**解决**
210+
```bash
211+
# 清除会话缓存
212+
python sqlmap.py ... --flush-session
213+
214+
# 检查参数名是否正确
215+
python sqlmap.py ... -p content # 确保是实际的参数名
216+
```
217+
218+
### Q: Base64 解码失败
219+
220+
**原因**
221+
- 编码错误(URL 安全 Base64 vs 标准 Base64)
222+
- 填充问题
223+
- 字符集问题
224+
225+
**解决**
226+
```python
227+
import base64
228+
229+
# 标准 Base64
230+
base64.b64encode(data)
231+
232+
# URL 安全 Base64
233+
base64.urlsafe_b64encode(data)
234+
235+
# 处理填充
236+
data += '=' * (4 - len(data) % 4)
237+
```
238+
239+
### Q: SQLMap 检测到注入但无法提取数据
240+
241+
**原因**
242+
- 响应也是加密的
243+
- 响应格式解析失败
244+
- 盲注技术限制
245+
246+
**解决**
247+
- 手动验证注入
248+
- 检查响应处理
249+
- 使用 `--technique` 指定注入技术
250+
- 调整 `--time-sec` 时间参数
251+
252+
---
253+
254+
## 最佳实践
255+
256+
### 1. 版本控制
257+
258+
将自定义 tamper 脚本纳入项目版本控制:
259+
```bash
260+
git add src/backEnd/tampers/
261+
git commit -m "Add base64 nested param tamper script"
262+
```
263+
264+
### 2. 文档注释
265+
266+
```python
267+
#!/usr/bin/env python3
268+
"""
269+
Tamper script for XXX encryption
270+
271+
Author: Your Name
272+
Date: 2024-01-01
273+
Version: 1.0
274+
275+
Description:
276+
Brief description of what this script does
277+
278+
Usage:
279+
python sqlmap.py -u URL --tamper=this_script.py -p param
280+
281+
Dependencies:
282+
- pycryptodome (for AES encryption)
283+
- other dependencies
284+
"""
285+
```
286+
287+
### 3. 模块化设计
288+
289+
```python
290+
# 加密函数独立出来
291+
def encrypt_data(data, key):
292+
"""加密数据"""
293+
pass
294+
295+
def decrypt_data(data, key):
296+
"""解密数据"""
297+
pass
298+
299+
def tamper(payload, **kwargs):
300+
"""主入口"""
301+
inner = {"param": payload}
302+
encrypted = encrypt_data(json.dumps(inner), KEY)
303+
return encrypted
304+
```
305+
306+
### 4. 错误处理
307+
308+
```python
309+
def tamper(payload, **kwargs):
310+
try:
311+
# 处理逻辑
312+
return result
313+
except Exception as e:
314+
import sys
315+
sys.stderr.write(f"[Tamper Error] {str(e)}\n")
316+
# 返回原始 payload,避免中断扫描
317+
return payload
318+
```
319+
320+
---
321+
322+
## 参考资源
323+
324+
- [SQLMap 官方文档](https://github.com/sqlmapproject/sqlmap/wiki)
325+
- [SQLMap Tamper 脚本集合](https://github.com/sqlmapproject/sqlmap/tree/master/tamper)
326+
- [Base64 编码规范](https://tools.ietf.org/html/rfc4648)
327+
- [OWASP SQL 注入](https://owasp.org/www-community/attacks/SQL_Injection)

0 commit comments

Comments
 (0)