hacktricks/network-services-pentesting/pentesting-web/special-http-headers.md

212 lines
12 KiB
Markdown
Raw Normal View History

2024-02-10 18:14:16 +00:00
# Özel HTTP başlıkları
2022-04-28 16:01:33 +00:00
<details>
<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>
2022-04-28 16:01:33 +00:00
HackTricks'ı desteklemenin diğer yolları:
2024-02-03 13:22:53 +01:00
* **Ş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!
2024-02-10 18:14:16 +00:00
* [**Resmi PEASS & HackTricks ürünleri**](https://peass.creator-spring.com)'ni edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family)
* **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.
2022-04-28 16:01:33 +00:00
</details>
## Kelime Listeleri ve Araçlar
2021-09-19 15:52:48 +00:00
* [https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers](https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers)
* [https://github.com/rfc-st/humble](https://github.com/rfc-st/humble)
2021-09-19 15:52:48 +00:00
## Konum Değiştirmek İçin Başlıklar
2021-09-19 15:19:00 +00:00
2024-02-10 18:14:16 +00:00
**IP kaynağını** yeniden yazın:
2021-09-19 15:19:00 +00:00
2022-04-05 18:24:52 -04:00
* `X-Originating-IP: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `X-Forwarded-For: 127.0.0.1`
2022-04-19 22:38:50 +00:00
* `X-Forwarded: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `Forwarded-For: 127.0.0.1`
2021-09-27 10:58:30 +00:00
* `X-Forwarded-Host: 127.0.0.1`
2022-04-05 18:24:52 -04:00
* `X-Remote-IP: 127.0.0.1`
2021-09-19 15:19:00 +00:00
* `X-Remote-Addr: 127.0.0.1`
* `X-ProxyUser-Ip: 127.0.0.1`
* `X-Original-URL: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `Client-IP: 127.0.0.1`
2021-09-27 10:58:30 +00:00
* `X-Client-IP: 127.0.0.1`
* `X-Host: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `True-Client-IP: 127.0.0.1`
* `Cluster-Client-IP: 127.0.0.1`
2021-09-20 13:06:32 +00:00
* `Via: 1.0 fred, 1.1 127.0.0.1`
2024-02-10 18:14:16 +00:00
* `Connection: close, X-Forwarded-For` (Hop-by-hop başlıkları kontrol edin)
2021-09-19 15:19:00 +00:00
2024-02-10 18:14:16 +00:00
**Konumu** yeniden yazın:
2021-09-19 15:19:00 +00:00
* `X-Original-URL: /admin/console`
* `X-Rewrite-URL: /admin/console`
## Hop-by-Hop Başlıklar
2021-09-19 15:19:00 +00:00
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.
2021-09-19 15:19:00 +00:00
* `Connection: close, X-Forwarded-For`
{% content-ref url="../../pentesting-web/abusing-hop-by-hop-headers.md" %}
[abusing-hop-by-hop-headers.md](../../pentesting-web/abusing-hop-by-hop-headers.md)
{% endcontent-ref %}
2021-09-19 15:19:00 +00:00
## HTTP İsteği Kaçırma
2021-09-19 15:19:00 +00:00
* `Content-Length: 30`
* `Transfer-Encoding: chunked`
2021-11-05 20:59:42 +00:00
{% content-ref url="../../pentesting-web/http-request-smuggling/" %}
[http-request-smuggling](../../pentesting-web/http-request-smuggling/)
{% endcontent-ref %}
2021-09-19 15:19:00 +00:00
2024-02-10 18:14:16 +00:00
## Önbellek Başlıkları
2021-09-19 15:52:48 +00:00
2024-02-10 18:14:16 +00:00
**Sunucu Önbellek Başlıkları**:
2021-09-20 13:06:32 +00:00
* Yanıtta **`X-Cache`** değeri **`miss`** olabilir, istek önbelleğe alınmamışsa ve **`hit`** değeri önbelleğe alındığında
* 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 ö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 boyunca olduğunu tanımlar.
2024-02-10 18:14:16 +00:00
* **`Server-Timing: cdn-cache; desc=HIT`**, bir kaynağın önbelleğe alındığını da belirtir
2021-09-19 15:52:48 +00:00
{% content-ref url="../../pentesting-web/cache-deception/" %}
[cache-deception](../../pentesting-web/cache-deception/)
{% endcontent-ref %}
2021-09-19 15:52:48 +00:00
2024-02-10 18:14:16 +00:00
**Yerel Önbellek başlıkları**:
2021-09-20 13:06:32 +00:00
2024-02-10 18:14:16 +00:00
* `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ıdır
2024-02-10 18:14:16 +00:00
* `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"`
2021-09-20 13:06:32 +00:00
## Koşullu İfadeler
2021-09-19 15:19:00 +00:00
* 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 gönderecektir eğer veri (Etag) değişmişse. `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.
2021-09-19 19:55:40 +00:00
2024-02-10 18:14:16 +00:00
## Aralık istekleri
2021-09-19 19:55:40 +00:00
2024-02-10 18:14:16 +00:00
* **`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 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.
2021-09-19 19:55:40 +00:00
## Mesaj gövdesi bilgileri
2021-09-19 19:55:40 +00:00
* **`Content-Length`:** Kaynağın boyutu, ondalık bayt sayısı olarak.
* **`Content-Type`**: Kaynağın ortam türünü belirtir
2024-02-10 18:14:16 +00:00
* **`Content-Encoding`**: Sıkıştırma algoritmasını belirtmek için kullanılır.
* **`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.
2024-02-10 18:14:16 +00:00
* **`Content-Location`**: Döndürülen veriler için alternatif bir konumu belirtir.
2021-09-19 19:55:40 +00:00
Pentest açısından bu bilgi genellikle "anlamsız" olabilir, ancak kaynak 401 veya 403 ile korunuyorsa ve bu bilgiyi elde etmek için bir yol bulabilirseniz, bu **ilginç** olabilir.\
Örneğin, bir HEAD isteği içindeki **`Range`** ve **`Etag`** kombinasyonu sayesinde sayfanın içeriği HEAD istekleri aracılığıyla sızdırılabilir:
* Yanıtı içeren `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` ifadesi olan bir yanıtla birlikte `Range: bytes=20-20` başlığı içeren bir istek, byte 20'nin SHA1'inin `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y` olduğunu sızdırır.
2024-02-10 18:14:16 +00:00
## Sunucu Bilgisi
2021-09-19 19:55:40 +00:00
2024-02-10 18:14:16 +00:00
* `Sunucu: Apache/2.4.1 (Unix)`
2021-09-20 13:06:32 +00:00
* `X-Powered-By: PHP/5.3.3`
2024-02-10 18:14:16 +00:00
## Kontroller
2021-09-20 13:06:32 +00:00
* **`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 `Expect: 100-continue` başlığını içermesidir. İ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.
2021-09-20 13:06:32 +00:00
2024-02-10 18:14:16 +00:00
## İndirmeler
2021-09-20 13:06:32 +00:00
* HTTP yanıtlarındaki **`Content-Disposition`** başlığı, bir dosyanın web sayfası içinde **inline** olarak mı yoksa bir **ek** (indirilecek) olarak mı işlenmesi gerektiğini yönlendirir. Örneğin:
2024-02-08 22:36:15 +01:00
```
Content-Disposition: attachment; filename="filename.jpg"
```
Bu, "filename.jpg" adlı dosyanın indirilmesi ve kaydedilmesi amaçlanmıştır.
2021-09-20 13:06:32 +00:00
2024-02-10 18:14:16 +00:00
## Güvenlik Başlıkları
2024-02-10 18:14:16 +00:00
### İçerik Güvenlik Politikası (CSP) <a href="#csp" id="csp"></a>
2022-04-19 22:38:50 +00:00
{% content-ref url="../../pentesting-web/content-security-policy-csp-bypass/" %}
[content-security-policy-csp-bypass](../../pentesting-web/content-security-policy-csp-bypass/)
{% endcontent-ref %}
2024-02-10 18:14:16 +00:00
### **Güvenilir Türler**
CSP aracılığıyla Güvenilir Türlerin zorunlu kılınmasıyla, 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
2021-10-19 22:49:43 +00:00
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
2024-02-10 18:14:16 +00:00
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
});
2021-10-19 22:49:43 +00:00
}
```
```javascript
2024-02-08 22:36:15 +01:00
// Assignment of raw strings is blocked, ensuring safety.
el.innerHTML = 'some string'; // Throws an exception.
2021-10-19 22:49:43 +00:00
const escaped = policy.createHTML('<img src=x onerror=alert(1)>');
2024-02-08 22:36:15 +01:00
el.innerHTML = escaped; // Results in safe assignment.
2021-10-19 22:49:43 +00:00
```
2024-02-08 22:36:15 +01:00
### **X-Content-Type-Options**
2021-10-19 22:49:43 +00:00
Bu başlık, XSS güvenlik açıklarına yol açabilecek MIME türü karıştırma uygulamasını engeller. Tarayıcıların sunucu tarafından belirtilen MIME türlerine saygı göstermesini sağlar.
2024-02-08 22:36:15 +01:00
```
2021-10-19 22:49:43 +00:00
X-Content-Type-Options: nosniff
```
2024-02-08 22:36:15 +01:00
### **X-Frame-Options**
2021-10-19 22:49:43 +00:00
Clickjacking'i engellemek 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.
2024-02-08 22:36:15 +01:00
```
2021-10-19 22:49:43 +00:00
X-Frame-Options: DENY
```
2024-02-10 18:14:16 +00:00
### **Cross-Origin Resource Policy (CORP) ve Cross-Origin Resource Sharing (CORS)**
2021-10-19 22:49:43 +00:00
CORP, web siteleri tarafından yüklenen hangi kaynakların belirlendiği için önemlidir ve çapraz site sızıntılarını azaltır. Öte yandan CORS, belirli koşullar altında aynı köken politikasını gevşeten daha esnek bir çapraz köken kaynak paylaşım mekanizması sağlar.
2021-10-19 22:49:43 +00:00
```
Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
```
2024-02-10 18:14:16 +00:00
### **Cross-Origin Embedder Policy (COEP) ve Cross-Origin Opener Policy (COOP)**
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.
2024-02-08 22:36:15 +01:00
```
2021-10-19 22:49:43 +00:00
Cross-Origin-Embedder-Policy: require-corp
2024-02-08 22:36:15 +01:00
Cross-Origin-Opener-Policy: same-origin-allow-popups
2021-10-19 22:49:43 +00:00
```
2024-02-08 22:36:15 +01:00
### **HTTP Strict Transport Security (HSTS)**
2021-10-19 22:49:43 +00:00
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üvenliği artırır.
2024-02-08 22:36:15 +01:00
```
2021-10-19 22:49:43 +00:00
Strict-Transport-Security: max-age=3153600
```
2024-02-10 18:14:16 +00:00
## Referanslar
2021-09-19 19:55:40 +00:00
2024-02-08 22:36:15 +01:00
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition)
2021-09-19 19:55:40 +00:00
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)
2021-10-19 22:49:43 +00:00
* [https://web.dev/security-headers/](https://web.dev/security-headers/)
2024-02-08 22:36:15 +01:00
* [https://web.dev/articles/security-headers](https://web.dev/articles/security-headers)
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Sıfırdan kahraman olmak için AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
HackTricks'ı desteklemenin diğer yolları:
2024-02-03 13:22:53 +01:00
* **Şirketinizi HackTricks'te reklamınızı 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!
2024-02-10 18:14:16 +00:00
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu 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** 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.
2022-04-28 16:01:33 +00:00
</details>