diff --git a/network-services-pentesting/pentesting-web/special-http-headers.md b/network-services-pentesting/pentesting-web/special-http-headers.md index 42df95164..c3638a70b 100644 --- a/network-services-pentesting/pentesting-web/special-http-headers.md +++ b/network-services-pentesting/pentesting-web/special-http-headers.md @@ -2,15 +2,15 @@
-AWS hacklemeyi sıfırdan kahraman olmak için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! -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.
@@ -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`**: 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ı iş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 ``, `