12 KiB
Özel HTTP başlıkları
AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!
HackTricks'ı desteklemenin diğer yolları:
- Ş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'ni edinin
- [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 veya telegram grubuna veya bizi Twitter 🐦 @carlospolopm'da takip edin.
- Hacking püf noktalarınızı göndererek HackTricks (https://github.com/carlospolop/hacktricks) ve HackTricks Cloud github depolarına PR'lar göndererek paylaşın.
Kelime listeleri ve Araçlar
- https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers
- https://github.com/rfc-st/humble
Konum Değiştirmek için Başlıklar
IP kaynağını yeniden yazın:
X-Originating-IP: 127.0.0.1
X-Forwarded-For: 127.0.0.1
X-Forwarded: 127.0.0.1
Forwarded-For: 127.0.0.1
X-Forwarded-Host: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
X-ProxyUser-Ip: 127.0.0.1
X-Original-URL: 127.0.0.1
Client-IP: 127.0.0.1
X-Client-IP: 127.0.0.1
X-Host: 127.0.0.1
True-Client-IP: 127.0.0.1
Cluster-Client-IP: 127.0.0.1
Via: 1.0 fred, 1.1 127.0.0.1
Connection: close, X-Forwarded-For
(Hop-by-hop başlıkları kontrol edin)
Konumu yeniden yazın:
X-Original-URL: /admin/console
X-Rewrite-URL: /admin/console
Hop-by-Hop başlıklar
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
{% content-ref url="../../pentesting-web/abusing-hop-by-hop-headers.md" %} abusing-hop-by-hop-headers.md {% endcontent-ref %}
HTTP İsteği Kaçırma
Content-Length: 30
Transfer-Encoding: chunked
{% content-ref url="../../pentesting-web/http-request-smuggling/" %} http-request-smuggling {% endcontent-ref %}
Önbellek Başlıkları
Sunucu Önbellek Başlıkları:
- Yanıtta
X-Cache
değeri, isteğin önbelleğe alınmadığı durumlardamiss
ve önbelleğe alındığındahit
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
{% content-ref url="../../pentesting-web/cache-deception.md" %} cache-deception.md {% endcontent-ref %}
Yerel Önbellek başlıkları:
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 gelirWarning
:Warning
genel HTTP başlığı, mesajın durumuyla ilgili olası sorunlar hakkında bilgi içerir. Bir yanıtta birden fazlaWarning
başlığı görünebilir.Warning: 110 anderson/1.3.37 "Response is stale"
Koşullar
- Bu başlıkları kullanan istekler:
If-Modified-Since
veIf-Unmodified-Since
, yanıt başlığı**Last-Modified
** farklı bir zaman içeriyorsa yalnızca veri ile yanıt verilecektir. If-Match
veIf-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 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övdesi bilgileri
Content-Length
: Kaynağın boyutu, ondalık bayt sayısı olarak.Content-Type
: Kaynağın ortam türünü belirtirContent-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.Content-Location
: Döndürülen veriler için alternatif bir konumu belirtir.
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 birlikteRange: bytes=20-20
başlığıyla yapılan bir istek, 20. baytın SHA1'ininETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y
olduğunu sızdırır.
Sunucu Bilgisi
Sunucu: Apache/2.4.1 (Unix)
X-Powered-By: PHP/5.3.3
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, 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çinExpect: 100-continue
başlığını kullanmasıdır. İstemci, iletimi sürdürmeden önce bir100 (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 olarak mı yoksa bir ek (indirilen) olarak mı işlenmesi gerektiğini yönlendirir. Örneğin:
Content-Disposition: attachment; filename="filename.jpg"
Bu, "filename.jpg" adlı dosyanın indirilmesi ve kaydedilmesi amaçlanmıştır.
Güvenlik Başlıkları
İçerik Güvenlik Politikası (CSP)
{% content-ref url="../../pentesting-web/content-security-policy-csp-bypass/" %} content-security-policy-csp-bypass {% endcontent-ref %}
Güvenilir Türler
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.
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => str.replace(/\</g, '<').replace(/>/g, '>');
});
}
// Assignment of raw strings is blocked, ensuring safety.
el.innerHTML = 'some string'; // Throws an exception.
const escaped = policy.createHTML('<img src=x onerror=alert(1)>');
el.innerHTML = escaped; // Results in safe assignment.
X-Content-Type-Options
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 ö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 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
Access-Control-Allow-Credentials: true
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.
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 gizliliği ve güvenliği artırır.
Strict-Transport-Security: max-age=3153600
Referanslar
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
- https://web.dev/security-headers/
- https://web.dev/articles/security-headers
Sıfırdan kahraman olana kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)!
HackTricks'ı desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Family'yi keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter 🐦 @carlospolopm takip edin.**
- Hacking püf noktalarınızı paylaşarak PR'lar göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.