
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など)は、エラーベースの検出を取得します。フルカテゴリリストに切り替える前に、すべてのパラメータに対してこれを発射してください。
| ペイロード数 | カテゴリ | ピラー |
|---|---|---|
| 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 | デシリアライゼーション | サポートされている場合はマルチピラー、それ以外はエラーのみ |
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の一致するペイロードをロードします。id=42とJSESSIONIDが見える」から「by-category/sqli.txt + Javaデシリアライゼーション + ELインジェクションを試して、mathピラーを監視」へと1回のルックアップで移行します。payloadctl prepareを実行する前にHOWTOUSE.mdを使用してください。最初にフィンガープリント、次に最小限リスト、3番目にカテゴリのドリルダウン。すべてのパラメータに1,353のペイロードをショットガンのように使わないでください。
./tools/payloadctl prepare YOUR_CALLBACK.oastify.com
`prepare`実行後、使用可能なファイルは `ready/full/` および `ready/minimal/` に格納され、以下の構造で提供されます。