Web 脆弱性の方法論

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

In every Web Pentest, there are several hidden and obvious places that might be vulnerable. This post is meant to be a checklist to confirm that you have searched for vulnerabilities in all the possible places.

プロキシ

Tip

現在、web applications は通常何らかの intermediary proxies を利用しており、これらは脆弱性を悪用するために(悪)用される可能性があります。これらの脆弱性が成立するには脆弱な proxy が存在することが必要ですが、通常はバックエンド側の追加の脆弱性も必要になります。

ユーザー入力

Tip

ほとんどの web applications は後で処理されるデータの入力をユーザに許可します。サーバが期待するデータ構造によって、適用される脆弱性が変わる場合があります。

反映された値

入力したデータが何らかの形でレスポンスに反映される場合、そのページはいくつかの脆弱性の影響を受ける可能性があります。

上記の脆弱性の中には特別な条件が必要なものもあれば、単にコンテンツが反映されるだけで成立するものもあります。脆弱性を素早くテストするための興味深い polygloths は次で見つけられます:

Reflecting Techniques - PoCs and Polygloths CheatSheet

検索機能

その機能がバックエンド内のデータを検索するために使われる場合、任意のデータを検索するために(悪)用できる可能性があります。

フォーム、WebSockets、PostMsgs

WebSocket がメッセージを送信したり、ユーザにアクションを実行させるフォームがあると脆弱性が発生することがあります。

Cross-site WebSocket hijacking & localhost abuse

WebSocket のアップグレードはクッキーを自動的に転送し、ws://127.0.0.1 をブロックしないため、任意の web origin が Origin 検証をスキップするデスクトップ IPC エンドポイントを操作できる場合があります。ローカルエージェントを通じて JSON-RPC ライクな API を公開しているランチャーを見つけたら:

  • 送出されるフレームを観察して、各メソッドに必要な type/name/args タプルを複製します。
  • ブラウザから直接リッスンポートを総当たりし(Chromium は約16k の失敗したアップグレードを処理できます)、ループバックソケットがプロトコルバナーで応答するまで試行します — 同じ負荷では Firefox はすぐにクラッシュする傾向があります。
  • create → privileged action のペアを連鎖させます。例:GUID を返す create* メソッドを呼び出し、直ちに対応する *Launch* メソッドを攻撃者制御のペイロードで呼び出します。

任意の JVM フラグ(例えば AdditionalJavaArguments)を渡せる場合、-XX:MaxMetaspaceSize=<tiny> でエラーを強制し、-XX:OnOutOfMemoryError="<cmd>" を付けることでアプリケーションロジックに触れることなく OS コマンドを実行できます。手順は WebSocket attacks を参照してください。

HTTP ヘッダ

Web サーバが返す HTTP ヘッダによっては、いくつかの脆弱性が存在する場合があります。

バイパス

特定の機能では回避策が有用な場合があります。

構造化オブジェクト / 特定の機能

一部の機能は(言語のシリアライズオブジェクトや XML のように)データを非常に特定のフォーマットで構造化することを要求します。そのため、その種のデータを処理しているかどうかでアプリケーションが脆弱かどうかを判断しやすくなります。特定の機能は、入力が特定のフォーマットである場合にも脆弱になることがあります(例:Email Header Injections)。

ファイル

ファイルをアップロードできる機能は複数の問題に対して脆弱な可能性があります。ユーザ入力を含むファイルを生成する機能は、予期しないコードを実行することがあります。ユーザがユーザによってアップロードされた、またはユーザ入力を含む自動生成されたファイルを開くと、危害を受ける可能性があります。

外部アイデンティティ管理

その他の有用な脆弱性

これらの脆弱性は他の脆弱性を悪用するうえで役立つことがあります。

Web サーバ & ミドルウェア

エッジスタックのミスコンフィグレーションは、アプリケーション層でより重大なバグの引き金になることがよくあります。

アプリケーションフレームワーク & スタック

フレームワーク固有のプリミティブは、しばしばガジェット、危険なデフォルト設定、あるいはフレームワークが所有するエンドポイントを露出させます。

CMS、SaaS & マネージドプラットフォーム

攻撃対象面が大きい製品は、既知のエクスプロイト、脆弱なプラグイン、あるいは特権的な管理者エンドポイントを同梱していることがよくあります。

API、バケット & 統合

サーバサイドのヘルパーやサードパーティ統合は、ファイル解析やストレージ層の弱点を露出させることがあります。

サプライチェーン & 識別子の悪用

ビルドパイプラインや予測可能な識別子を狙う攻撃は、従来のバグを悪用する前の初期足がかりとなることがあります。

Web3、拡張機能 & ツール

現代のアプリケーションはブラウザ、ウォレット、オートメーションパイプラインに拡張されているため、これらのベクタも対象に含めてください。

参考文献

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする