CRLF injection

CRLF (%0D%0A) Injection

CRLF nədir?

Brauzer veb serverə sorğu göndərdikdə, veb server həm HTTP cavab başlıqlarını, həm də faktiki veb-sayt məzmununu, yəni cavab orqanını ehtiva edən cavabla cavab verir. HTTP başlıqları və HTML cavabı (veb-sayt məzmunu) xüsusi simvolların xüsusi kombinasiyası ilə ayrılır, yəni daşıma qaytarılması və sətir lenti. Qısaca olaraq onlar CRLF kimi də tanınırlar.

Veb server yeni HTTP başlığının nə vaxt başladığını və digərinin bitdiyini anlamaq üçün CRLF-dən istifadə edir. CRLF həmçinin veb tətbiqinə və ya istifadəçiyə faylda və ya mətn blokunda yeni sətrin başladığını söyləyə bilər. CRLF simvolları standart HTTP/1.1 mesajıdır, ona görə də o, Apache, Microsoft IIS və digərləri daxil olmaqla istənilən veb server tərəfindən istifadə olunur.

CRLF injection zəifliyi nədir?

CRLF injection zəifliyi hücumunda təcavüzkar serveri, veb tətbiqini və ya istifadəçini obyektin dayandırıldığını və başqa birinin işə salındığını düşünməyə aldatmaq üçün istifadəçi daxiletməsinə həm karetanın qaytarılması, həm də sətir axını simvollarını daxil edir. Beləliklə, CRLF ardıcıllığı zərərli simvol deyil, lakin onlar zərərli niyyət, HTTP cavabının bölünməsi və s. üçün istifadə edilə bilər.

Veb tətbiqlərində CRLF inyeksiyası

Veb tətbiqlərində CRLF inyeksiyası tətbiqin tək elementlərlə nə etməsindən asılı olaraq ciddi təsirlərə malik ola bilər. Təsirlər məlumatın açıqlanmasından tutmuş kodun icrasına, birbaşa təsir göstərən veb proqram təhlükəsizlik zəifliyinə qədər dəyişə bilər. Əslində, bir CRLF inyeksiya hücumu heç vaxt OWASP Top 10 siyahısında qeyd olunmasa da, veb tətbiqi üzərində çox ciddi əks-təsir doğura bilər. Məsələn, aşağıdakı nümunədə izah edildiyi kimi, admin panelində log fayllarını manipulyasiya etmək də mümkündür.

Log faylında CRLF Injection nümunəsi

Aşağıdakı kimi IP - Vaxt - Ziyarət Yolu çıxış axını nümunəsi ilə admin panelində bir log faylını təsəvvür edin:

123.123.123.123 - 08:15 - /index.php?page=home

Təcavüzkar HTTP sorğusuna CRLF simvollarını yeridə bilirsə, o, çıxış axını dəyişdirə və log girişlərini saxtalaşdıra bilər. O, veb tətbiqindən cavabı aşağıdakı kimi dəyişə bilər:

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

%0d və %0a CR və LF-nin url kodlu formalarıdır. Buna görə də, təcavüzkar həmin simvolları daxil etdikdən və proqram onu ​​göstərdikdən sonra log qeydləri belə görünəcək:

123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit

Buna görə də, CRLF inyeksiya zəifliyindən istifadə edərək, təcavüzkar öz zərərli hərəkətlərini gizlətmək üçün log faylında saxta girişlər edə bilər. Təcavüzkar sözün əsl mənasında səhifəni oğurlayır və cavabı dəyişdirir. Məsələn, təcavüzkarın admin paroluna malik olduğu və yalnız admin tərəfindən istifadə edilə bilən məhdudlaşdırma parametrini yerinə yetirdiyi bir ssenari təsəvvür edin.

Problem ondadır ki, administrator naməlum IP-nin məhdudlaşdırma parametrindən istifadə etdiyini görsə, nəyinsə səhv olduğunu görəcək. Ancaq indi belə görünür ki, əmr localhost tərəfindən verilib (və buna görə də yəqin ki, admin kimi serverə çıxışı olan biri tərəfindən) bu, şübhəli görünmür.

%0d%0a ilə başlayan sorğunun bütün hissəsi server tərəfindən bir parametr kimi idarə olunacaq. Bundan sonra server tərəfindən başqa parametr kimi təhlil ediləcək parametrlə məhdudlaşdırılmış başqa bir əməliyyat var. Effektiv olaraq bu eyni sorğu olacaq:

