
GromHacks Labs -- 彼らがあなたに持たせたくないペイロードリスト。母船から送り込まれた1,324のインジェクションプローブで、20種類の脆弱性クラスにわたって何がインジェクション可能かを検出します。私たちは悪用はしません。ただドアをノックして、誰が出てくるか見るだけです。すべてのペイロードは実パーサーでテスト済み。なぜならエイリアンが証拠を要求するからです。入力を信じるな。すべてに疑問を持て!
動作しないペイロードを見つけましたか? ペイロード、対象コンテキスト、期待していた動作を添えて issue を作成 してください。修正や新しいペイロードのプルリクエストはいつでも歓迎します。
研究は進行中です。 このプロジェクトは活発に開発されており、新しいインジェクションコンテキスト、ペイロード、検証の改善が随時追加されます。
免責事項: これらのペイロードは、許可されたセキュリティテスト、教育、研究目的のみに提供されています。作者は、いかなる誤用や二次的な影響についても責任や義務を負いません。完全に自己責任で使用してください。このプロジェクトを使用することで、あなたは自身の行為に対して全責任を負うことに同意したものとみなされます。
ライセンス: MIT - LICENSE を参照
37 のセキュリティテストカテゴリにわたる 1,618 個のユニークなペイロード文字列に加えて、横断的なポリグロットセット、35 の名前付きデシリアライゼーション形式・ライブラリ・シンク、および 20 のテンプレートエンジンを収録しています。コンテキスト保持型のマスターには 661 セクションにわたる 1,760 個のペイロード対セクションの割り当てが含まれるため、共有される文字列は適用可能なすべてのパーサーおよび挿入コンテキストに関連付けられたままになります。108 ペイロードの最小リストには、GraphQL、HQL/JPQL、XPath、JSONPath、JSON 構築、HTTP パラメータ汚染、XQuery、Firestore、SMTP/IMAP およびメールヘッダー、Host ヘッダー、XML/SOAP 構造、LDAP DN、HTML/CSS、CSV、ログ、LaTeX の代表的なプローブが含まれています。検証カバレッジはペイロード、パーサー、挿入コンテキストによって異なります。
言語マトリクスは C、C++、C#、Dart、Elixir、Erlang、Go、Java、JavaScript、Kotlin、Lua、Objective-C、Perl、PHP、Python、Ruby、Rust、Scala、Swift、TypeScript をカバーしています。
汎用バリデータはスモークチェックであり、悪用の証明ではありません。以前の結果では、任意のエラーやリクエストタイムアウトをヒットとしてカウントしていました。コンテキスト回帰テストは、文字列、数値、インジェクトされた ORDER BY 句、直接ソート式の位置を含む 9 つのライブ SQL ダイアレクトをカバーしています。GraphQL.js、Hibernate HQL/JPQL、直接 XPath/XQuery/JSONPath、JSON 構築と重複パラメータ汚染、Firestore 構造化フィルタ、SMTP/IMAP コマンドおよびメールヘッダーインジェクション、Host ヘッダー URL ポイズニング、XML および SOAP 構造、LDAP フィルタおよび DN インジェクション、Chromium における HTML/CSS/XSS、CSV 数式セルブレイクアウト、ログ偽造、LaTeX ソースインジェクション、POSIX シェルのクォート/バッククォート/パイプライン、$() およびパーセントデコードされた改行コンテキスト、ローカル SSRF/パス/XXE フィクスチャ、MongoDB/CouchDB/Redis/ArangoDB/DynamoDB PartiQL/Cassandra CQL/Couchbase SQL++/Elasticsearch/Neo4j、EL、XSLT、SSI、プロトタイプ汚染、および代表的なデシリアライゼーションコールバックをカバーしています。ブラウザチェックには、クォートなし属性、属性フラグメント、HTML コメント、</script> パーサーコンテキストが含まれます。言語マトリクスは、要求された全 20 言語で算術、エラー、タイミング、OOB、生成ソースのクォートブレイクアウトをチェックします。一般的な代替クォートおよびバッククォート文字列コンテキストはサポートされている場合にテストされ、全 20 言語で共有算術ポリグロット、該当する場合はランタイムフォーマット文字列も併せてテストされます。検証済みマトリクスと残存するエンジン固有のギャップについては COVERAGE.md を参照してください。
公開されているほとんどのペイロードリストは、脆弱性の種類ごとに整理されています。SQL インジェクション用のリスト、XSS 用の別のリスト、コマンドインジェクション用のまた別のリスト、といった具合です。テスターは対象に一致すると思われるリストを選び、intruder ツールに読み込み、パラメータに対して実行します。脆弱性クラスの推測を誤れば、スキャン全体が何も生み出しません。バックエンドが珍しいデータベース、非標準のテンプレートエンジン、あるいはリストが考慮していない言語であれば、ペイロードは静かに失敗します。テスターはパラメータはクリーンだと思い込んで次へ進みます。
このアプローチには 2 つの根本的な問題があります。第一に、テスターが見つける前にどの脆弱性が存在するかを知っている必要があります。第二に、流通しているほとんどのペイロードは理論上のものであり、実際のパーサーに対してテストされることなくプロジェクトやブログ記事間でコピーされています。見た目は正しく、構文的に妥当であることさえあります。しかし、対象から検出可能な応答を実際に引き出すことはありません。
このプロジェクトは、1 つの文字列が複数の関連コンテキストをカバーできる場合に ポリグロット を使用します。ペイロードの挙動は、アプリケーションがそれをどのように挿入するかによって依然として左右されます。シェル引数はクォートなし、シングルクォート、ダブルクォートのいずれかであり得ます。SQL の文字列式と数値式は異なります。テンプレートエンジンは互換性のないデリミタを使用します。テストベッドはそれらのラッパーを明示的にモデル化する必要があります。単一の文字列がすべてのクォート、コメント、パーサーから脱出できると仮定すべきではありません。
ペイロードは 検出ピラー -- 一致するコンテキストにおいて証拠となり得る観測可能な応答 -- を中心にグループ化されています:
7*191 のような算術式が含まれ、それが 1337 に評価されます。その数値が応答に現れ、かつペイロードがリテラルの 1337 ではなく 7*191 のみを送信した場合、対象パーサーがその式を評価したことになります。この結果はそのシンク -- クエリ、テンプレート、式言語、またはコードランタイムであり得る -- における評価を証明します。これらのシグナルは、ペイロードの実際のコンテキストでチェックされた場合にのみ有用です。汎用バリデータはスモークテストです。パーサーエラー、タイムアウト、または反射された文字列だけでは、ペイロードが実行されたことを証明しません。より強力な証拠にはコンテキスト固有の 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 検索やサブプロセス依存を回避します。ランタイムポリシーと設定によって、ネットワークアクセスや個々の API が依然として無効化される可能性があります。フィクスチャマトリクスは、実行された正確な環境を記録します。
標準ライブラリのインポートがブロックされる可能性がある場合、一部のペイロードは Node の Atomics.wait() や OOB 用の生ソケット接続など、インポート不要の代替手段を使用します。リソースを大量に消費するループは、デフォルトのコーパスチェックから除外されています。
すべてがポリグロットになれるわけではありません。テンプレートエンジンは根本的に互換性のない構文を使用します -- Jinja2 の {{}} は ERB の <%= %> にとって何の意味もなく、どちらも Freemarker の ${} としてはパースされません。デシリアライゼーション形式は、1 つのフレームワークに固有のバイナリまたは構造化データです。これらのカテゴリでは、プロジェクトは同じ検出ピラーシステムの下に整理されたエンジンごとのペイロードを使用し、11 のランタイムグループにわたる 20 のテンプレートエンジンと 35 の名前付きデシリアライゼーション形式・ライブラリ・シンクをカバーしています。
コーパスは、互換性のあるコンテキスト向けのポリグロットと、構文が異なる場合のエンジンごとのプローブを組み合わせています。テストカバレッジと結果は、実行されたフィクスチャとラッパーに限定されます。
以前の FIRE/NO-FIRE の主張は撤回されます: 汎用バリデータは任意のエラーやリクエストタイムアウトをヒットとしてカウントしていました。testbed/test_context_polyglots.py のコンテキストマトリクスは、SQLite、PostgreSQL、MySQL、MariaDB、CockroachDB、H2、Firebird、Oracle、SQL Server における SQL の挙動、GraphQL.js、Hibernate HQL/JPQL、XPath、XQuery、JSONPath、Firestore 構造化フィルタ、MongoDB、CouchDB、Redis、ArangoDB、DynamoDB PartiQL、Cassandra CQL、Couchbase SQL++、Elasticsearch、Neo4j における NoSQL/クエリの挙動、クォートなし・クォートあり・バッククォート・パイプラインコンテキストにおける POSIX シェルインジェクション、ローカル SSRF/パス/XXE フィクスチャ、ベースラインに対する SSI 出力、コード評価およびデシリアライゼーションコールバック、バリデータのタイムアウト処理、およびクロスエンジンとエンジンごとの SSTI 算術をチェックします。testbed/test_windows_contexts.py は Windows CMD/PowerShell コンテキストを棚卸しし、Windows ホスト向けのネイティブシェルチェックを備えています。
このリストは、有用な場合はシグナルごとにプローブをグループ化しますが、一部のエントリはダイアレクトまたはコンテキスト固有であり、いくつかのカテゴリは 4 つの検出ピラーすべてをサポートしていません。結果はフィクスチャ固有のものとして扱い、より広いカバレッジには対応するカテゴリ別ペイロードを使用してください。
| ペイロード数 | カテゴリ | ピラー |
|---|---|---|
| 4 | SQLi | エラー、文字列/数値ブール算術、MySQL タイミング。検証済み OOB プローブなし |
| 4 | SSTI | エラー、エンジンサブセットの算術/タイミング/OOB プローブ |
| 3 | OS Cmd | テスト済み POSIX sh のクォート/バッククォート/パイプラインコンテキストにおける算術、タイミング、OOB、加えて $() および改行ブレイクアウトプローブ |
| 3 | Code Injection | 算術、タイミング、OOB (クロス言語) |
| 2 | XSS | 算術、OOB |
| 2 | XXE | ファイル読み取り、OOB |
| 2 | SSRF | エラー、OOB |
| 1 | Path Traversal | ファイル読み取り |
| 2 | NoSQL | ドキュメント演算子、エラー。算術とタイミングはダイアレクト固有 |
| 1 | EL Injection | 算術 |
| 1 | Prototype Pollution | 算術 |
| 1 | CRLF/Header | 算術 |
| 1 | Format String | エラー |
| 1 | SSI | ディレクティブエコー (マーカーをベースラインと比較) |
| 2 | LDAP Injection | エラー、算術 |
| 3 | XSLT Injection | エラー、算術、OOB |
| 2 | Elasticsearch | エラー、算術 |
| 2 | Cypher/Neo4j | エラー、タイミング |
| 1 | CouchDB | エラー |
| 1 | CSV Injection | 数式先頭セルブレイクアウト |
| 1 | HTML Injection | 要素構造 |
| 1 | Log Injection | CRLF によるイベント偽造 |
| 1 | LaTeX Injection | 無害なマーカーによるコマンドブレイクアウト |
| 1 | JSON Injection | プロパティブレイクアウト |
| 1 | HTTP Parameter Pollution | 重複値の検証/使用の不一致 |
| 1 | SMTP Header Injection | Bcc ヘッダーブレイクアウト。メール配信なし |
| 1 | GraphQL | セレクションブレイクアウト |
| 1 | HQL/JPQL | 共有文字列述語ブレイクアウト |
| 1 | XPath | 述語ブレイクアウト |
| 1 | JSONPath | ユニオン選択 |
| 1 | XQuery | 述語ブレイクアウト |
| 1 | Firestore | 構造化フィルタ拡張 |
| 3 | Groovy | 算術、タイミング、OOB |
| 46 | Deserialization | サポートされている場合はマルチピラー、それ以外はエラーのみ |
コンパクトな許可済みテスト実行には ready/minimal/payloads-only.txt を使用してください。シェルおよび SQL プローブでは、結果を解釈する際に対象のクォートまたはクエリコンテキストを保持してください。
完全なオペレーターガイドについては HOWTOUSE.md を参照してください。「パラメータを見ているが、何を投げればいいのか?」を再現可能なワークフローに変えます: