# Server Side Inclusion/Edge Side Inclusion Injection
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
## Server Side Inclusion Grundinformationen
**(Einführung aus [Apache-Dokumentation](https://httpd.apache.org/docs/current/howto/ssi.html))**
SSI (Server Side Includes) sind Direktiven, die **in HTML-Seiten platziert und auf dem Server ausgewertet** werden, während die Seiten bereitgestellt werden. Sie ermöglichen es Ihnen, **dynamisch generierte Inhalte** zu einer bestehenden HTML-Seite hinzuzufügen, ohne die gesamte Seite über ein CGI-Programm oder eine andere dynamische Technologie bereitstellen zu müssen.\
Zum Beispiel könnten Sie eine Direktive in eine bestehende HTML-Seite einfügen, wie:
``
Und wenn die Seite bereitgestellt wird, wird dieses Fragment ausgewertet und durch seinen Wert ersetzt:
`Dienstag, 15-Jan-2013 19:28:54 EST`
Die Entscheidung, wann SSI verwendet werden soll und wann die gesamte Seite von einem Programm generiert werden soll, hängt normalerweise davon ab, wie viel der Seite statisch ist und wie viel jedes Mal neu berechnet werden muss, wenn die Seite bereitgestellt wird. SSI ist eine großartige Möglichkeit, kleine Informationsstücke hinzuzufügen, wie die aktuelle Zeit - oben gezeigt. Aber wenn der Großteil Ihrer Seite zum Zeitpunkt der Bereitstellung generiert wird, müssen Sie nach einer anderen Lösung suchen.
Sie können das Vorhandensein von SSI ableiten, wenn die Webanwendung Dateien mit den Erweiterungen **`.shtml`, `.shtm` oder `.stm`** verwendet, aber das ist nicht der einzige Fall.
Ein typischer SSI-Ausdruck hat das folgende Format:
```
```
### Überprüfen
```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
```
## Edge Side Inclusion
Es gibt ein Problem mit **Caching-Informationen oder dynamischen Anwendungen**, da der Inhalt möglicherweise beim nächsten Abrufen des Inhalts **variieren** kann. Dafür wird **ESI** verwendet, um mit ESI-Tags den **dynamischen Inhalt anzugeben, der generiert werden muss**, bevor die Cache-Version gesendet wird.\
Wenn ein **Angreifer** in der Lage ist, **ein ESI-Tag** in den Cache-Inhalt einzufügen, könnte er in der Lage sein, **willkürlichen Inhalt** in das Dokument einzufügen, bevor es an die Benutzer gesendet wird.
### ESI Detection
Die folgende **Header** in einer Antwort vom Server bedeutet, dass der Server ESI verwendet:
```
Surrogate-Control: content="ESI/1.0"
```
Wenn Sie diesen Header nicht finden können, **könnte der Server trotzdem ESI verwenden**.\
Ein **blinder Exploitationsansatz kann ebenfalls verwendet werden**, da eine Anfrage beim Server des Angreifers ankommen sollte:
```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-Ausnutzung
[GoSecure erstellt](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) eine Tabelle, um mögliche Angriffe zu verstehen, die wir gegen verschiedene ESI-fähige Software ausprobieren können, abhängig von der unterstützten Funktionalität:
* **Includes**: Unterstützt die ``-Direktive
* **Vars**: Unterstützt die ``-Direktive. Nützlich zum Umgehen von XSS-Filtern
* **Cookie**: Dokumentencookies sind für die ESI-Engine zugänglich
* **Upstream-Header erforderlich**: Surrogatanwendungen verarbeiten ESI-Anweisungen nicht, es sei denn, die upstream-Anwendung stellt die Header bereit
* **Host-Whitelist**: In diesem Fall sind ESI-Includes nur von erlaubten Serverhosts möglich, was SSRF beispielsweise nur gegen diese Hosts möglich macht
| **Software** | **Includes** | **Vars** | **Cookies** | **Upstream-Header erforderlich** | **Host-Whitelist** |
| :--------------------------: | :----------: | :------: | :---------: | :-----------------------------: | :----------------: |
| Squid3 | Ja | Ja | Ja | Ja | Nein |
| Varnish Cache | Ja | Nein | Nein | Ja | Ja |
| Fastly | Ja | Nein | Nein | Nein | Ja |
| Akamai ESI Testserver (ETS) | Ja | Ja | Ja | Nein | Nein |
| NodeJS esi | Ja | Ja | Ja | Nein | Nein |
| NodeJS nodesi | Ja | Nein | Nein | Nein | Optional |
#### XSS
Die folgende ESI-Direktive lädt eine beliebige Datei in die Antwort des Servers
```xml
```
#### Umgehung des Client-XSS-Schutzes
```xml
x=>alert(/Chrome%20XSS%20filter%20bypass/);>
Use to bypass WAFs:
ipt>alert(1)ript>
error=alert(1)>
```
#### Steal Cookie
* Fernzugriff auf Cookies stehlen
```xml
```
* Stehlen Sie das Cookie HTTP\_ONLY mit XSS, indem Sie es in der Antwort reflektieren:
```bash
# This will reflect the cookies in the response
# Reflect XSS (you can put '">