
GromHacks Labs -- 那些他们不想让你拥有的 payload 列表。母舰降下 1,324 个注入探测,检测 20 种常见漏洞类别的可注入点。我们不利用漏洞,只是敲门看看谁会在里面回应。每个 payload 都经过真实解析器测试,因为外星人要求证据。不要信任任何输入。质疑一切!
发现一个不起作用的 payload? 请 open an issue 附上 payload、目标上下文以及你期望的结果。欢迎提交修复或新 payload 的 Pull Request。
研究正在进行中。 该项目正在积极开发中,并将定期更新新的 payload、漏洞类别和验证改进。
免责声明: 这些 payload 仅供授权安全测试、教育和研究目的使用。作者对任何滥用或下游影响不承担任何责任。完全由使用者自行承担风险。使用本项目即表示您对自己的行为承担全部责任。
许可证: MIT - 参见 LICENSE
1,353 个经过验证的注入 payload,覆盖 20 个漏洞类别、31 个反序列化框架和 14 个模板引擎。每个 payload 都能产生可检测的信号。零理论 payload。
验证:1,353 测试 / 1,353 触发 / 0 失败 / 0 跳过,针对 35 个 Docker 测试环境栈。严格验证证明了实际利用(服务器端计算、真实解析器错误、测量的时间延迟、来自目标容器的 OOB 回调)——而非字符串匹配。
大多数公开可用的 payload 列表按漏洞类型组织:一个用于 SQL 注入的列表,另一个用于 XSS,又一个用于命令注入,等等。测试人员选择他们认为与目标匹配的列表,将其加载到入侵工具中,并对一个参数运行。如果他们猜错了漏洞类别,整个扫描就不会产生任何结果。如果后端是一个不常见的数据库、非标准的模板引擎或列表没有考虑到的语言,这些 payload 就会静默失败。测试人员就会认为该参数是安全的,然后继续前进。
这种方法有两个根本性问题。首先,它要求测试人员在发现漏洞之前就知道存在什么漏洞。其次,大多数流传的 payload 都是理论性的——在项目和博客文章之间复制,从未经过真实解析器的测试。它们看起来正确。它们甚至可能在语法上有效。但它们实际上不会触发来自目标的可检测响应。
本项目采用不同的方法。主要工作单元是 polyglot——一个单一的 payload 字符串,被设计成同时在尽可能多的注入上下文中有效(或有意义的无效)。一个 polyglot 可以同时跳出单引号、双引号、括号、块注释、HTML 属性、模板分隔符和反引号上下文。测试人员无需知道漏洞是什么,只需对每个参数发射 polyglot 并观察信号。
此集合中的每个 payload 都围绕 检测支柱 构建——这些是可观察到的响应,确认漏洞存在,无需访问服务器日志、源代码或文件系统:
7*191,计算结果为 1337。如果该数字出现在响应中,而 payload 只发送了 7*191(而非字面上的 1337),则说明后端计算了该表达式——代码执行的证据。如果一个 payload 在针对其目标上下文测试时没有产生至少一个这样的信号,它就不属于这个列表。这里的 1,353 个 payload 中的每一个都已在专门构建的 Docker 测试床上进行了验证,并带有严格的利用证明。零个是理论性的。
传统的 OOB 和时间 payload 依赖 shell 命令:curl、nslookup、ping、sleep。这些命令经常失败。它们依赖于目标操作系统、可用的 PATH、哪个 shell 解释该命令,以及进程是否有权限生成子进程。一个在 Ubuntu 上工作的基于 curl 的 OOB payload 会在 Alpine 上失败(没有 curl),在 Windows 上失败(没有 curl),在受限容器内部也会失败(无法执行出站进程)。
本项目尽可能用语言原生的内置函数代替 shell 命令。Python payload 使用 urllib.request.urlopen() 和 time.sleep()。Java payload 使用 java.net.URL.openStream() 和 Thread.sleep()。Ruby 使用 Net::HTTP.get() 和 Kernel.sleep。PHP 使用 file_get_contents() 和 sleep()。这些函数存在于其各自语言的每个标准安装中——无需 PATH 查找,无需子进程,无操作系统依赖。
即使在标准库导入可能被阻止的情况下(沙箱 eval、受限 exec),payload 也退回到无需导入的替代方案:用于时间的 CPU 自旋循环(Python 中的 sum(range(500000000)),Node 中的 Atomics.wait())和用于 OOB 的原始套接字连接(__import__('socket').create_connection()、fsockopen()、TCPSocket.new())。
并非所有东西都能成为 polyglot。模板引擎使用根本不相容的语法——Jinja2 中的 {{}} 对 ERB 的 <%= %> 毫无意义,两者都不会被解析为 Freemarker 的 ${})。反序列化格式是特定于一个框架的二进制或结构化数据。对于这些类别,本项目使用按引擎划分的 payload,组织在相同的检测支柱系统下,涵盖 7 种语言的 14 个模板引擎和 31 个反序列化框架。
结果是形成了一个单一的语料库,其中 polyglot 处理它们能够处理的上下文(SQLi、OS 命令注入、XSS、代码注入),而专门构建的按引擎 payload 处理其余部分,全部经过验证,全部产生可检测的信号,全部准备好用于逐行注入工具。
83 个 payload 覆盖所有 35 个测试环境栈、所有 55+ 个端点,以及每个类别的所有 4 个检测支柱。验证:83 触发 / 0 未触发 / 0 跳过。
每个注入类别在架构允许的情况下都得到错误 + 数学 + 时间 + OOB 覆盖。支持代码执行的反序列化框架(Pickle、PyYAML、jsonpickle、node-serialize、XMLDecoder、.NET Json.NET)获得完整的多支柱覆盖。限于探测的框架(PHP unserialize、Ruby Marshal、SnakeYAML 等)获得基于错误的检测。在切换到完整类别列表进行深入测试之前,对每个参数发射这个最小列表。
83 次请求,而非 1,353 次。 在 Burp Intruder 中使用 ready/minimal/payloads-only.txt。
完整操作指南请参见 HOWTOUSE.md。它将“我正在查看一个参数,应该用什么来测试它?”变成一个可重复的工作流程:
7*7 返回 49 作为 eval 的泄露信号,{{name}} 渲染为 "Alice" 确认 SSTI,诊断字段泄露 ping 输出,OOB 日志中的 User-Agent 字符串命名抓取器库)、现代栈 ORM 陷阱(Prisma $queryRaw、Rails .order()、Hibernate JPQL concat、Mongoose findOne(req.body)),以及在消耗完整列表之前用于确认怀疑的低成本探测。rO0AB = Java,AAEAAAD///// = .NET BinaryFormatter,BAg = Ruby Marshal,gASV = Python pickle P4,Tzo/YTo = PHP unserialize 等),附带 16 条快速参考备忘卡和消歧启发式方法。在发射之前对 blob 进行指纹识别,以便加载 5-15 个匹配的 payload,而不是全部 232 个。./tools/payloadctl prepare YOUR_CALLBACK.oastify.com
运行 `prepare` 后,您可直接使用的文件位于 `ready/full/` 和 `ready/minimal/`,结构对比如下:
| 文件 | 说明 | 数量 |
|------|------|------|
| `ready/minimal/payloads-only.txt` | **精简版——83 个请求,覆盖所有类别** | 83 |
| `ready/full/payloads-only.txt` | 完整列表,每行一个载荷 | 1,353 |
| `ready/full/by-category/sqli.txt` | 仅 SQL 注入 | 211 |
| `ready/full/by-category/ssti.txt` | 仅模板注入 | 206 |
| `ready/full/by-category/deserialization.txt` | 仅反序列化 | 232 |
| `ready/full/by-category/os-cmd-injection.txt` | 仅操作系统命令注入 | 120 |
| `ready/full/by-category/code-injection.txt` | 仅代码注入 | 123 |
| `ready/full/by-category/ssrf.txt` | 仅 SSRF | 156 |
| `ready/full/by-category/path-traversal.txt` | 仅路径遍历 | 113 |
| `ready/full/by-category/xss.txt` | 仅 XSS | 58 |
| `ready/full/by-category/nosql.txt` | 仅 NoSQL 注入 | 32 |
| `ready/full/by-category/format-string.txt` | 仅格式化字符串 | 38 |
| `ready/full/by-category/el-injection.txt` | 仅表达式语言 | 34 |
| `ready/full/by-category/header-crlf.txt` | 仅 CRLF/头部注入 | 17 |
| `ready/full/by-category/prototype-pollution.txt` | 仅原型污染 | 12 |
| `ready/full/by-category/xxe.txt` | 仅 XXE | 11 |
| `ready/full/by-category/ldap-injection.txt` | 仅 LDAP 注入 | 35 |
| `ready/full/by-category/xslt-injection.txt` | 仅 XSLT 注入 | 30 |
| `ready/full/by-category/elasticsearch-injection.txt` | 仅 Elasticsearch | 30 |
| `ready/full/by-category/cypher-injection.txt` | 仅 Neo4j/Cypher | 27 |
| `ready/full/by-category/couchdb-injection.txt` | 仅 CouchDB | 5 |
| `ready/full/by-category/polyglots.txt` | 跨上下文多语言载荷 | 246 |
| `ready/full/by-pillar/error-payloads-only.txt` | 基于错误的载荷 | 324 |
| `ready/full/by-pillar/timing-payloads-only.txt` | 基于时间的(盲注) | 227 |
| `ready/full/by-pillar/oob-payloads-only.txt` | 带外交互回调 | 209 |
| `ready/full/by-pillar/math-payloads-only.txt` | 数学金丝雀(1337) | 182 |
| `ready/full/by-pillar/reflected-payloads-only.txt` | 反射/边界情况 | 374 |
| `ready/full/encoded/url-encoded/payloads.txt` | URL 编码变体 | 1,353 |
| `ready/full/encoded/base64/payloads.txt` | Base64 变体 | 1,353 |
| `ready/full/encoded/json-safe/payloads.txt` | JSON 安全变体 | 1,353 |
| `ready/full/encoded/double-url-encoded/payloads.txt` | 双重 URL 编码 | 1,353 |
| `ready/full/encoded/html-entity/payloads.txt` | HTML 实体编码 | 1,353 |
| `ready/full/encoded/hex-escaped/payloads.txt` | 十六进制转义变体 | 1,353 |
| `ready/full/encoded/unicode-escaped/payloads.txt` | Unicode 转义变体 | 1,353 |
`ready/minimal/` 目录镜像相同结构(按类别、按检测柱、编码),包含精简载荷集。
自定义输出目录:```bash
./tools/payloadctl prepare YOUR_CALLBACK.oastify.com -o /path/to/engagement/payloads
原始模板带有 {domain} 占位符(用于脚本替换)位于 payloads/lists/full/ 和 payloads/lists/minimal/。
每个 payload 至少产生一个以下信号。在您的响应中搜索它们:
金丝雀值:1337(主要,来自 7*191)和 7331(次要)。检测方法为简单的 grep。
20 个类别中有 13 个拥有全部 4 个支柱。缺少的 7 个(XSS、XSLT、格式化字符串、原型污染、CRLF、XXE、CouchDB)有架构上的原因——你无法实现基于时间的 CRLF 或带外的格式化字符串。在可以跨支柱的情况下,多语言部分会覆盖。
7 种编码格式,每种都包含全部 1,353 个 payload:
最少 payload,最大上下文覆盖。 查看 SPEC.md 获取完整技术规格,包括每个引擎的支柱表和精确的 payload 语法。
优先使用多语言 payload。 一个 payload 同时跳出 '、"、)、*/、-->、反引号和模板分隔符。多语言部分主导主列表。
在多语言不可及的地方按引擎处理。 不同引擎的 SSTI 分隔符和反序列化格式从根本上不兼容。
优先使用内置而非 shell。 OOB 和时间延迟 payload 使用语言原生库:
payloadctl)```bash./tools/payloadctl prepare abc123.oastify.com # output -> ready/ ./tools/payloadctl prepare abc123.oastify.com -o /tmp/payloads # custom dir
./tools/payloadctl build # sources/ -> payloads/full.txt ./tools/payloadctl dist # full.txt + minimum.txt -> payloads/lists/full/ + lists/minimal/ ./tools/payloadctl validate # test all 1,353 payloads against 35 testbed stacks ./tools/payloadctl validate # test a specific wordlist (e.g. lists/minimal/master.txt) ./tools/payloadctl generate # regenerate computed payloads (deser, ssti, sqli, misc) ./tools/payloadctl generate deser # deserialization only ./tools/payloadctl generate ssti # SSTI only
### 典型开发工作流程```bash
# 1. Edit source files
vim payloads/sources/sqli.txt
# 2. Rebuild
./tools/payloadctl build # rebuild full.txt from sources
./tools/payloadctl dist # regenerate lists/full/ + lists/minimal/
# 3. Validate (requires Docker testbeds running)
cd testbed && ./testbed up sqli-sqlite && cd ..
./tools/payloadctl validate # expect: N FIRE / 0 NO-FIRE / 0 SKIPPED
# 4. Prepare for use
./tools/payloadctl prepare YOUR_CALLBACK.oastify.com
. ├── README.md # This file ├── HOWTOUSE.md # Operator guide: context profiling + category selection matrix ├── SPEC.md # Technical spec - per-engine pillars, payload syntax, coverage │ ├── tools/ # CLI and generators │ ├── payloadctl # CLI entry point │ ├── cmd_build.py # Build full.txt from source files │ ├── cmd_dist.py # Generate lists/ directory │ ├── cmd_validate.py # Validate payloads against testbeds │ ├── cmd_validate_strict.py # Strict validation (proves actual exploitation) │ ├── cmd_generate.py # Run payload generators │ ├── cmd_prepare.py # Prepare payloads with callback domain │ ├── generate-deser-final.py # Deserialization generator (31 frameworks) │ ├── generate-ssti-missing.py # SSTI generator (14 engines) │ ├── generate-sqli-code-missing.py # SQLi and code injection generator │ └── generate-misc-missing.py # XXE, XSS, SSRF, path traversal generator │ ├── payloads/ │ ├── full.txt # Master list (1,353 payloads, with ## headers) │ ├── sources/ # Source files (edit these, all validated) │ │ ├── minimum.txt # 83-payload minimal list (validated, all pillars) │ │ ├── polyglots-condensed.txt # Cross-context polyglots (first in master) │ │ ├── sqli.txt # SQL injection (204) │ │ ├── ssti.txt # Template injection (168) │ │ ├── deserialization.txt # Deserialization (116, 31 frameworks) │ │ ├── os-cmd-injection.txt # OS command injection (116) │ │ ├── code-injection.txt # Code injection (112, includes Groovy) │ │ ├── ssrf.txt # SSRF (117) │ │ ├── path-traversal.txt # Path traversal (98) │ │ ├── xss.txt # XSS (49) │ │ ├── format-string.txt # Format string (33) │ │ ├── nosql.txt # NoSQL (26) │ │ ├── el-injection.txt # Expression language (26, includes MVEL) │ │ ├── header-crlf.txt # CRLF/header (14) │ │ ├── prototype-pollution.txt # Prototype pollution (10) │ │ ├── xxe.txt # XXE (8) │ │ ├── ldap-injection.txt # LDAP injection (30) │ │ ├── xslt-injection.txt # XSLT injection (25) │ │ ├── elasticsearch-injection.txt # Elasticsearch (25) │ │ ├── cypher-injection.txt # Neo4j/Cypher (22) │ │ └── couchdb-injection.txt # CouchDB (4) │ └── lists/ # Generated (don't edit, use payloadctl dist) │ ├── full/ # Full payload set │ │ ├── master.txt # 1,353 payloads with ## headers │ │ ├── payloads-only.txt # Raw lines for Burp Intruder │ │ ├── by-category/ # 20 category files │ │ ├── by-pillar/ # 5 pillar files (with -payloads-only variants) │ │ └── encoded/ # 7 encoding variants │ └── minimal/ # Minimal payload set (same structure) │ ├── master.txt # 83 payloads with ## headers │ ├── payloads-only.txt # Raw lines for Burp Intruder │ ├── by-category/ # 20 category files │ ├── by-pillar/ # 5 pillar files (with -payloads-only variants) │ └── encoded/ # 7 encoding variants │ ├── ready/ # Output from payloadctl prepare (gitignored) │ └── testbed/ # Docker validation infrastructure ├── testbed # CLI: ./testbed up ├── docker-compose.oob.yml # OOB callback catcher (HTTP 9999, TCP 9998, DNS 5353) ├── shared/oob-catcher/ # HTTP + LDAP/binary + raw TCP + DNS callback server └── stacks/ # 35 vulnerable application stacks
---
## 添加 Payloads
### 向现有类别添加 payload
1. 编辑 `payloads/sources/` 中的源文件。在 `##Header##` 部分下,每行一个 payload。
2. 每个 payload 必须产生可检测的信号(错误、math 1337、时间 >4.5 秒、OOB、反射)。
3. 重新构建并验证:
make build-validate
bash
./tools/payloadctl build && ./tools/payloadctl dist
./tools/payloadctl validate # 0 NO-FIRE required
### 新增漏洞类别
1. 创建 `payloads/sources/<category>.txt`,使用 `##` 标题为每个支柱(error、math、timing、OOB)划分段落。
2. 将该文件添加到 `tools/cmd_build.py` 的 `SOURCE_FILES` 和 `tools/cmd_dist.py` 的 `CATEGORY_SOURCES` 中。
3. 在 `testbed/stacks/<category>/` 中创建测试环境栈(Dockerfile + 服务器,暴露 `POST /<endpoint>` 接口,接收 `input=<payload>` 并返回 `{"output": "...", "error": "...", "time_ms": N}`)。
4. 在 `tools/cmd_validate.py` 中添加端点路由(`ENDPOINTS` 字典和 `_get_endpoints()` 函数)。
5. 验证:`./tools/payloadctl validate`
### 新增反序列化框架
1. 编辑 `tools/generate-deser-final.py` —— 添加一个输出 payload 的函数(error、math、timing、OOB)。
2. 运行 `./tools/payloadctl generate deser && ./tools/payloadctl build`
3. 按需添加测试环境端点和路由。
### 新增 SSTI 引擎
1. 编辑 `payloads/sources/ssti.txt` —— 添加 `##EngineName (Language) - Pillar##` 小节。使用语言内置函数实现 timing/OOB。
2. 在对应的 `ssti-<language>` 栈中添加测试环境端点。
3. 在 `tools/cmd_validate.py` 的 `ENGINE_MAP` 中添加路由。
### Payload 格式规则
- 每行一个 payload(多行 YAML 使用字面量 `\n`)
- `{domain}` 占位符用于 OOB 回调 URL
- 所有 math payload 使用 `1337` 金丝雀值
- `##Header##` 小节按类别和支柱分组
- 无重复(构建步骤自动去重)
---
## 验证
验证器将每个 payload 对真实易受攻击应用进行测试:```bash
# Start testbeds (Docker required)
cd testbed
./testbed up sqli-sqlite
./testbed up ssti-python
./testbed up deserialization-java
# ... (35 stacks total)
# Run validation
cd ..
./tools/payloadctl validate
# Output: 1,353 FIRE / 0 NO-FIRE / 0 SKIPPED / 1,353 TOTAL
如何工作:
## 部分路由到匹配的测试套件端点input=<payload> 的 POST 请求,检查响应中的信号1337(来自 7*191)、>4.5秒延迟、目标容器的带外回调、文件读取内容(root:x:0:0),或在有效上下文中反射的输入(XSS、CRLF)严格验证(tools/cmd_validate_strict.py)额外检查:
7*191,而非字面 1337)带外接收器位于端口 9999(HTTP + LDAP/二进制检测)和 9998(原始 TCP 全捕获),DNS 在 5353/UDP 上。检测 HTTP 回调、LDAP/ASN.1 二进制连接(JNDI)、DNS 查询和原始 TCP 连接。每个端点接受带 input=<payload> 的 POST /<sink>,并返回 {"output": "...", "error": "...|null", "time_ms": N}。
载荷由 Grom Hacks 研究和开发。基于安全研究社区的工作构建,包括 PayloadsAllTheThings、HackTricks、PortSwigger Web Security Academy 以及个人研究者。所有载荷均已在真实脆弱的应用程序上验证。
| Payload 数量 | 类别 | 检测支柱 |
|---|
| 4 | SQLi | error, math, timing, OOB (跨方言 polyglot) |
| 4 | SSTI | error, math, timing, OOB (跨引擎 polyglot) |
| 3 | OS Cmd | math, timing, OOB (跨 shell polyglot) |
| 3 | 代码注入 | math, timing, OOB (跨语言) |
| 2 | XSS | math, OOB |
| 2 | XXE | 文件读取, OOB |
| 2 | SSRF | error, OOB |
| 1 | 路径遍历 | 文件读取 |
| 2 | NoSQL | math, error |
| 1 | EL 注入 | math |
| 1 | 原型污染 | math |
| 1 | CRLF/Header | math |
| 1 | 格式字符串 | error |
| 1 | SSI | math |
| 2 | LDAP 注入 | error, math |
| 3 | XSLT 注入 | error, math, OOB |
| 2 | Elasticsearch | error, math |
| 2 | Cypher/Neo4j | error, timing |
| 1 | CouchDB | error |
| 3 | Groovy | math, timing, OOB |
| 41 | 反序列化 | 支持时多支柱,否则仅 error |
id=42JSESSIONIDby-category/sqli.txt| 支柱 | Payload 数量 | 检测内容 | 适用场景 |
|---|
| 错误 | 324 | 响应中的异常文本、堆栈跟踪、解析器错误 | 应用反射错误 |
| 时间延迟 | 227 | 响应时间超过 4.5 秒 | 盲测 - 无输出、无错误 |
| 带外 | 209 | 向您的回调服务器发起出站 HTTP/DNS/LDAP/TCP 连接 | 盲测 + 异步 - 时间延迟不可靠 |
| 数学计算 | 182 | 响应正文中的 1337 字面值(服务器计算 7*191) | 输出被反射但无错误 |
| 反射 | 374 | 输入值在响应中回显 | 模糊测试解析器异常 |
| 文件读取 | (子集) | 响应中的 root: 或 [extensions] 内容 | 路径遍历、XXE 文件读取 |
| 类别 | 数量 | 支柱 | 覆盖范围 |
|---|
| SQL注入 | 211 | error, math, timing, oob | MySQL, PostgreSQL, Oracle, MSSQL, SQLite, CockroachDB。UNION、error、timing、OOB。上下文跳出:'、"、)、))、*/、numeric。 |
| 服务端模板注入 | 206 | error, math, timing, oob | Jinja2, Mako, Tornado, EJS, Nunjucks, Pug, Twig, Smarty, ERB, Slim, Haml, Thymeleaf, Pebble, Freemarker, Velocity, Razor, Go template, Mustache, Liquid。均使用语言内置功能。 |
| 反序列化 | 232 | error, math, timing, oob | 31 个框架 / 7 种语言。所有语言原生 payload 均使用内置功能(无 shell 命令)。Python(pickle P0/P2/P4 通过 time.sleep/builtins.eval/urllib,YAML 通过 time.sleep/builtins.eval,jsonpickle),PHP(unserialize),Node(node-serialize 通过 JS busy-wait/http.get,js-yaml,funcster,cryo),Ruby(YAML,Marshal,Oj),Java(Jackson,Fastjson,XStream,SnakeYAML,XMLDecoder,Hessian,JNDI/Log4Shell,ObjectInputStream,ysoserial URLDNS),.NET(Json.NET,BinaryFormatter,SoapFormatter,XmlSerializer,JavaScriptSerializer,LosFormatter,ViewState,ObjectStateFormatter),Perl(Storable,YAML)。 |
| 操作系统命令注入 | 120 | error, math, timing, oob | Bash, CMD, PowerShell。跳出:;、|、||、&&、$()、反引号。IFS 绕过、glob 绕过、十六进制编码。 |
| 代码注入 | 123 | error, math, timing, oob | Python, Node, PHP, Ruby, Perl, Lua, Java ScriptEngine, Groovy。无导入的 CPU 旋转,套接字级 OOB。 |
| SSRF | 156 | error, math, timing, oob | Cloud metadata(AWS/GCP/Azure)、IP 绕过、协议方案、DNS 重绑定、内部服务探测。 |
| 路径遍历 | 113 | error, math, timing, oob | Linux + Windows,编码绕过,空字节,PHP 包装器,UNC,NTFS ADS,8.3 短文件名。 |
| XSS | 58 | error, math, oob | 跨上下文多语言 payload(20+ 上下文)、事件处理器、过滤器绕过、DOM 破坏、突变 XSS、SVG、OOB。 |
| 格式化字符串 | 38 | error, math | C/C++(%s%n%x)、Python({0.__class__})、.NET({0:X})。 |
| NoSQL | 32 | error, math, timing, oob | MongoDB 操作符注入、$where 时间延迟、OOB、Redis 命令。 |
| EL 注入 | 34 | error, math, timing, oob | SpEL、OGNL、MVEL、Unified EL。通过 java.net.URL 实现的 OOB。 |
| CRLF/头部注入 | 17 | error, math, oob | 响应拆分、头部注入、通过 Host 头实现的 OOB。 |
| 原型污染 | 12 | error, math | __proto__、constructor.prototype、JSON 和查询字符串变体。 |
| XXE | 11 | error, timing, oob, file-read | 外部实体、XInclude、参数实体、Billion Laughs DoS。 |
| LDAP 注入 | 35 | error, math, timing, oob | 过滤器注入、认证绕过、通配符时间延迟、referral OOB。 |
| Elasticsearch | 30 | error, math, timing, oob | Painless 脚本注入、查询 DSL、query_string 语法。 |
| Cypher/Neo4j | 27 | error, math, timing, oob | Cypher 查询注入、APOC sleep、LOAD CSV OOB。 |
| CouchDB | 5 | error, math | Mango 查询注入、操作符注入、认证绕过。 |
| XSLT 注入 | 30 | error, math, oob, file-read | XPath 数学运算、document() SSRF、文件读取、system-property() 信息泄露。 |
| 多语言/边界情况 | 246 | error, math, timing, oob | 跨上下文多语言 payload + 缓冲区溢出、整数边界、类型混淆、空字节。 |
| 编码格式 | 使用场景 |
|---|
| URL 编码 | 标准查询/表单参数 |
| 双重 URL 编码 | WAF 绕过、双重解码漏洞 |
| Base64 | API 主体、JWT、序列化参数 |
| JSON 安全 | JSON 请求体(转义引号) |
| HTML 实体 | HTML 属性注入 |
| 十六进制转义 | 二进制协议、底层注入 |
| Unicode 转义 | Unicode 归一化绕过 |
| 语言 | OOB 内置函数 | 时间延迟内置函数 |
|---|
| Python | urllib.request.urlopen() | time.sleep(5) |
| Java | java.net.URL.openStream() | Thread.sleep(5000) |
| Node | require('http').get() | Date.now() busy-wait 循环 |
| PHP | file_get_contents(), fsockopen() | sleep(5) |
| Ruby | Net::HTTP.get(), TCPSocket.new() | sleep(5) |
| Perl | IO::Socket::INET | select(undef,undef,undef,5) |
| .NET | System.Net.WebClient | Thread.Sleep(5000) |
Shell 命令(curl、nslookup)依赖于操作系统和 PATH。内置命令在任何地方都有效。
尽可能无导入。 即使导入被阻止,CPU 旋转计时也能工作:
sum(range(500000000))(约 7 秒,无导入)Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,5000)(精确 5 秒)99999999.times{1+1}作为回退的套接字级 OOB。 当 HTTP 库被阻止时:__import__('socket').create_connection()、fsockopen()、TCPSocket.new()、new java.net.Socket()。
| 栈 | 端口 | 语言 | 端点 |
|---|
| sqli-sqlite | 8001 | Python | /sqli, /sqli-numeric |
| sqli-postgres | 8030 | Python | /sqli |
| ssti-python | 8003 | Python | /jinja2, /mako, /tornado |
| ssti-node | 8011 | Node | /ejs, /nunjucks, /pug |
| ssti-php | 8020 | PHP | /twig, /smarty |
| ssti-ruby | 8025 | Ruby | /erb, /slim, /haml |
| ssti-java | 8040 | Java | /freemarker, /velocity, /pebble, /thymeleaf |
| os-cmd-injection | 8002 | Python | /system, /popen |
| code-injection-python | 8004 | Python | /eval |
| code-injection-node | 8012 | Node | /eval |
| code-injection-php | 8021 | PHP | /eval |
| code-injection-ruby | 8026 | Ruby | /eval, /yaml, /marshal, /oj |
| code-injection-perl | 8031 | Perl | /eval, /storable, /yaml |
| xss | 8010 | Node | /reflected |
| xxe | 8008 | Python | /parse, /xinclude |
| ssrf | 8007 | Python | /fetch |
| path-traversal | 8006 | Python | /read |
| nosql-redis | 8015 | Node | /eval |
| el-injection-java | 8041 | Java | /spel, /ognl |
| prototype-pollution | 8013 | Node | /merge |
| deserialization-python | 8005 | Python | /pickle, /yaml, /jsonpickle |
| deserialization-node | 8014 | Node | /unserialize, /yaml, /funcster |
| deserialization-php | 8022 | PHP | /unserialize, /unserialize-b64, /phar |
| deserialization-java | 8042 | Java | /deserialize, /yaml, /jackson, /fastjson, /xstream, /xmldecoder, /hessian |
| deserialization-dotnet | 8045 | .NET | /jsonnet, /binaryformatter, /xmlserializer, /losformatter, /javascriptserializer |
| log4j-jndi | 8046 | Java | /log |
| sqli-mysql | 8050 | Python | /sqli, /sqli-numeric |
| nosql-mongo | 8051 | Node | /find, /where, /aggregate |
| ssi-esi | 8035 | Python | /ssi |
| ldap-injection | 8055 | Python + OpenLDAP | /search, /auth |
| xslt-injection | 8056 | Python | /transform, /xpath |
| elasticsearch | 8057 | Python + ES 7.17 | /search, /script |
| cypher-injection | 8058 | Python + Neo4j 5 | /query, /search |
| couchdb-injection | 8059 | Python + CouchDB 3 | /find |
| groovy-injection | 8060 | Groovy/JDK 21 | /eval |