Server Side Inclusion/Edge Side Inclusion Injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
(Introduction taken from Apache docs)
SSI (サーバーサイドインクルージョン) は、HTMLページに配置され、ページが提供される際にサーバー上で評価される指示文です。これにより、既存のHTMLページに動的に生成されたコンテンツを追加することができ、CGIプログラムや他の動的技術を介してページ全体を提供する必要がありません。 例えば、既存のHTMLページに次のような指示文を配置することができます:
<!--#echo var="DATE_LOCAL" -->
そして、ページが提供されると、このフラグメントは評価され、その値に置き換えられます:
Tuesday, 15-Jan-2013 19:28:54 EST
SSIを使用するタイミングと、ページ全体をプログラムによって生成するタイミングの決定は、通常、ページのどの部分が静的で、どの部分がページが提供されるたびに再計算される必要があるかの問題です。SSIは、上記のように現在の時刻などの小さな情報を追加するのに最適な方法です。しかし、ページの大部分が提供される際に生成される場合は、他の解決策を探す必要があります。
ウェブアプリケーションが拡張子が**.shtml
、.shtm
、または.stm
**のファイルを使用している場合、SSIの存在を推測できますが、それだけではありません。
典型的なSSI表現は次の形式を持っています:
情報をキャッシュすることや動的アプリケーションに関する問題があり、コンテンツの一部は次回コンテンツが取得される際に異なる可能性があります。これがESIが使用される理由であり、ESIタグを使用して生成する必要がある動的コンテンツを示します。 もし攻撃者がキャッシュコンテンツ内にESIタグを注入できれば、ユーザーに送信される前に文書に任意のコンテンツを注入できる可能性があります。
サーバーからの応答における以下のヘッダーは、サーバーがESIを使用していることを意味します:
このヘッダーが見つからない場合、サーバーはそれでもESIを使用している可能性があります。 盲目的な悪用アプローチも使用できます。リクエストは攻撃者のサーバーに到達する必要があります:
GoSecureが作成した表は、サポートされている機能に応じて、さまざまなESI対応ソフトウェアに対して試すことができる可能性のある攻撃を理解するためのものです。
Includes: <esi:includes>
ディレクティブをサポート
Vars: <esi:vars>
ディレクティブをサポート。XSSフィルターをバイパスするのに便利
Cookie: ドキュメントクッキーはESIエンジンにアクセス可能
Upstream Headers Required: 上流アプリケーションがヘッダーを提供しない限り、サロゲートアプリケーションはESIステートメントを処理しない
Host Allowlist: この場合、ESIのインクルードは許可されたサーバーホストからのみ可能であり、例えばSSRFはこれらのホストに対してのみ可能
ソフトウェア | Includes | Vars | Cookies | Upstream Headers Required | Host Whitelist |
Squid3 | Yes | Yes | Yes | Yes | No |
Varnish Cache | Yes | No | No | Yes | Yes |
Fastly | Yes | No | No | No | Yes |
Akamai ESI Test Server (ETS) | Yes | Yes | Yes | No | No |
NodeJS esi | Yes | Yes | Yes | No | No |
NodeJS nodesi | Yes | No | No | No | Optional |
次のESIディレクティブは、サーバーのレスポンス内に任意のファイルをロードします。
リモートクッキーを盗む
XSSを使用してHTTP_ONLYクッキーを応答に反映させて盗む:
これを「ローカルファイルインクルージョン」と混同しないでください:
以下は、レスポンスにLocation
ヘッダーを追加します。
強制リクエストにヘッダーを追加
レスポンスにヘッダーを追加する(XSSを含むレスポンスで「Content-Type: text/json」をバイパスするのに便利)
これにより、レスポンスに含まれるデバッグ情報が送信されます:
dca パラメータに xslt
値を指定することで、eXtensible Stylesheet Language Transformations (XSLT)
ベースの ESI を含めることが可能です。この含める操作により、HTTP サロゲートは XML および XSLT ファイルを取得し、後者が前者をフィルタリングします。このような XML ファイルは XML External Entity (XXE) 攻撃に利用可能で、攻撃者が SSRF 攻撃を実行できるようにします。しかし、このアプローチの有用性は限られており、ESI 自体がすでに SSRF ベクターとして機能します。基盤となる Xalan ライブラリにサポートがないため、外部 DTD は処理されず、ローカルファイルの抽出が妨げられます。
XSLTファイル:
Check the XSLT page:
XSLT Server Side Injection (Extensible Stylesheet Language Transformations)Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)