# Wstrzykiwanie kodu Server Side Inclusion/Edge Side Inclusion
Dowiedz się, jak hakować AWS od zera do bohatera zhtARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć **reklamę swojej firmy w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) **i** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **repozytoriów GitHub**.
## Podstawowe informacje o Server Side Inclusion
**(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 ich udostępniania. Pozwalają one **dodawać dynamicznie generowane treści** do istniejącej strony HTML, bez konieczności udostępniania całej strony za pomocą programu CGI lub innej technologii dynamicznej.\
Na przykład, można umieścić dyrektywę w istniejącej stronie HTML, takiej jak:
``
I, gdy strona jest udostępniana, ten fragment zostanie oceniony i zastąpiony swoją wartością:
`Wtorek, 15 stycznia 2013, 19:28:54 EST`
Decyzja, kiedy używać SSI, a kiedy cała strona powinna być generowana przez jakiś program, zazwyczaj zależy od tego, ile treści na stronie jest statycznych, a ile musi być ponownie obliczanych za każdym razem, gdy strona jest udostępniana. SSI jest doskonałym sposobem na dodawanie małych fragmentów informacji, takich jak bieżący czas - jak pokazano powyżej. Ale jeśli większość strony jest generowana w momencie jej udostępniania, należy poszukać innych rozwiązań.
Można wnioskować o obecności SSI, jeśli aplikacja internetowa używa plików o rozszerzeniach \*\* `.shtml`, `.shtm` lub `.stm`\*\*, ale nie jest to jedyny przypadek.
Typowe wyrażenie SSI ma następujący format:
```
```
### Sprawdzenie
Aby sprawdzić podatność na wstrzyknięcie zawartości po stronie serwera (SSI/ESI), wykonaj następujące kroki:
1. **Zidentyfikuj punkt wstrzyknięcia**: Przeglądaj kod źródłowy aplikacji internetowej w poszukiwaniu miejsc, w których użytkownik może wprowadzać dane, które są następnie wykorzystywane do generowania dynamicznej zawartości strony. Może to obejmować parametry URL, formularze, pliki cookie, nagłówki HTTP itp.
2. **Sprawdź, czy można wstrzyknąć kod**: Spróbuj wstrzyknąć kod SSI/ESI, dodając odpowiednie znaczniki do danych wejściowych. Na przykład, w przypadku SSI, użyj ``, a w przypadku ESI, użyj ``. Jeśli kod zostanie wykonany i zawartość pliku zostanie wyświetlona na stronie, oznacza to, że aplikacja jest podatna na wstrzyknięcie zawartości po stronie serwera.
3. **Sprawdź dostępność plików**: Jeśli udało się wstrzyknąć kod, sprawdź, czy można uzyskać dostęp do innych plików na serwerze. Wypróbuj różne ścieżki plików, takie jak `/etc/passwd`, `/etc/shadow`, `/etc/hosts`, aby sprawdzić, czy można uzyskać poufne informacje lub wykonać atak na serwer.
4. **Sprawdź możliwość wykonania kodu**: Jeśli aplikacja wykonuje kod SSI/ESI z uprawnieniami systemowymi, spróbuj wstrzyknąć kod, który pozwoli na wykonanie dowolnego kodu na serwerze. Na przykład, w przypadku SSI, użyj ``, a w przypadku ESI, użyj `command`. Jeśli kod zostanie wykonany i wynik zostanie wyświetlony na stronie, oznacza to, że aplikacja jest podatna na wykonanie kodu.
5. **Zgłoś znalezioną podatność**: Jeśli udało się znaleźć podatność na wstrzyknięcie zawartości po stronie serwera, zgłoś ją odpowiedniej osobie lub zespołowi odpowiedzialnemu za bezpieczeństwo aplikacji. Przedstaw dokładne informacje o podatności, włączając w to kroki reprodukcji i dowody potwierdzające jej istnienie.
Pamiętaj, że testowanie podatności na wstrzyknięcie zawartości po stronie serwera powinno być przeprowadzane tylko na legalnych i uprawnionych systemach, zgodnie z obowiązującymi przepisami i zgodnie z zasadami etycznego hakowania.
```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
```
## Włączenie po stronie serwera
Istnieje problem z **buforowaniem informacji lub dynamicznych aplikacji**, ponieważ część treści może ulec **zmianie** przed kolejnym pobraniem treści. Do tego celu służy **ESI**, który wskazuje za pomocą tagów ESI **dynamiczną treść, która musi zostać wygenerowana** przed wysłaniem wersji buforowanej.\
Jeśli **atakujący** jest w stanie **wstrzyknąć tag ESI** do treści buforowanej, może on wtedy **wstrzyknąć dowolną treść** do dokumentu przed wysłaniem go do użytkowników.
### Wykrywanie ESI
Następujący **nagłówek** w odpowiedzi serwera oznacza, że serwer korzysta z ESI:
```
Surrogate-Control: content="ESI/1.0"
```
Jeśli nie możesz znaleźć tego nagłówka, serwer **może i tak używać ESI**.\
Można również zastosować **ślepe podejście do eksploatacji**, 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ć na różnym oprogramowaniu obsługującym ESI, w zależności od obsługiwanej 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 przekazywane w górę**: Aplikacje pośredniczące nie będą przetwarzać instrukcji ESI, dopóki aplikacja nadrzędna nie dostarczy nagłówków
* **Whitelist hostów**: W tym przypadku, ESI includes są możliwe tylko z dozwolonych serwerów, co umożliwia np. atak SSRF tylko na te hosty
| **Oprogramowanie** | **Includes** | **Vars** | **Cookies** | **Wymagane nagłówki przekazywane w górę** | **Whitelist 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 | Opcjonalne |
#### XSS
Następująca dyrektywa ESI załaduje dowolny plik w odpowiedzi serwera.
```xml
```
#### Ominięcie ochrony klienta przed atakami XSS
To bypass client XSS protection, you can try the following techniques:
1. **HTML encoding**: Encode the malicious payload using HTML entities to bypass client-side XSS filters. For example, `<` can be encoded as `<` and `>` as `>`.
2. **JavaScript encoding**: Encode the payload using JavaScript functions like `encodeURIComponent()` or `escape()` to bypass client-side XSS filters. This will prevent the execution of the payload by the client's browser.
3. **Event handlers**: Use event handlers like `onmouseover` or `onerror` to trigger the execution of the payload. This can bypass client-side XSS filters that only look for specific HTML tags or attributes.
4. **DOM-based XSS**: Exploit vulnerabilities in the Document Object Model (DOM) to inject and execute malicious code. This can bypass client-side XSS filters that rely on parsing HTML tags and attributes.
5. **Polyglot payloads**: Craft payloads that can be interpreted as both JavaScript and HTML. This can bypass client-side XSS filters that only look for specific content types.
Remember to always test your bypass techniques thoroughly to ensure they work as intended.
```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 ciasteczko HTTP\_ONLY za pomocą XSS, odbijając je w odpowiedzi:
```html
```
* Inject malicious code into a server-side include (SSI) vulnerable application:
```html
```
* Exploit a server-side include (SSI) injection vulnerability to execute arbitrary commands:
```html
```
* Exploit a server-side include (SSI) injection vulnerability to include remote files:
```html
```
* Exploit an edge-side include (ESI) injection vulnerability to include remote files:
```html
```
* Exploit an edge-side include (ESI) injection vulnerability to execute arbitrary commands:
```html
```
* Exploit an edge-side include (ESI) injection vulnerability to perform server-side request forgery (SSRF):
```html
```
* Exploit an edge-side include (ESI) injection vulnerability to perform remote code execution (RCE):
```html
```
* Exploit an edge-side include (ESI) injection vulnerability to perform server-side template injection (SSTI):
```html
```
```bash
# This will reflect the cookies in the response
# Reflect XSS (you can put '">