9.7 KiB
Cache Poisoning via URL discrepancies
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Це резюме технік, запропонованих у пості https://portswigger.net/research/gotta-cache-em-all для виконання атак на отруєння кешу зловживаючи розбіжностями між кеш-проксі та веб-серверами.
{% hint style="info" %} Мета цієї атаки полягає в тому, щоб змусити кеш-сервер думати, що завантажується статичний ресурс, тому він кешує його, в той час як кеш-сервер зберігає частину шляху як ключ кешу, але веб-сервер відповідає, розв'язуючи інший шлях. Веб-сервер розв'яже реальний шлях, який завантажуватиме динамічну сторінку (яка може містити чутливу інформацію про користувача, шкідливий код, наприклад, XSS, або перенаправлення для завантаження JS-файлу з сайту зловмисника). {% endhint %}
Delimiters
Делімітери URL варіюються в залежності від фреймворку та сервера, впливаючи на те, як маршрутизуються запити та обробляються відповіді. Деякі загальні делімітери походження:
- Крапка з комою: Використовується в Spring для матричних змінних (наприклад,
/hello;var=a/world;var1=b;var2=c
→/hello/world
). - Крапка: Вказує формат відповіді в Ruby on Rails (наприклад,
/MyAccount.css
→/MyAccount
) - Нульовий байт: Обрізає шляхи в OpenLiteSpeed (наприклад,
/MyAccount%00aaa
→/MyAccount
). - Байт нового рядка: Розділяє компоненти URL в Nginx (наприклад,
/users/MyAccount%0aaaa
→/account/MyAccount
).
Інші специфічні делімітери можуть бути знайдені, слідуючи цьому процесу:
- Крок 1: Визначити незахищені запити та використовувати їх для моніторингу того, як обробляються URL з потенційними деліміторами.
- Крок 2: Додати випадкові суфікси до шляхів і порівняти відповідь сервера, щоб визначити, чи функціонує символ як делімитер.
- Крок 3: Ввести потенційні делімітери перед випадковим суфіксом, щоб перевірити, чи змінюється відповідь, що вказує на використання делімітерів.
Normalization & Encodings
- Мета: Парсери URL як у кеш-серверах, так і в серверах походження нормалізують URL для витягування шляхів для відображення кінцевих точок і ключів кешу.
- Процес: Визначає делімітери шляху, витягує та нормалізує шлях, декодуючи символи та видаляючи сегменти з крапками.
Encodings
Різні HTTP-сервери та проксі, такі як Nginx, Node та CloudFront, декодують делімітери по-різному, що призводить до несумісностей між CDN та серверами походження, які можуть бути використані. Наприклад, якщо веб-сервер виконує цю трансформацію /myAccount%3Fparam
→ /myAccount?param
, але кеш-сервер зберігає як ключ шлях /myAccount%3Fparam
, існує несумісність.
Спосіб перевірити ці несумісності - надіслати запити URL, кодування різних символів після завантаження шляху без будь-якого кодування та перевірити, чи відповідь закодованого шляху надійшла з кешованої відповіді.
Dot segment
Нормалізація шляху, де залучені крапки, також є дуже цікавою для атак на отруєння кешу. Наприклад, /static/../home/index
або /aaa..\home/index
, деякі кеш-сервери кешують ці шляхи з самими собою як ключі, в той час як інші можуть розв'язати шлях і використовувати /home/index
як ключ кешу.
Так само, як і раніше, надсилання таких запитів і перевірка, чи була відповідь отримана з кешу, допомагає визначити, чи є відповідь на /home/index
відповіддю, надісланою, коли ці шляхи запитуються.
Static Resources
Декілька кеш-серверів завжди кешують відповідь, якщо вона ідентифікується як статична. Це може бути через:
- Розширення: Cloudflare завжди кешує файли з наступними розширеннями: 7z, csv, gif, midi, png, tif, zip, avi, doc, gz, mkv, ppt, tiff, zst, avif, docx, ico, mp3, pptx, ttf, apk, dmg, iso, mp4, ps, webm, bin, ejs, jar, ogg, rar, webp, bmp, eot, jpg, otf, svg, woff, bz2, eps, jpeg, pdf, svgz, woff2, class, exe, js, pict, swf, xls, css, flac, mid, pls, tar, xlsx
- Можливо, примусити кеш зберігати динамічну відповідь, використовуючи делімитер і статичне розширення, наприклад, запит до
/home$image.png
кешує/home$image.png
, а сервер походження відповідає/home
- Відомі статичні каталоги: Наступні каталоги містять статичні файли, тому їх відповідь повинна бути кешована: /static, /assets, /wp-content, /media, /templates, /public, /shared
- Можливо, примусити кеш зберігати динамічну відповідь, використовуючи делімитер, статичний каталог і крапки, наприклад:
/home/..%2fstatic/something
кешує/static/something
, а відповідь буде/home
- Статичні каталоги + крапки: Запит до
/static/..%2Fhome
або до/static/..%5Chome
може бути кешований як є, але відповідь може бути/home
- Статичні файли: Деякі специфічні файли завжди кешуються, такі як
/robots.txt
,/favicon.ico
та/index.html
. Це може бути зловжито, наприклад,/home/..%2Frobots.txt
, де кеш може зберігати/robots.txt
, а сервер походження відповідає на/home
.
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.