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嵌入, 自动化绕过, 蓝队分析