# CSRF (Cross Site Request Forgery)
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya HackTricks AWS)! Njia nyingine za kusaidia HackTricks: * Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)! * Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com) * Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family) * **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa zawadi za bug! **Machapisho ya Kudukua**\ Shiriki na yaliyomo yanayochimba kina katika msisimko na changamoto za kudukua **Habari za Kudukua za Wakati Halisi**\ Kaa up-to-date na ulimwengu wa kudukua wenye kasi kupitia habari za wakati halisi na ufahamu **Matangazo ya Karibuni**\ Baki mwelekezi na matangazo mapya ya zawadi za bug yanayoanzishwa na sasisho muhimu ya jukwaa **Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na wadukuzi bora leo! ## Kufafanua Cross-Site Request Forgery (CSRF) **Cross-Site Request Forgery (CSRF)** ni aina ya udhaifu wa usalama unaopatikana kwenye programu za wavuti. Inawezesha wadukuzi kutekeleza vitendo kwa niaba ya watumiaji wasio na shaka kwa kudanganya vikao vyao vilivyothibitishwa. Shambulio hutekelezwa wakati mtumiaji, ambaye ameingia kwenye jukwaa la muathiriwa, anatembelea tovuti yenye nia mbaya. Tovuti hii kisha huanzisha maombi kwa akaunti ya muathiriwa kupitia njia kama kutekeleza JavaScript, kuwasilisha fomu, au kupata picha. ### Masharti ya Shambulio la CSRF Ili kutumia udhaifu wa CSRF, hali kadhaa lazima zikutane: 1. **Tambua Kitendo cha Thamani**: Mshambuliaji lazima apate kitendo cha thamani cha kudukua, kama vile kubadilisha nenosiri la mtumiaji, barua pepe, au kuinua mamlaka. 2. **Usimamizi wa Kikao**: Kikao cha mtumiaji kinapaswa kusimamiwa tu kupitia vidakuzi au kichwa cha Uthibitishaji wa Msingi wa HTTP, kwani vichwa vingine haviwezi kudhibitiwa kwa madhumuni haya. 3. **Kutokuwepo kwa Parameta Zisizotabirika**: Ombi halipaswi kuwa na parameta zisizotabirika, kwani zinaweza kuzuia shambulio. ### Ukaguzi Haraka Unaweza **kukamata ombi katika Burp** na ukague ulinzi wa CSRF na kujaribu kutoka kwenye kivinjari unaweza bonyeza **Nakili kama fetch** na ukague ombi:
### Kujilinda Dhidi ya CSRF Mbinu kadhaa za kujilinda zinaweza kutekelezwa kulinda dhidi ya mashambulio ya CSRF: * [**Vidakuzi vya SameSite**](hacking-with-cookies/#samesite): Sifa hii inazuia kivinjari kutuma vidakuzi pamoja na maombi kutoka kwenye tovuti nyingine. [Zaidi kuhusu Vidakuzi vya SameSite](hacking-with-cookies/#samesite). * [**Kushiriki rasilimali kati ya asili**](cors-bypass.md): Sera ya CORS ya tovuti ya muathiriwa inaweza kuathiri uwezekano wa shambulio, hasa ikiwa shambulio linahitaji kusoma majibu kutoka kwenye tovuti ya muathiriwa. [Jifunze kuhusu kuzidiwa kwa CORS](cors-bypass.md). * **Uthibitishaji wa Mtumiaji**: Kuuliza nenosiri la mtumiaji au kutatua captcha kunaweza kuthibitisha nia ya mtumiaji. * **Kuangalia Vichwa vya Referrer au Asili**: Kuthibitisha vichwa hivi kunaweza kusaidia kuhakikisha maombi yanatoka kwenye vyanzo vinavyoaminika. Hata hivyo, kutengeneza kwa uangalifu wa URL kunaweza kuzidi mifumo dhaifu ya uthibitishaji, kama vile: * Kutumia `http://mal.net?orig=http://example.com` (URL inaishia na URL inayotegemewa) * Kutumia `http://example.com.mal.net` (URL inaanza na URL inayotegemewa) * **Kubadilisha Majina ya Parameta**: Kubadilisha majina ya parameta katika maombi ya POST au GET kunaweza kusaidia kuzuia mashambulio ya kiotomatiki. * **Vidakuzi vya CSRF**: Kuingiza kitambulisho cha CSRF kipekee katika kila kikao na kuhitaji kitambulisho hiki katika maombi yanayofuata kunaweza kupunguza hatari ya CSRF kwa kiasi kikubwa. Ufanisi wa kitambulisho unaweza kuimarishwa kwa kutekeleza CORS. Kuelewa na kutekeleza ulinzi huu ni muhimu kwa kudumisha usalama na uadilifu wa programu za wavuti. ## Kuzidiwa kwa Ulinzi ### Kutoka POST hadi GET Labda fomu unayotaka kutumia ni tayari kutuma **ombi la POST na kitambulisho cha CSRF lakini**, unapaswa **kuangalia** ikiwa **GET** pia ni **halali** na ikiwa unapotuma ombi la GET **kitambulisho cha CSRF bado kinathibitishwa**. ### Kutokuwepo kwa kitambulisho Programu zinaweza kutekeleza mbinu ya **kuthibitisha vitambulisho** wanapokuwepo. Hata hivyo, udhaifu unatokea ikiwa uthibitishaji unapuuzwa kabisa wakati kitambulisho hakipo. Wadukuzi wanaweza kutumia hili kwa **kuondoa parameta** inayobeba kitambulisho, si tu thamani yake. Hii inawaruhusu kuzunguka mchakato wa uthibitishaji na kutekeleza shambulio la Cross-Site Request Forgery (CSRF) kwa ufanisi. ### Kitambulisho cha CSRF hakihusishwi na kikao cha mtumiaji Programu zisizohusisha vitambulisho vya CSRF na vikao vya mtumiaji zinaleta hatari kubwa ya usalama. Mifumo hii huthibitisha vitambulisho dhidi ya **mtungi wa jumla** badala ya kuhakikisha kila kitambulisho kimefungwa kwenye kikao kinachoanzisha. Hivi ndivyo wadukuzi wanavyotumia hili: 1. **Kujiandikisha** kwa kutumia akaunti yao wenyewe. 2. **Kupata kitambulisho halali cha CSRF** kutoka kwenye mtungi wa jumla. 3. **Kutumia kitambulisho hiki** katika shambulio la CSRF dhidi ya muathiriwa. Udhaifu huu unaruhusu wadukuzi kufanya maombi yasiyoruhusiwa kwa niaba ya muathiriwa, kwa kutumia mbinu dhaifu ya uthibitishaji wa kitambulisho cha programu. ### Kuzidiwa kwa Njia Ikiwa ombi linatumia "**njia ya kipekee**" **isivyo ya kawaida**, angalia ikiwa **kazi ya kubadilisha njia** inafanya kazi. Kwa mfano, ikiwa inatumia njia ya **KUWEKA** unaweza kujaribu kutumia njia ya **POST** na **tuma**: _https://mfano.com/my/dear/api/val/num?**\_method=KUWEKA**_ Hii inaweza pia kufanya kazi kwa kutuma **parameta ya \_method ndani ya ombi la POST** au kutumia **vichwa**: * _X-HTTP-Method_ * _X-HTTP-Method-Override_ * _X-Method-Override_ ### Kuzidiwa kwa Kitambulisho cha Kichwa cha Desturi Ikiwa ombi linaweka **kichwa cha desturi** na **kitambulisho** kwenye ombi kama **njia ya ulinzi wa CSRF**, basi: * Jaribu ombi bila **Kitambulisho Kilichobinafsishwa na pia kichwa.** * Jaribu ombi na **urefu sawa lakini kitambulisho tofauti**. ### Kitambulisho cha CSRF kinathibitishwa na kuki Programu zinaweza kutekeleza ulinzi wa CSRF kwa kunakili kitambulisho katika kuki na parameta ya ombi au kwa kuweka kuki ya CSRF na kuthibitisha ikiwa kitambulisho kilichotumwa kwenye seva kinalingana na kuki. Programu huthibitisha maombi kwa kuangalia ikiwa kitambulisho katika parameta ya ombi linalingana na thamani kwenye kuki. Hata hivyo, mbinu hii inaweza kuwa dhaifu kwa mashambulio ya CSRF ikiwa tovuti ina dosari zinazoruhusu mshambuliaji kuweka kuki ya CSRF kwenye kivinjari cha muathiriwa, kama vile dosari ya CRLF. Mshambuliaji anaweza kutumia hili kwa kupakia picha ya kudanganya ambayo inaweka kuki, kisha kuanzisha shambulio la CSRF. Hapa kuna mfano wa jinsi shambulio linavyoweza kuandaliwa: ```html
``` {% hint style="info" %} Tafadhali kumbuka kwamba ikiwa **tokeni ya csrf inahusiana na kuki ya kikao shambulio hili halitafanya kazi** kwa sababu utahitaji kuweka kikao cha mwathiriwa, na kwa hivyo utakuwa unajiwekea shambulio. {% endhint %} ### Badilisha Aina ya Yaliyomo Kulingana na [**hii**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests), ili **kuepuka maombi ya awali** kutumia njia ya **POST** hizi ni thamani zinazoruhusiwa za Aina ya Yaliyomo: - **`application/x-www-form-urlencoded`** - **`multipart/form-data`** - **`text/plain`** Hata hivyo, kumbuka kwamba **mantiki za seva zinaweza kutofautiana** kulingana na **Aina ya Yaliyomo** iliyotumiwa hivyo unapaswa kujaribu thamani zilizotajwa na zingine kama **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._ Mfano (kutoka [hapa](https://brycec.me/posts/corctf\_2021\_challenges)) ya kutuma data ya JSON kama text/plain: ```html
``` ### Kupita Maombi ya Awali kwa Data ya JSON Wakati unajaribu kutuma data ya JSON kupitia ombi la POST, kutumia `Content-Type: application/json` katika fomu ya HTML sio moja kwa moja inawezekana. Vivyo hivyo, kutumia `XMLHttpRequest` kutuma aina hii ya yaliyomo huanzisha ombi la awali. Walakini, kuna mikakati ya kuzidisha kikwazo hiki na kuangalia ikiwa seva inachakata data ya JSON bila kujali Content-Type: 1. **Tumia Aina Zingine za Yaliyomo**: Tumia `Content-Type: text/plain` au `Content-Type: application/x-www-form-urlencoded` kwa kuweka `enctype="text/plain"` katika fomu. Hatua hii inajaribu ikiwa seva inatumia data bila kujali Content-Type. 2. **Badilisha Aina ya Yaliyomo**: Ili kuepuka ombi la awali huku ukisaidia seva kutambua yaliyomo kama JSON, unaweza kutuma data na `Content-Type: text/plain; application/json`. Hii haisababishi ombi la awali lakini inaweza kuchakatwa kwa usahihi na seva ikiwa imeboreshwa kukubali `application/json`. 3. **Matumizi ya Faili ya SWF Flash**: Njia isiyo ya kawaida lakini inayowezekana inahusisha kutumia faili ya SWF flash kuzidisha vizuizi kama hivyo. Kwa uelewa wa kina wa mbinu hii, tazama [chapisho hili](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937). ### Kupita Ukaguzi wa Referrer / Asili **Epuka Kichwa cha Referrer** Programu zinaweza kuthibitisha kichwa cha 'Referer' tu wakati kipo. Ili kuzuia kivinjari kutuma kichwa hiki, unaweza kutumia lebo ya meta ya HTML ifuatayo: ```xml ``` Hii inahakikisha kichwa cha 'Referer' kinaachwa, ikipitisha ukaguzi wa uthibitisho katika baadhi ya programu. **Kupuuza Regexp** {% content-ref url="ssrf-server-side-request-forgery/url-format-bypass.md" %} [url-format-bypass.md](ssrf-server-side-request-forgery/url-format-bypass.md) {% endcontent-ref %} Kuweka jina la kikoa la seva katika URL ambayo Referrer itatuma ndani ya paramita unaweza kufanya: ```html
``` ### **Kichwa cha njia ya kuzuia** Sehemu ya kwanza ya [**hii CTF writeup**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) inaeleza kwamba [Msimbo wa chanzo wa Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281), router imewekwa kushughulikia **maombi ya HEAD kama maombi ya GET** bila mwili wa jibu - suluhisho la kawaida ambalo si la pekee kwa Oak. Badala ya kushughulikia maombi ya HEAD kwa njia maalum, maombi hayo **hutumwa kwa kushughulikia wa GET lakini programu inaondoa mwili wa jibu**. Hivyo basi, ikiwa maombi ya GET yanazuiliwa, unaweza **kupeleka ombi la HEAD ambalo litashughulikiwa kama ombi la GET**. ## **Mifano ya Kutumia Mabaya** ### **Kuondoa CSRF Token** Ikiwa **tokeni ya CSRF** inatumika kama **ulinzi** unaweza kujaribu **kuiondoa** kwa kutumia [**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens) au [**Dangling Markup**](dangling-markup-html-scriptless-injection/) vulnerability. ### **KUTUMIA HTML tags** ```xml

404 - Page not found

The URL you are requesting is no longer available ``` Vivambo vingine vya HTML5 vinavyoweza kutumika kutuma ombi la GET kiotomatiki ni: ```html