Server Side Inclusion/Edge Side Inclusion Injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
(Introduction taken from Apache docs)
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 в будь-якому випадку. Можна також використовувати підхід сліпої експлуатації, оскільки запит має надійти на сервер атакуючого:
GoSecure створив таблицю для розуміння можливих атак, які ми можемо спробувати проти різного програмного забезпечення, що підтримує ESI, залежно від підтримуваної функціональності:
Includes: Підтримує директиву <esi:includes>
Vars: Підтримує директиву <esi:vars>
. Корисно для обходу XSS фільтрів
Cookie: Документні куки доступні для ESI двигуна
Необхідні заголовки з верхнього рівня: Сурогатні програми не оброблятимуть ESI інструкції, якщо програма з верхнього рівня не надає заголовки
Список дозволених хостів: У цьому випадку ESI включення можливі лише з дозволених серверних хостів, що робить SSRF, наприклад, можливим лише проти цих хостів
Програмне забезпечення
Includes
Vars
Cookies
Необхідні заголовки з верхнього рівня
Список дозволених хостів
Squid3
Так
Так
Так
Так
Ні
Varnish Cache
Так
Ні
Ні
Так
Так
Fastly
Так
Ні
Ні
Ні
Так
Akamai ESI Test Server (ETS)
Так
Так
Так
Ні
Ні
NodeJS esi
Так
Так
Так
Ні
Ні
NodeJS nodesi
Так
Ні
Ні
Ні
Необов'язково
Наступна директива ESI завантажить довільний файл всередині відповіді сервера
Віддалене вкрадення cookie
Вкрасти cookie HTTP_ONLY за допомогою XSS, відображаючи його у відповіді:
Не плутайте це з "Включенням локального файлу":
Наступне додасть заголовок Location
до відповіді
Додати заголовок у примусовий запит
Додати заголовок у відповіді (корисно для обходу "Content-Type: text/json" у відповіді з XSS)
Це надішле інформацію для налагодження, включену у відповідь:
Можливо використовувати eXtensible Stylesheet Language Transformations (XSLT)
синтаксис в ESI, просто вказавши значення параметра dca
як xslt
. Це може дозволити зловживати XSLT для створення та зловживання вразливістю XML External Entity (XXE):
Файл XSLT:
Перевірте сторінку XSLT:
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)