# サーバーサイドインクルージョン/エッジサイドインクルージョンインジェクション
htARTE(HackTricks AWS Red Team Expert) を通じてゼロからヒーローまでAWSハッキングを学ぶ!
HackTricksをサポートする他の方法:
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASS&HackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)を**フォロー**する。
- **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、**あなたのハッキングトリックを共有**する。
## サーバーサイドインクルージョン基本情報
**(Apacheドキュメントから引用)**
SSI(サーバーサイドインクルード)は、**HTMLページに配置され、サーバーで評価**されるディレクティブです。これにより、既存のHTMLページに**動的に生成されたコンテンツを追加**することができます。CGIプログラムや他の動的技術を介してページ全体を提供する必要はありません。\
たとえば、次のように既存のHTMLページにディレクティブを配置できます。
``
そして、ページが提供されると、このフラグメントが評価され、その値で置き換えられます。
`Tuesday, 15-Jan-2013 19:28:54 EST`
SSIを使用するタイミングと、ページ全体をプログラムによって生成するタイミングは、通常、ページのどれだけが静的であり、ページが提供されるたびに再計算する必要があるかにかかっています。SSIは、上記のように現在の時刻などの小さな情報を追加する素晴らしい方法です。ただし、ページの大部分が提供される際に生成される場合は、他の解決策を探す必要があります。
Webアプリケーションが拡張子`.shtml`、`.shtm`、または`.stm`を持つファイルを使用している場合、SSIの存在を推測できますが、これに限られません。
典型的なSSI式の形式は次のとおりです。
```
```
### チェック
```javascript
// Document name
// Date
// File inclusion
// Including files (same directory)
// CGI Program results
// Including virtual files (same directory)
// Modification date of a file
// Command exec
// Command exec
// Reverse shell
// Print all variables
// Setting variables
```
## エッジサイドインクルージョン
コンテンツの一部が次回コンテンツが取得される際に異なる可能性があるため、情報や動的アプリケーションをキャッシュする際に問題が発生します。これがESIが使用される理由で、ESIタグを使用してキャッシュバージョンを送信する前に生成する必要がある動的コンテンツを示します。\
攻撃者がキャッシュコンテンツ内にESIタグを挿入できる場合、ユーザーに送信される前にドキュメントに任意のコンテンツを挿入できる可能性があります。
### ESIの検出
サーバーからの応答に含まれる次のヘッダーは、サーバーがESIを使用していることを意味します:
```
Surrogate-Control: content="ESI/1.0"
```
もしこのヘッダーが見つからない場合、サーバーは**とにかくESIを使用している可能性があります**。\
**ブラインドエクスプロイテーションアプローチも使用できます**。攻撃者のサーバーにリクエストが到着するはずです:
```javascript
// Basic detection
hello
// If previous is reflected as "hello", it's vulnerable
// Blind detection
// XSS Exploitation Example
// Cookie Stealer (bypass httpOnly flag)
// Introduce private local files (Not LFI per se)
// Valid for Akamai, sends debug information in the response
```
### ESIの悪用
[GoSecureが作成した](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) テーブルを使用して、異なるESI対応ソフトウェアに対して試す可能な攻撃を理解することができます。それは、サポートされている機能に応じて次のようになります:
* **Includes**: ``ディレクティブをサポート
* **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ディレクティブは、サーバーのレスポンス内で任意のファイルを読み込みます。
```xml
```
#### クライアントのXSS保護をバイパス
```xml
x=>alert(/Chrome%20XSS%20filter%20bypass/);>
Use to bypass WAFs:
ipt>alert(1)ript>
error=alert(1)>
```
#### Cookieの盗み取り
* リモートでCookieを盗む
```xml
```
* XSSを使用してHTTP\_ONLYクッキーを盗む:レスポンスに反映させる
```bash
# This will reflect the cookies in the response
# Reflect XSS (you can put '">