skills/exploit/web-method/python-prototype-pollution/SKILL.md
Python 原型链污染(属性注入/Class Pollution)检测与利用。当目标为 Python Web 应用(Flask/Sanic/Django/FastAPI)且存在递归合并(merge)、深度属性设置(pydash.set_)、JSON 配置更新接口时使用。覆盖污染入口识别、__globals__链构造、Flask SECRET_KEY/Jinja2定界符/searchpath污染、pydash路径过滤绕过、Sanic污染链、RCE/文件读取/权限提升利用
npx skillsauth add wgpsec/AboutSecurity python-prototype-pollutionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Python 原型链污染(又称 Class Pollution / Attribute Injection)利用 Python 类继承和 __globals__ 机制,通过递归合并函数或深度属性设置函数(如 pydash.set_()),从一个普通对象"跳出"当前作用域,修改全局变量、Flask 配置、Jinja2 引擎设置,实现 RCE、文件读取或权限提升。
寻找将用户 JSON 输入递归合并/设置到 Python 对象的代码模式:
| 入口类型 | 代码特征 | 常见接口 |
|---------|---------|---------|
| 自定义 merge 函数 | def merge(src, dst) + setattr(dst, k, v) | POST JSON 配置更新 |
| pydash.set_() | pydash.set_(obj, path, value) | API 属性设置 |
| pydash.get() | pydash.get(obj, path) | API 属性查询 |
| pydash.invoke() | pydash.invoke(obj, path, arg) | API 方法调用 |
| 其他深度设置库 | glom, box, 任何 deep-set 实现 | 配置更新接口 |
识别信号:
{"a": {"b": {"c": "value"}}} 格式)"a.b.c" 格式)| obj 类型 | 起步路径 | 识别方法 |
|---------|---------|---------|
| 自定义类实例 | __init__.__globals__ | 直接设 __init__.__globals__.xxx 有效 |
| 字典 (dict) | __class__.__init__.__globals__ | 需先 __class__ 跳出字典键值逻辑 |
# merge 函数场景: 嵌套 JSON
curl -X POST http://target/api/merge \
-H 'Content-Type: application/json' \
-d '{"__class__": {"__name__": "test"}}'
# pydash.set_ 场景: 点分路径
curl -X POST http://target/api/update \
-H 'Content-Type: application/json' \
-d '{"path": "__class__.__name__", "value": "test"}'
# pydash.get 场景: 信息泄露探测
curl -X POST http://target/api/get \
-H 'Content-Type: application/json' \
-d '{"path": "__class__"}'
确认 Python 原型链污染可行
├── 目标使用 pydash.invoke()?
│ └── 是 → 直接 RCE(Phase 3A)
├── 目标使用 Flask?
│ ├── 需要提权? → 污染类属性 is_admin(Phase 3B)
│ ├── 有 session? → 污染 SECRET_KEY → 伪造 session(Phase 3C)
│ ├── 有 SSTI 但被过滤? → 污染 Jinja2 定界符(Phase 3D)
│ ├── 有 render_template? → 污染 searchpath/静态目录(Phase 3E)
│ └── 有 before_first_request? → 重置 _got_first_request(Phase 3F)
├── 目标有文件上传?
│ ├── 代码调用相对路径命令 → PATH 劫持(Phase 3G)
│ └── 代码有懒加载 import → sys.path 劫持(Phase 3H)
└── 有函数 shell=False 等默认参数?
└── 污染 __defaults__ / __kwdefaults__(Phase 3I)
各 Phase 的详细利用命令和代码见 references/exploitation-payloads.md
从低风险到高风险逐步升级:
如果有 pydash 相关线索,同时通过 search_vulndb("pydash") 获取 CVE-2023-26145 条目中的详细利用链,两者互补。
| 技术 | 入口 | 关系 | |------|------|------| | 原型链污染 | merge/set_ 接口 | 本 skill | | SSTI | 模板注入点 | 原型链污染可改 Jinja2 定界符绕过 SSTI 过滤 | | 反序列化 | pickle/json | SECRET_KEY 被污染后可伪造 session → 触发 pickle 反序列化 |
三者可组合使用:原型链污染 → 修改 SECRET_KEY → 伪造 session → pickle RCE。
testing
Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产(Blob Storage/App Service/Azure VM/Azure Functions)、获取 Azure 凭据(Service Principal/Managed Identity/Access Token)、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面
tools
Mythic C2 操作方法论。当需要部署 Mythic、选择 Mythic Agent、安装 C2 Profile、配置 HTTP/DNS/WebSocket/SMB/TCP 通信、生成 payload、管理回连任务,或把 Mythic 作为跨平台 C2 框架用于授权红队演练时使用。覆盖 mythic-cli 安装、Agent/Profile 选择、SSL 证书配置、payload 构建和基础 OPSEC 判断
development
Docker 安全测试与容器渗透方法论。当需要评估 Docker 容器、Docker Daemon、Docker Registry、镜像层、构建产物或容器逃逸风险时使用。覆盖容器环境识别、特权容器逃逸、docker.sock/Remote API 利用、procfs/cgroup/capabilities 滥用、Docker 用户组提权、运行时/内核 CVE、Registry 枚举、镜像层 Secret 分析和构建上下文泄露。发现 Docker 容器环境、Registry 暴露、镜像凭据或容器配置错误时应使用此技能
development
使用 PadBuster 进行 Padding Oracle 攻击。当发现 Web 应用使用 CBC 模式加密且存在 Padding Oracle 漏洞时使用。PadBuster 可自动解密密文和伪造任意明文对应的合法密文,适用于加密 Cookie/Token/URL 参数。任何涉及 Padding Oracle 攻击、CBC 密文解密、Cookie 伪造的场景都应使用此技能