> For the complete documentation index, see [llms.txt](https://yigitsengezer.gitbook.io/siber-guvenlik-notlari/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yigitsengezer.gitbook.io/siber-guvenlik-notlari/web-application-pentesting/server-zafiyetleri/web-cache-poisoning.md).

# Web Cache Poisoning

### Web Cache Poisoning Nedir?

Web cache poisoning, bir saldırganın bir web sunucusunun ve cache'in davranışını istismar ederek diğer kullanıcılara zararlı bir HTTP yanıtı göndermesini sağlayan gelişmiş bir tekniktir.

Temel olarak, Web cache poisoning iki aşamadan oluşur. İlk olarak, saldırganın back-end sunucudan bir tür tehlikeli payload içeren bir yanıtı nasıl ortaya çıkaracağını bulması gerekir. Başarılı olduklarında, yanıtlarının önbelleğe alındığından ve daha sonra hedeflenen kurbanlara sunulduğundan emin olmaları gerekir.

Zehirlenmiş bir web önbelleği, XSS, JavaScript injection, open redirection gibi güvenlik açıklarından yararlanarak çok sayıda farklı saldırıyı dağıtmak için potansiyel olarak yıkıcı bir araç olabilir.

<figure><img src="https://3737168764-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3ONffZJjq1KZ6NIRmS0c%2Fuploads%2FnNxOu7XNMyEbLxIKA0K5%2Fimage.png?alt=media&amp;token=89c9b033-8218-4ee1-b4be-b13eb184431c" alt=""><figcaption></figcaption></figure>

### Cache Kontrolü

Bu saldırının yapılabilmesi için sayfanın cachelendiğini kontrol etmemiz gerekli. Bunu burp pasif taramada gösterir. Aynı zamanda response içinde aşağıdaki gibi headerlar var ise anlayabiliriz.

```http
# Cache'e Yükleme
Age: 0
X-Cache: miss

# Cache'ten Alma
Age: 1
X-Cache: hit
```

### Parametre Kontrolü

Param miner eklentisinin guess everything! seçeneği ile hangi başlık veya parametre yansıyor öğrenebiliriz.

### Cookie ile Poisoning

Eğer cookieler yanıtta yansıyorsa xss tetiklenebilir.

```http
Cookie: fehost=prod-cache-01
```

### X-Forwarded-Host ile Poisoning

```http
X-Forwarded-Host: example.com
```

### X-Original-URL ile Poisoning

Eğer bu başlık ile cache tetiklenmiyorsa kullanıcıları istediğimiz url'e yönlendirebiliriz.

```http
X-Original-URL: /foo\bar
```

### X-Forwarded-Host ve X-Forwarded-Scheme ile Poisoning

```http
X-Forwarded-Scheme: nothttps
X-Forwarded-Host: example.com
```

### URL Parametresi ile Poisoning

Eğer url parametresi sayfada yansıyorsa fakat cache mekanizmasını etkilemiyorsa cache poisoning yapılabilir.

### Parametre Gizleme

Eğer bir isteğe parametre eklediğinde cache etkileniyorsa & karakteri ; karakterini kullanarak eklemeyi deneyebiliriz.

```
https://example.com?q=foobar;x=payload
```

### Parametreyi Body'de Gönderme

Eğer bir parametre URL parametresi olarak gönderildiğinde cache tetikleniyorsa aynı parametreyi body'de göndererek cache tetiklenmemesini sağlayabiliriz.

```http
GET /?page=main

GET /?page=main

page=payload
```

### URL Normalization

Normalde encode edildiği için çalışmayan bir xss payload cache edildikten sonra gösterildiğinde tetiklenebilir. Çünkü bazen cache mekanizması URL decode yapabilir.

### Otomatize

```
wcvs -u https://example.com/
```

### Araçlar

* [Burp Param Miner](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943)
* [Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner)
