# 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 Basic Information
**(Wprowadzenie zaczerpni臋te z [dokumentacji Apache](https://httpd.apache.org/docs/current/howto/ssi.html))**
SSI (Server Side Includes) to dyrektywy, kt贸re s膮 **umieszczane w stronach HTML i oceniane na serwerze** podczas serwowania stron. Pozwalaj膮 one na **dodawanie dynamicznie generowanej tre艣ci** do istniej膮cej strony HTML, bez konieczno艣ci serwowania ca艂ej strony za pomoc膮 programu CGI lub innej technologii dynamicznej.\
Na przyk艂ad, mo偶esz umie艣ci膰 dyrektyw臋 w istniej膮cej stronie HTML, tak膮 jak:
``
A gdy strona jest serwowana, ten fragment zostanie oceniony i zast膮piony swoj膮 warto艣ci膮:
`Wtorek, 15-Sty-2013 19:28:54 EST`
Decyzja o tym, kiedy u偶ywa膰 SSI, a kiedy mie膰 stron臋 ca艂kowicie generowan膮 przez jaki艣 program, zazwyczaj zale偶y od tego, ile strony jest statyczne, a ile musi by膰 przeliczane za ka偶dym razem, gdy strona jest serwowana. SSI to 艣wietny spos贸b na dodanie ma艂ych fragment贸w informacji, takich jak aktualny czas - pokazany powy偶ej. Ale je艣li wi臋kszo艣膰 twojej strony jest generowana w momencie, gdy jest serwowana, musisz poszuka膰 innego rozwi膮zania.
Mo偶esz wnioskowa膰 o obecno艣ci SSI, je艣li aplikacja webowa u偶ywa plik贸w z rozszerzeniami **`.shtml`, `.shtm` lub `.stm`**, ale to nie jest jedyny przypadek.
Typowa ekspresja SSI ma nast臋puj膮cy format:
```
```
### Sprawd藕
```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
Istnieje problem **z buforowaniem informacji lub dynamicznych aplikacji**, poniewa偶 cz臋艣膰 tre艣ci mo偶e by膰 **r贸偶na** przy nast臋pnym pobraniu tre艣ci. To jest to, do czego s艂u偶y **ESI**, aby wskaza膰 za pomoc膮 tag贸w ESI **dynamiczn膮 tre艣膰, kt贸ra musi by膰 generowana** przed wys艂aniem wersji z pami臋ci podr臋cznej.\
je艣li **atakuj膮cy** jest w stanie **wstrzykn膮膰 tag ESI** wewn膮trz tre艣ci z pami臋ci podr臋cznej, to m贸g艂by by膰 w stanie **wstrzykn膮膰 dowoln膮 tre艣膰** do dokumentu przed jego wys艂aniem do u偶ytkownik贸w.
### ESI Detection
Nast臋puj膮cy **nag艂贸wek** w odpowiedzi z serwera oznacza, 偶e serwer u偶ywa ESI:
```
Surrogate-Control: content="ESI/1.0"
```
Je艣li nie mo偶esz znale藕膰 tego nag艂贸wka, serwer **mo偶e mimo wszystko u偶ywa膰 ESI**.\
**Mo偶na r贸wnie偶 zastosowa膰 podej艣cie 艣lepej eksploitacji**, poniewa偶 偶膮danie powinno dotrze膰 do serwera atakuj膮cego:
```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
```
### Wykorzystanie ESI
[GoSecure stworzy艂](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) tabel臋, aby zrozumie膰 mo偶liwe ataki, kt贸re mo偶emy przeprowadzi膰 przeciwko r贸偶nemu oprogramowaniu obs艂uguj膮cemu ESI, w zale偶no艣ci od wspieranej funkcjonalno艣ci:
* **Includes**: Obs艂uguje dyrektyw臋 ``
* **Vars**: Obs艂uguje dyrektyw臋 ``. Przydatne do omijania filtr贸w XSS
* **Cookie**: Ciasteczka dokumentu s膮 dost臋pne dla silnika ESI
* **Wymagane nag艂贸wki upstream**: Aplikacje zast臋pcze nie przetworz膮 instrukcji ESI, chyba 偶e aplikacja upstream dostarczy nag艂贸wki
* **Lista dozwolonych host贸w**: W tym przypadku w艂膮czenia ESI s膮 mo偶liwe tylko z dozwolonych host贸w serwera, co sprawia, 偶e SSRF, na przyk艂ad, jest mo偶liwe tylko przeciwko tym hostom
| **Oprogramowanie** | **Includes** | **Vars** | **Ciasteczka** | **Wymagane nag艂贸wki upstream** | **Lista dozwolonych host贸w** |
| :---------------------------------: | :----------: | :------: | :------------: | :-----------------------------: | :--------------------------: |
| Squid3 | Tak | Tak | Tak | Tak | Nie |
| Varnish Cache | Tak | Nie | Nie | Tak | Tak |
| Fastly | Tak | Nie | Nie | Nie | Tak |
| Akamai ESI Test Server (ETS) | Tak | Tak | Tak | Nie | Nie |
| NodeJS esi | Tak | Tak | Tak | Nie | Nie |
| NodeJS nodesi | Tak | Nie | Nie | Nie | Opcjonalnie |
#### XSS
Poni偶sza dyrektywa ESI za艂adowuje dowolny plik wewn膮trz odpowiedzi serwera
```xml
```
#### Omini臋cie ochrony XSS po stronie klienta
```xml
x=>alert(/Chrome%20XSS%20filter%20bypass/);>
Use to bypass WAFs:
ipt>alert(1)ript>
error=alert(1)>
```
#### Kradzie偶 ciasteczka
* Zdalna kradzie偶 ciasteczka
```xml
```
* Kradnij cookie HTTP\_ONLY za pomoc膮 XSS, odzwierciedlaj膮c je w odpowiedzi:
```bash
# This will reflect the cookies in the response
# Reflect XSS (you can put '">