
GromHacks Labs -- 彼らがあなたに持たせたくないペイロードリスト。母船から送り込まれた1,324のインジェクションプローブで、20種類の脆弱性クラスにわたって何がインジェクション可能かを検出します。私たちは悪用はしません。ただドアをノックして、誰が出てくるか見るだけです。すべてのペイロードは実パーサーでテスト済み。なぜならエイリアンが証拠を要求するからです。入力を信じるな。すべてに疑問を持て!
動作しないペイロードを見つけましたか? issueを開く 際に、ペイロード、ターゲットコンテキスト、期待した動作を記載してください。修正や新しいペイロードを含むプルリクエストはいつでも歓迎します。
研究は継続中です。 このプロジェクトは活発に開発が進められており、新しいペイロード、脆弱性クラス、検証の改善が定期的に追加されます。
免責事項: これらのペイロードは、許可されたセキュリティテスト、教育、研究目的のみで提供されます。著者は、誤用や派生的な影響について一切の責任を負いません。ご自身の責任でご使用ください。このプロジェクトを使用することにより、お客様はご自身の行動に対して全責任を負うことに同意したものとみなされます。
ライセンス: MIT - LICENSE を参照
20の脆弱性クラス、31のデシリアライゼーションフレームワーク、14のテンプレートエンジンをカバーする1,353の検証済みインジェクションペイロード。すべてのペイロードは検出可能なシグナルを生成します。理論上のペイロードはゼロです。
検証:1,353テスト / 1,353発火 / 0失敗 / 0スキップ(35のDockerテストベッドスタックに対して)。厳密な検証により、実際の悪用(サーバーサイド計算、実際のパーサーエラー、測定されたタイミング遅延、ターゲットコンテナからのOOBコールバック)が証明されており、単なる文字列マッチングではありません。
公開されているペイロードリストのほとんどは、脆弱性の種類ごとに整理されています。SQLインジェクション用のリスト、XSS用の別のリスト、コマンドインジェクション用の別のリストといった具合です。テスターはターゲットに合致すると思われるリストを選び、それを侵入ツールにロードして、パラメータに対して実行します。脆弱性クラスを誤って推測すると、スキャン全体が何も生成しません。バックエンドが珍しいデータベース、非標準のテンプレートエンジン、またはリストが想定していなかった言語である場合、ペイロードは静かに失敗します。テスターはパラメータはクリーンだと思い込んで先に進みます。
このアプローチには2つの根本的な問題があります。第一に、テスターは脆弱性を見つける前に、それが何であるかを知っている必要があります。第二に、流通しているペイロードのほとんどは理論上のものであり、プロジェクトやブログ記事の間でコピーされるだけで、実際のパーサーに対してテストされたことはありません。見た目は正しいかもしれません。構文的に有効かもしれません。しかし、ターゲットから検出可能な応答を実際に引き起こすことはありません。
このプロジェクトは別のアプローチを取ります。主な作業単位はポリグロットです。これは、同時にできるだけ多くのインジェクションコンテキストで有効(または意味のある無効)になるように設計された単一のペイロード文字列です。1つのポリグロットで、シングルクォート、ダブルクォート、括弧、ブロックコメント、HTML属性、テンプレート区切り文字、バックティックコンテキストを同時に脱出します。脆弱性が何であるかを知る必要はなく、テスターはすべてのパラメータにポリグロットを発射し、シグナルを監視します。
このコレクションのすべてのペイロードは、検出ピラーを中心に構築されています。これは、サーバーログ、ソースコード、ファイルシステムへのアクセスを必要とせずに脆弱性の存在を確認する観測可能な応答です。
7*191のように評価すると1337になる算術式が含まれています。応答にその数字が現れ、ペイロードがリテラルの1337ではなく7*191のみを送信した場合、バックエンドが式を計算したことになります。これはコード実行の証拠です。ペイロードがターゲットコンテキストに対してテストされたときにこれらのシグナルの少なくとも1つを生成しない場合、そのペイロードはリストに含める価値がありません。ここにある1,353のペイロードはすべて、厳密な悪用証明を伴う専用のDockerテストベッドに対して検証されています。理論上のものはゼロです。
従来のOOBおよびタイミングペイロードは、curl、nslookup、ping、sleepなどのシェルコマンドに依存しています。これらは常に壊れます。ターゲットOS、利用可能なPATH、どのシェルがコマンドを解釈するか、プロセスにサブプロセスを生成する権限があるかどうかに依存します。Ubuntuで動作するcurlベースのOOBペイロードは、Alpine(curlなし)、Windows(curlなし)、制限されたコンテナ内部(アウトバウンドプロセス実行なし)では失敗します。
このプロジェクトでは、可能な限りシェルコマンドを言語ネイティブの組み込み関数に置き換えています。Pythonペイロードはurllib.request.urlopen()とtime.sleep()を使用します。Javaペイロードはjava.net.URL.openStream()とThread.sleep()を使用します。RubyはNet::HTTP.get()とKernel.sleepを使用します。PHPはfile_get_contents()とsleep()を使用します。これらの関数は、それぞれの言語のすべての標準インストールに存在します。PATHの参照、サブプロセス、OS依存性はありません。
標準ライブラリのインポートさえブロックされている場合(サンドボックス化されたeval、制限されたexecなど)、ペイロードはインポート不要の代替手段にフォールバックします。タイミングにはCPUスピンループ(Pythonのsum(range(500000000))、NodeのAtomics.wait())、OOBには生のソケット接続(__import__('socket').create_connection()、fsockopen()、TCPSocket.new())です。
すべてがポリグロットになるわけではありません。テンプレートエンジンは根本的に互換性のない構文を使用します。Jinja2の{{}}はERBの<%= %>には意味がなく、どちらもFreemarkerの${}として解析されません。デシリアライゼーションフォーマットは、バイナリまたは特定のフレームワークに固有の構造化データです。これらのカテゴリでは、プロジェクトは同じ検出ピラーシステムの下で整理されたエンジン別のペイロードを使用し、14のテンプレートエンジンと7言語にわたる31のデシリアライゼーションフレームワークをカバーしています。
結果として、ポリグロットが処理できるコンテキスト(SQLi、OSコマンドインジェクション、XSS、コードインジェクション)を処理し、残りを専用のエンジン別ペイロードが処理する単一のコーパスが得られます。すべて検証済み、すべて検出可能なシグナルを生成、すべてラインごとのインジェクションツールで使用可能です。
すべての35テストベッドスタック、55以上のエンドポイント、カテゴリごとの4つの検出ピラーすべてをカバーする83のペイロード。検証:83発火 / 0不発 / 0スキップ。
すべてのインジェクションカテゴリは、アーキテクチャ的に可能な場合、エラー+計算+タイミング+OOBのカバレッジを取得します。コード実行をサポートするデシリアライゼーションフレームワーク(Pickle、PyYAML、jsonpickle、node-serialize、XMLDecoder、.NET Json.NET)は、完全なマルチピラーカバレッジを取得します。プローブに限定されたフレームワーク(PHP unserialize、Ruby Marshal、SnakeYAMLなど)は、エラーベースの検出を取得します。フルカテゴリリストに切り替える前に、すべてのパラメータに対してこれを発射してください。
1,353ではなく83リクエスト。 Burp Intruderには ready/minimal/payloads-only.txt を使用してください。
完全なオペレーターガイドは HOWTOUSE.md を参照してください。「パラメータを見ているが、何を投入すればいいのか?」を反復可能なワークフローに変換します。
7*7が49を返す、{{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エントリのクイックリファレンスチートカードと曖昧性解消ヒューリスティック付き。発射する前にブロブをフィンガープリントして、232すべてではなく5~15の一致するペイロードをロードします。payloadctl prepareを実行する前にHOWTOUSE.mdを使用してください。最初にフィンガープリント、次に最小限リスト、3番目にカテゴリのドリルダウン。すべてのパラメータに1,353のペイロードをショットガンのように使わないでください。
./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行に1ペイロード | 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` | OSコマンドインジェクションのみ | 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` | 16進エスケープ版 | 1,353 |
| `ready/full/encoded/unicode-escaped/payloads.txt` | Unicodeエスケープ版 | 1,353 |
`ready/minimal/` ディレクトリも同じ構造(by-category、by-pillar、encoded)を持ち、最小ペイロードセットが格納されています。
カスタム出力ディレクトリ:```bash
./tools/payloadctl prepare YOUR_CALLBACK.oastify.com -o /path/to/engagement/payloads
Raw templates with {domain} placeholder (for scripted substitution) are in payloads/lists/full/ and payloads/lists/minimal/.
すべてのペイロードは、これらのシグナルの少なくとも1つを生成します。応答でこれらをgrepしてください:
Canary values: 1337 (primary, from 7*191) and 7331 (secondary). Detection is a simple grep.
13 of 20 categories have all 4 pillars. The 7 that don't (XSS, XSLT, Format String, Prototype Pollution, CRLF, XXE, CouchDB) have architectural reasons -- you can't do timing-based CRLF or OOB format strings. Where cross-pillar IS possible, the polyglots section covers it.
7 encoding formats, each with all 1,353 payloads:
Minimum payloads, maximum context coverage. See SPEC.md for the full technical specification with per-engine pillar tables and exact payload syntax.
Polyglots first. One payload breaks out of ', ", ), */, -->, backticks, and template delimiters simultaneously. Polyglot sections lead the master list.
Per-engine where polyglots can't reach. SSTI delimiters and deserialization formats are fundamentally incompatible across engines.
Built-in over shell. OOB and timing payloads use language-native libraries:
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
## ペイロードの追加
### 既存カテゴリへのペイロード追加
1. `payloads/sources/` 内のソースファイルを編集します。各 `##Header##` セクションの下に1行に1ペイロードを記述します。
2. すべてのペイロードは、検出可能なシグナル(error, math 1337, timing >4.5s, OOB, reflection)を生成する必要があります。
3. リビルドして検証します。 ```bash
./tools/payloadctl build && ./tools/payloadctl dist
./tools/payloadctl validate # 0 NO-FIRE required
payloads/sources/<category>.txtを作成し、各柱(error, math, timing, OOB)ごとに##ヘッダーを付ける。tools/cmd_build.pyのSOURCE_FILESとtools/cmd_dist.pyのCATEGORY_SOURCESに追加する。testbed/stacks/<category>/にテストベッドスタックを作成する(Dockerfile + POST /<endpoint>を公開するサーバー。input=<payload>を受け取り、{"output": "...", "error": "...", "time_ms": N}を返す)。tools/cmd_validate.pyにエンドポイントルーティングを追加する(ENDPOINTSディクショナリと_get_endpoints()関数)。./tools/payloadctl validatetools/generate-deser-final.pyを編集し、ペイロード(error, math, timing, OOB)を出力する関数を追加する。./tools/payloadctl generate deser && ./tools/payloadctl build を実行するpayloads/sources/ssti.txtを編集し、##EngineName (Language) - Pillar##セクションを追加する。タイミング/OOBには言語の組み込み機能を使用する。ssti-<language>スタックにテストベッドエンドポイントを追加する。tools/cmd_validate.pyのENGINE_MAPにルーティングを追加する。\nを使用){domain}プレースホルダ1337カナリア##Header##セクションはカテゴリと柱ごとにグループ化バリデータは、実際の脆弱なアプリケーションに対してすべてのペイロードをテストします。```bash
cd testbed ./testbed up sqli-sqlite ./testbed up ssti-python ./testbed up deserialization-java
cd .. ./tools/payloadctl validate
動作の仕組み:
1. ペイロードファイルを読み込み、各`##`セクションを対応するテストベッドエンドポイントにルーティングします
2. `input=<payload>`をエンドポイントにPOSTし、レスポンス内のシグナルをチェックします
3. ペイロードは、いずれかのエンドポイントが次の条件を満たした場合に発火します: 実際のパーサー/インタプリタエラー、サーバー計算による`1337`(`7*191`から)、4.5秒超の遅延、ターゲットコンテナからのOOBコールバック、ファイル読み取り内容(`root:x:0:0`)、または有効なコンテキスト(XSS、CRLF)での入力の反映
厳格なバリデーション(`tools/cmd_validate_strict.py`)ではさらに以下を検証します:
- 計算ペイロードがサーバーサイドの計算を証明すること(ペイロードは`7*191`を送信し、リテラル`1337`は送信しない)
- OOBコールバックがテストベッドコンテナのIPから発信されていること
- エラーメッセージに実際のパーサー/インタプリタのシグネチャが含まれ、汎用的なHTTPエラーではないこと
- タイミング遅延が想定範囲(約5秒)内であること
### テストベッドスタック(全35スタック)
| スタック | ポート | 言語 | エンドポイント |
|-------|------|----------|-----------|
| 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` |
OOBキャッチャーはポート9999(HTTP + LDAP/バイナリ検出)および9998(生のTCPキャッチオール)上にあり、DNSは5353/UDP上にあります。HTTPコールバック、LDAP/ASN.1バイナリ接続(JNDI)、DNSクエリ、生のTCP接続を検出します。すべてのエンドポイントは`POST /<sink>`で`input=<payload>`を受け付け、`{"output": "...", "error": "...|null", "time_ms": N}`を返します。
---
## クレジット
ペイロードは[Grom Hacks](https://github.com/gromhacks)によって調査・開発されました。PayloadsAllTheThings、HackTricks、PortSwigger Web Security Academy、および個々の研究者を含むセキュリティ研究コミュニティの成果を基に構築されています。すべてのペイロードは実際の脆弱なアプリケーションに対して検証済みです。
| ペイロード数 | カテゴリ | ピラー |
|---|
| 4 | SQLi | error, math, timing, OOB(方言横断ポリグロット) |
| 4 | SSTI | error, math, timing, OOB(エンジン横断ポリグロット) |
| 3 | OSコマンド | math, timing, OOB(シェル横断ポリグロット) |
| 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/ヘッダー | 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 | デシリアライゼーション | サポートされている場合はマルチピラー、それ以外はエラーのみ |
id=42とJSESSIONIDが見える」から「by-category/sqli.txt + Javaデシリアライゼーション + ELインジェクションを試して、mathピラーを監視」へと1回のルックアップで移行します。| Pillar | Payloads | What to look for | Use when |
|---|
| Error | 324 | Exception text, stack trace, parser error in response | App reflects errors |
| Timing | 227 | Response takes >4.5 seconds | Blind - no output, no errors |
| OOB | 209 | Outbound HTTP/DNS/LDAP/TCP to your callback server | Blind + async - timing unreliable |
| Math | 182 | 1337 literal in response body (server computed 7*191) | Output reflected but no errors |
| Reflected | 374 | Input value echoed back in response | Fuzzing for parser anomalies |
| File-read | (subset) | root: or [extensions] content in response | Path traversal, XXE file read |
| Category | Count | Pillars | Coverage |
|---|
| SQLi | 211 | error, math, timing, oob | MySQL, PostgreSQL, Oracle, MSSQL, SQLite, CockroachDB. UNION, error, timing, OOB. Context breakouts: ', ", ), )), */, numeric. |
| SSTI | 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. All use language built-ins. |
| Deserialization | 232 | error, math, timing, oob | 31 frameworks / 7 languages. All language-native payloads use built-ins (no shell commands). Python (pickle P0/P2/P4 via time.sleep/builtins.eval/urllib, YAML via time.sleep/builtins.eval, jsonpickle), PHP (unserialize), Node (node-serialize via 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). |
| OS Cmd Injection | 120 | error, math, timing, oob | Bash, CMD, PowerShell. Breakouts: ;, |, ||, &&, $(), backticks. IFS bypass, glob bypass, hex encoding. |
| Code Injection | 123 | error, math, timing, oob | Python, Node, PHP, Ruby, Perl, Lua, Java ScriptEngine, Groovy. Import-free CPU spin, socket-level OOB. |
| SSRF | 156 | error, math, timing, oob | Cloud metadata (AWS/GCP/Azure), IP bypass, protocol schemes, DNS rebinding, internal service probes. |
| Path Traversal | 113 | error, math, timing, oob | Linux + Windows, encoding bypass, null byte, PHP wrappers, UNC, NTFS ADS, 8.3 short names. |
| XSS | 58 | error, math, oob | Cross-context polyglots (20+ contexts), event handlers, filter evasion, DOM clobbering, mutation XSS, SVG, OOB. |
| Format String | 38 | error, math | C/C++ (%s%n%x), Python ({0.__class__}), .NET ({0:X}). |
| NoSQL | 32 | error, math, timing, oob | MongoDB operator injection, $where timing, OOB, Redis commands. |
| EL Injection | 34 | error, math, timing, oob | SpEL, OGNL, MVEL, Unified EL. OOB via java.net.URL. |
| CRLF/Header | 17 | error, math, oob | Response splitting, header injection, OOB via Host header. |
| Prototype Pollution | 12 | error, math | __proto__, constructor.prototype, JSON and query string variants. |
| XXE | 11 | error, timing, oob, file-read | External entities, XInclude, parameter entities, Billion Laughs DoS. |
| LDAP Injection | 35 | error, math, timing, oob | Filter injection, auth bypass, wildcard timing, referral OOB. |
| Elasticsearch | 30 | error, math, timing, oob | Painless script injection, query DSL, query_string syntax. |
| Cypher/Neo4j | 27 | error, math, timing, oob | Cypher query injection, APOC sleep, LOAD CSV OOB. |
| CouchDB | 5 | error, math | Mango query injection, operator injection, auth bypass. |
| XSLT Injection | 30 | error, math, oob, file-read | XPath math, document() SSRF, file read, system-property() info leak. |
| Polyglots/Edge Cases | 246 | error, math, timing, oob | Cross-context polyglots + buffer overflow, integer boundary, type confusion, null byte. |
| Encoding | Use case |
|---|
| URL-encoded | Standard query/form parameters |
| Double-URL-encoded | WAF bypass, double-decode vulns |
| Base64 | API bodies, JWT, serialized params |
| JSON-safe | JSON request bodies (escaped quotes) |
| HTML entity | HTML attribute injection |
| Hex-escaped | Binary protocols, low-level injection |
| Unicode-escaped | Unicode normalization bypass |
| Language | OOB Built-in | Timing Built-in |
|---|
| Python | urllib.request.urlopen() | time.sleep(5) |
| Java | java.net.URL.openStream() | Thread.sleep(5000) |
| Node | require('http').get() | Date.now() busy-wait loop |
| 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 commands (curl, nslookup) depend on OS and PATH. Built-ins work everywhere.
Import-free where possible. CPU spin timing works even when imports are blocked:
sum(range(500000000)) (~7s, no imports)Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,5000) (precise 5s)99999999.times{1+1}Socket-level OOB as fallback. When HTTP libraries are blocked: __import__('socket').create_connection(), fsockopen(), TCPSocket.new(), new java.net.Socket().