Server Side Inclusion/Edge Side Inclusion Injection
Основна інформація про включення на стороні сервера
(Вступ взято з документації Apache)
SSI (Server Side Includes) - це директиви, які розміщуються на сторінках HTML і оцінюються на сервері під час обслуговування сторінок. Вони дозволяють вам додавати динамічно генерований вміст до існуючої сторінки HTML, не обслуговуючи всю сторінку через програму CGI або іншу динамічну технологію. Наприклад, ви можете розмістити директиву на існуючій сторінці HTML, такій як:
<!--#echo var="DATE_LOCAL" -->
І, коли сторінка обслуговується, цей фрагмент буде оцінений і замінений на своє значення:
Tuesday, 15-Jan-2013 19:28:54 EST
Рішення про те, коли використовувати SSI, а коли мати вашу сторінку повністю згенеровану якоюсь програмою, зазвичай є питанням того, наскільки сторінка є статичною, і наскільки потрібно перераховувати кожного разу, коли сторінка обслуговується. SSI - це чудовий спосіб додавати невеликі частини інформації, такі як поточний час - показано вище. Але якщо більшість вашої сторінки генерується в момент обслуговування, вам потрібно шукати інше рішення.
Ви можете вважати наявність SSI, якщо веб-застосунок використовує файли з розширеннями ** .shtml
, .shtm
або .stm
**, але це не єдиний випадок.
Типовий вираз SSI має наступний формат:
Перевірка
Включення на стороні краю
Є проблема кешування інформації або динамічних додатків, оскільки частина вмісту може змінюватися до наступного разу, коли вміст буде отриманий. Саме для цього використовується ESI, щоб вказати за допомогою тегів ESI динамічний вміст, який потрібно згенерувати перед відправленням версії кешу. якщо зловмисник може впровадити тег ESI всередині кешованого вмісту, то він може впровадити довільний вміст в документ перед його відправленням користувачам.
Виявлення ESI
Наступний заголовок відповіді від сервера означає, що сервер використовує ESI:
Якщо ви не можете знайти цей заголовок, сервер може все одно використовувати ESI. Також може бути використаний сліпий підхід до експлуатації, оскільки запит повинен надійти на сервер зловмисника:
Експлуатація ESI
GoSecure створив таблицю для розуміння можливих атак, які ми можемо спробувати проти різного програмного забезпечення, здатного до ESI, в залежності від підтримуваної функціональності:
Includes: Підтримує директиву
<esi:includes>
Vars: Підтримує директиву
<esi:vars>
. Корисно для обхіду XSS-фільтрівCookie: Куки документа доступні для ESI-двигуна
Upstream Headers Required: Додатки-замінники не оброблять ESI-вирази, якщо верхній додаток не надасть заголовки
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 завантажить довільний файл всередині відповіді сервера
Обхід захисту від XSS клієнта
Вкрасти куки
Віддалено вкрасти куки
Вкрасти cookie HTTP_ONLY за допомогою XSS, відображаючи його у відповіді:
Приватний Локальний Файл
Не плутайте це з "Включенням Локального Файлу":
CRLF
CRLF (Carriage Return Line Feed) is a special character sequence used to represent a line break in various environments. In web security, CRLF injection refers to the technique of injecting CRLF sequences into an input field to manipulate the application's behavior. This can lead to various attacks such as HTTP response splitting, server-side request forgery, and more. It is important for developers to sanitize user input to prevent CRLF injection vulnerabilities.
Відкритий редірект
Наступний код додасть заголовок Location
до відповіді
Додати заголовок
Додати заголовок у примусовий запит
Додайте заголовок у відповідь (корисно для обхіду "Content-Type: text/json" у відповіді з XSS)
CRLF у додаванні заголовка (CVE-2019-2438)
Відлагодження Akamai
Це надішле інформацію для відлагодження, включену у відповідь:
ESI + XSLT = XXE
Призначивши значення xslt
параметру dca, можливо включити ESI на основі мови трансформації екстенсивних таблиць стилів (XSLT)
. Це викликає HTTP-замінник для отримання файлів XML та XSLT, останній фільтрує перший. Такі файли XML піддаються атакам XML External Entity (XXE), що дозволяє зловмисникам виконувати атаки SSRF. Однак використання цього підходу обмежено, оскільки ESI вже служить вектором SSRF. Через відсутність підтримки в базовій бібліотеці Xalan, зовнішні DTD не обробляються, що запобігає видобутку локальних файлів.
XSLT файл:
Перевірте сторінку XSLT:
pageXSLT Server Side Injection (Extensible Stylesheet Language Transformations)Посилання
Список виявлення перебору
Last updated