/index.php?page=home&restrictedaction=edit

HTTP cavabının bölünməsi

HTTP cavabının başlığı və onun gövdəsi CRLF simvolları ilə ayrıldığından, təcavüzkar onları yeritməyə cəhd edə bilər. CRLF birləşməsi brauzerə başlığın bitdiyini və gövdənin başladığını söyləyəcək. Bu o deməkdir ki, o, artıq html kodunun saxlandığı cavab orqanında məlumat yaza bilir. Bu, Cross-site Scripting zəifliyinə səbəb ola bilər.

XSS-ə aparan HTTP Cavabının Parçalanması nümunəsi

Fərdi başlıq təyin edən bir tətbiqi təsəvvür edin, məsələn:

Başlığın dəyəri "name" adlı get parametri vasitəsilə təyin olunur. Əgər heç bir URL kodlaması yoxdursa və dəyər birbaşa başlıqda əks olunursa, təcavüzkar yuxarıda qeyd olunan CRLF kombinasiyasını brauzerə sorğunun başlanmasının başladığını bildirmək üçün daxil edə bilər. Beləliklə, o, XSS yükü kimi məlumatları daxil edə bilir, məsələn:

?name=Bob%0d%0a%0d%0a<script>alert(document.domain)</script>

HTTP başlıq enjeksiyonu

CRLF inyeksiyasından istifadə etməklə təcavüzkar həmçinin brauzerin XSS filtri və ya eyni mənşəli siyasət kimi təhlükəsizlik mexanizmlərini məğlub etmək üçün istifadə edilə bilən HTTP başlıqlarını daxil edə bilər. Bu, təcavüzkarın CSRF tokenləri kimi həssas məlumatları əldə etməsinə imkan verir. O, həmçinin, qurbanı təcavüzkarın hesabına daxil etməklə və ya başqa cür istifadə oluna bilməyən saytlar arası skript (XSS) zəifliklərindən istifadə etməklə istismar oluna bilən kukilər quraşdıra bilər.

Həssas məlumatları çıxarmaq üçün HTTP Header Injection nümunəsi

Təcavüzkar CORS-u (Cross Origin Resource Sharing) aktivləşdirən HTTP başlıqlarını yeridə bilirsə, o, müxtəlif mənşəli saytların bir-birinə daxil olmasına mane olan SOP (Eyni Mənşə Siyasəti) ilə qorunan resurslara daxil olmaq üçün javascriptdən istifadə edə bilər.

SSRF-də yeni HTTP sorğusu

CRLF inyeksiyasından sui-istifadə edərək, yeni HTTP sorğusu yarada və onu yeridə bilərsiniz.

Yaxşı bir nümunə, PHP-də olan SoapClient seriyalılaşdırma qadcetindən istifadə etməklə edilə bilər. Bu sinif user_agent parametri daxilində CRLF-ə qarşı həssasdır və yeni başlıqlar və əsas məzmun daxil etməyə imkan verir. Bununla belə, siz hətta yeni HTTP sorğusu daxil etmək üçün bu boşluqdan sui-istifadə edə bilərsiniz:

$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)
)
);
$client->__soapCall("test", []);

CRLF injection Zəifliyinin təsirləri

CRLF inyeksiyalarının təsiri müxtəlifdir və həmçinin saytlararası skriptin məlumatın açıqlanmasına bütün təsirlərini əhatə edir. O, həmçinin qurbanın brauzerlərində XSS Filtrləri və Eyni Mənşə Siyasəti kimi müəyyən təhlükəsizlik məhdudiyyətlərini deaktiv edə bilər və onları zərərli hücumlara qarşı həssas edir.

Veb Tətbiqlərində CRLF / HTTP Başlıq İnyeksiyalarının qarşısını necə almaq olar

Ən yaxşı qarşısının alınması texnikası istifadəçilərin girişini birbaşa cavab başlıqlarında istifadə etməməkdir. Əgər bu mümkün deyilsə, siz həmişə CRLF xüsusi simvollarını kodlaşdırmaq üçün funksiyadan istifadə etməlisiniz. Digər yaxşı veb tətbiqi təhlükəsizliyinin ən yaxşı təcrübəsi, proqramlaşdırma dilinizi HTTP başlıqlarını təyin edən funksiyaların içərisinə CR və LF-nin daxil edilməsinə imkan verməyən versiyaya yeniləməkdir.

CHEATSHEET

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

Last updated