# 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 '">' URL encoded and the URL encode eveyrhitng to send it in the HTTP request) # It's possible to put more complex JS code to steal cookies or perform actions ``` #### Prywatny lokalny plik Nie myl tego z "Lokalnym w艂膮czeniem pliku": ```markup ``` #### CRLF ```markup ``` #### Open Redirect Poni偶sze doda nag艂贸wek `Location` do odpowiedzi ```bash ``` #### Dodaj nag艂贸wek * Dodaj nag艂贸wek w wymuszonej pro艣bie ```xml ``` * Dodaj nag艂贸wek w odpowiedzi (przydatne do obej艣cia "Content-Type: text/json" w odpowiedzi z XSS) ```bash # Check the number of url_decode to know how many times you can URL encode the value ``` #### CRLF w nag艂贸wku Add (**CVE-2019-2438**) ```xml ``` #### Akamai debug To wy艣le informacje debugowe zawarte w odpowiedzi: ```xml ``` ### ESI + XSLT = XXE Poprzez okre艣lenie warto艣ci `xslt` dla parametru _dca_, mo偶liwe jest do艂膮czenie **`eXtensible Stylesheet Language Transformations (XSLT)`** opartego na ESI. Do艂膮czenie powoduje, 偶e HTTP surrogate pobiera pliki XML i XSLT, przy czym ten ostatni filtruje pierwszy. Takie pliki XML s膮 podatne na ataki _XML External Entity (XXE)_, umo偶liwiaj膮c atakuj膮cym przeprowadzenie atak贸w SSRF. Jednak u偶yteczno艣膰 tego podej艣cia jest ograniczona, poniewa偶 ESI ju偶 dzia艂a jako wektor SSRF. Z powodu braku wsparcia w podstawowej bibliotece Xalan, zewn臋trzne DTD nie s膮 przetwarzane, co uniemo偶liwia ekstrakcj臋 lokalnych plik贸w. ```xml ``` Plik XSLT: ```xml ]> &xxe; ``` Check the XSLT page: {% content-ref url="xslt-server-side-injection-extensible-stylesheet-language-transformations.md" %} [xslt-server-side-injection-extensible-stylesheet-language-transformations.md](xslt-server-side-injection-extensible-stylesheet-language-transformations.md) {% endcontent-ref %} ### Odniesienia * [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/) * [https://academy.hackthebox.com/module/145/section/1304](https://academy.hackthebox.com/module/145/section/1304) * [https://infosecwriteups.com/exploring-the-world-of-esi-injection-b86234e66f91](https://infosecwriteups.com/exploring-the-world-of-esi-injection-b86234e66f91) ## Lista wykrywania brute-force {% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt" %} {% hint style="success" %} Ucz si臋 i 膰wicz Hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Ucz si臋 i 膰wicz Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Wsparcie HackTricks * Sprawd藕 [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)! * **Do艂膮cz do** 馃挰 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **艣led藕** nas na **Twitterze** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Podziel si臋 trikami hackingowymi, przesy艂aj膮c PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytori贸w github.
{% endhint %}