# 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 **(Introduction taken from [Apache docs](https://httpd.apache.org/docs/current/howto/ssi.html))** SSI (Server Side Includes) - це директиви, які **розміщуються в HTML-сторінках і оцінюються на сервері** під час їх обслуговування. Вони дозволяють вам **додавати динамічно згенерований контент** до існуючої HTML-сторінки, не обслуговуючи всю сторінку через CGI-програму або іншу динамічну технологію.\ Наприклад, ви можете розмістити директиву в існуючій HTML-сторінці, таку як: `` І, коли сторінка обслуговується, цей фрагмент буде оцінений і замінений на його значення: `Tuesday, 15-Jan-2013 19:28:54 EST` Рішення про те, коли використовувати SSI, а коли повністю генерувати вашу сторінку якоюсь програмою, зазвичай залежить від того, скільки з сторінки є статичним, а скільки потрібно перераховувати щоразу, коли сторінка обслуговується. SSI - це чудовий спосіб додати невеликі шматки інформації, такі як поточний час - показано вище. Але якщо більшість вашої сторінки генерується в момент її обслуговування, вам потрібно шукати інше рішення. Ви можете зробити висновок про наявність SSI, якщо веб-додаток використовує файли з розширеннями \*\* `.shtml`, `.shtm` або `.stm`\*\*, але це не є єдиним випадком. Типовий вираз 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 ``` ## Edge Side Inclusion Є проблема **кешування інформації або динамічних додатків**, оскільки частина контенту може **варіюватися** для наступного отримання контенту. Саме для цього використовується **ESI**, щоб вказати за допомогою тегів ESI **динамічний контент, який потрібно згенерувати** перед відправкою кешованої версії.\ Якщо **зловмисник** зможе **впровадити тег ESI** всередину кешованого контенту, тоді він зможе **впровадити довільний контент** у документ перед його відправкою користувачам. ### ESI Detection Наступний **заголовок** у відповіді від сервера означає, що сервер використовує 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 інструкції, якщо upstream програма не надає заголовки * **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 ``` * Вкрасти cookie HTTP\_ONLY за допомогою XSS, відображаючи його у відповіді: ```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 ``` #### Приватний локальний файл Не плутайте це з "Локальним включенням файлів": ```markup ``` #### CRLF ```markup ``` #### Open Redirect Наступне додасть заголовок `Location` до відповіді ```bash ``` #### Додати заголовок * Додати заголовок у примусовий запит ```xml ``` * Додати заголовок у відповідь (корисно для обходу "Content-Type: text/json" у відповіді з XSS) ```bash # Check the number of url_decode to know how many times you can URL encode the value ``` #### CRLF в заголовку Add (**CVE-2019-2438**) ```xml ``` #### Akamai debug Це надішле інформацію для налагодження, включену у відповідь: ```xml ``` ### ESI + XSLT = XXE Вказуючи значення `xslt` для параметра _dca_, можливо включити **`eXtensible Stylesheet Language Transformations (XSLT)`** на основі ESI. Включення змушує HTTP сурогат отримувати XML та XSLT файли, при цьому останній фільтрує перший. Такі XML файли можуть бути використані для атак _XML External Entity (XXE)_, що дозволяє зловмисникам виконувати атаки SSRF. Однак корисність цього підходу обмежена, оскільки ESI вже служить вектором SSRF. Через відсутність підтримки в основній бібліотеці Xalan зовнішні DTD не обробляються, що запобігає витоку локальних файлів. ```xml ``` Файл XSLT: ```xml ]> &xxe; ``` Перевірте сторінку XSLT: {% 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 %} ### Посилання * [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) ## Список виявлення брутфорсу {% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt" %} {% hint style="success" %} Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Підтримати HackTricks * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! * **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
{% endhint %}