# CSRF (Cross Site Request Forgery) {% hint style="success" %} Leer & oefen AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Leer & oefen GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Ondersteun HackTricks * Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)! * **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om te kommunikeer met ervare hackers en bug bounty jagters! **Hacking Inligting**\ Betrek met inhoud wat die opwinding en uitdagings van hacking ondersoek **Regstydse Hack Nuus**\ Bly op hoogte van die vinnige hacking wêreld deur regstydse nuus en insigte **Laaste Aankondigings**\ Bly ingelig oor die nuutste bug bounties wat bekendgestel word en belangrike platform opdaterings **Sluit by ons aan op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers! ## Cross-Site Request Forgery (CSRF) Verduidelik **Cross-Site Request Forgery (CSRF)** is 'n tipe sekuriteitskwesbaarheid wat in webtoepassings gevind word. Dit stel aanvallers in staat om aksies namens onskuldige gebruikers uit te voer deur hul geverifieerde sessies te benut. Die aanval word uitgevoer wanneer 'n gebruiker, wat in 'n slagoffer se platform aangemeld is, 'n kwaadwillige webwerf besoek. Hierdie webwerf aktiveer dan versoeke na die slagoffer se rekening deur metodes soos die uitvoer van JavaScript, indien van vorms, of opvra van beelde. ### Voorvereistes vir 'n CSRF-aanval Om 'n CSRF-kwesbaarheid te benut, moet verskeie voorwaardes nagekom word: 1. **Identifiseer 'n Waardevolle Aksie**: Die aanvaller moet 'n aksie vind wat die moeite werd is om te benut, soos om die gebruiker se wagwoord, e-pos of bevoegdhede te verander. 2. **Sessie Bestuur**: Die gebruiker se sessie moet uitsluitlik deur koekies of die HTTP Basic Authentication koptekst bestuur word, aangesien ander koptekste nie vir hierdie doel gemanipuleer kan word nie. 3. **Afwesigheid van Onvoorspelbare Parameters**: Die versoek moet nie onvoorspelbare parameters bevat nie, aangesien dit die aanval kan voorkom. ### Vinige Kontrole Jy kan **die versoek in Burp vasvang** en CSRF beskermings nagaan en om van die blaaier te toets kan jy op **Kopieer as fetch** klik en die versoek nagaan:
### Verdediging teen CSRF Verskeie teenmaatreëls kan geïmplementeer word om teen CSRF-aanvalle te beskerm: * [**SameSite koekies**](hacking-with-cookies/#samesite): Hierdie attribuut verhoed dat die blaaier koekies saam met kruis-web versoeke stuur. [Meer oor SameSite koekies](hacking-with-cookies/#samesite). * [**Cross-origin resource sharing**](cors-bypass.md): Die CORS-beleid van die slagoffer webwerf kan die haalbaarheid van die aanval beïnvloed, veral as die aanval vereis dat die antwoord van die slagoffer webwerf gelees word. [Leer oor CORS omseilings](cors-bypass.md). * **Gebruiker Verifikasie**: Om die gebruiker se wagwoord te vra of 'n captcha op te los kan die gebruiker se bedoeling bevestig. * **Kontroleer Referrer of Oorsprong Koptekste**: Die validering van hierdie koptekste kan help om te verseker dat versoeke van vertroude bronne kom. Dit is egter moontlik om swak geïmplementeerde kontroles te omseil deur sorgvuldig URL's te skep, soos: * Gebruik `http://mal.net?orig=http://example.com` (URL eindig met die vertroude URL) * Gebruik `http://example.com.mal.net` (URL begin met die vertroude URL) * **Wysig Parametername**: Die name van parameters in POST of GET versoeke kan verander word om geoutomatiseerde aanvalle te voorkom. * **CSRF Tokens**: Die insluiting van 'n unieke CSRF-token in elke sessie en die vereiste van hierdie token in daaropvolgende versoeke kan die risiko van CSRF aansienlik verminder. Die doeltreffendheid van die token kan verbeter word deur CORS af te dwing. Om hierdie verdediging te verstaan en te implementeer is van kardinale belang om die sekuriteit en integriteit van webtoepassings te handhaaf. ## Verdedigings Omseiling ### Van POST na GET Miskien is die vorm wat jy wil misbruik voorberei om 'n **POST versoek met 'n CSRF-token te stuur, maar** jy moet **kontroleer** of 'n **GET** ook **geld** en of wanneer jy 'n GET versoek stuur die **CSRF-token steeds geverifieer word**. ### Gebrek aan token Toepassings mag 'n meganisme implementeer om **tokens te verifieer** wanneer hulle teenwoordig is. 'n Kwesbaarheid ontstaan egter as die verifikasie heeltemal oorgeslaan word wanneer die token afwesig is. Aanvallers kan dit benut deur die **parameter** wat die token dra, nie net sy waarde, te **verwyder**. Dit stel hulle in staat om die verifikasieproses te omseil en 'n Cross-Site Request Forgery (CSRF) aanval effektief uit te voer. ### CSRF-token is nie aan die gebruiker se sessie gekoppel nie Toepassings wat **CSRF-tokens nie aan gebruiker sessies koppel nie** bied 'n beduidende **sekuriteitsrisiko**. Hierdie stelsels verifieer tokens teen 'n **globale poel** eerder as om te verseker dat elke token aan die inisiërende sessie gebind is. Hier is hoe aanvallers dit benut: 1. **Verifieer** met hul eie rekening. 2. **Verkry 'n geldige CSRF-token** uit die globale poel. 3. **Gebruik hierdie token** in 'n CSRF-aanval teen 'n slagoffer. Hierdie kwesbaarheid stel aanvallers in staat om ongeoorloofde versoeke namens die slagoffer te maak, wat die toepassing se **onvoldoende token verifikasie meganisme** benut. ### Metode omseiling As die versoek 'n "**vreemde**" **metode** gebruik, kontroleer of die **metode** **oorskrywing funksionaliteit** werk. Byvoorbeeld, as dit **'n PUT** metode gebruik, kan jy probeer om 'n **POST** metode te **gebruik** en **stuur**: _https://example.com/my/dear/api/val/num?**\_method=PUT**_ Dit kan ook werk deur die **\_method parameter binne 'n POST versoek** te stuur of deur die **koptekste** te gebruik: * _X-HTTP-Method_ * _X-HTTP-Method-Override_ * _X-Method-Override_ ### Aangepaste koptekst token omseiling As die versoek 'n **aangepaste koptekst** met 'n **token** aan die versoek voeg as **CSRF beskermingsmetode**, dan: * Toets die versoek sonder die **Aangepaste Token en ook koptekst.** * Toets die versoek met presies **dieselfde lengte maar 'n ander token**. ### CSRF-token word deur 'n koekie geverifieer Toepassings mag CSRF-beskerming implementeer deur die token in beide 'n koekie en 'n versoekparameter te dupliceer of deur 'n CSRF-koekie in te stel en te verifieer of die token wat in die agtergrond gestuur word ooreenstem met die koekie. Die toepassing verifieer versoeke deur te kontroleer of die token in die versoekparameter ooreenstem met die waarde in die koekie. Hierdie metode is egter kwesbaar vir CSRF-aanvalle as die webwerf gebreke het wat 'n aanvaller toelaat om 'n CSRF-koekie in die slagoffer se blaaier in te stel, soos 'n CRLF kwesbaarheid. Die aanvaller kan dit benut deur 'n misleidende beeld te laai wat die koekie stel, gevolg deur die inisiëring van die CSRF-aanval. Hieronder is 'n voorbeeld van hoe 'n aanval gestruktureer kan word: ```html
``` {% hint style="info" %} Let daarop dat as die **csrf token verband hou met die sessie koekie, hierdie aanval nie sal werk nie** omdat jy die slagoffer jou sessie moet stel, en daarom sal jy jouself aanval. {% endhint %} ### Inhoudstipe verandering Volgens [**hierdie**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests), om **preflight** versoeke met die **POST** metode te **vermy**, is hierdie die toegelate Inhoudstipe waardes: * **`application/x-www-form-urlencoded`** * **`multipart/form-data`** * **`text/plain`** Let egter daarop dat die **bediener se logika kan verskil** afhangende van die **Inhoudstipe** wat gebruik word, so jy moet die genoemde waardes en ander soos **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._ probeer. Voorbeeld (van [hier](https://brycec.me/posts/corctf\_2021\_challenges)) van die sending van JSON data as text/plain: ```html
``` ### Omseil van Preflight Versoeke vir JSON Data Wanneer jy probeer om JSON data via 'n POST versoek te stuur, is dit nie direk moontlik om die `Content-Type: application/json` in 'n HTML vorm te gebruik nie. Net so, die gebruik van `XMLHttpRequest` om hierdie inhouds tipe te stuur, begin 'n preflight versoek. Nietemin, daar is strategieë om moontlik hierdie beperking te omseil en te kontroleer of die bediener die JSON data verwerk ongeag die Content-Type: 1. **Gebruik Alternatiewe Inhouds Tipes**: Gebruik `Content-Type: text/plain` of `Content-Type: application/x-www-form-urlencoded` deur `enctype="text/plain"` in die vorm in te stel. Hierdie benadering toets of die agterkant die data gebruik ongeag die Content-Type. 2. **Wysig Inhouds Tipe**: Om 'n preflight versoek te vermy terwyl jy verseker dat die bediener die inhoud as JSON herken, kan jy die data stuur met `Content-Type: text/plain; application/json`. Dit aktiveer nie 'n preflight versoek nie, maar kan korrek deur die bediener verwerk word as dit geconfigureer is om `application/json` te aanvaar. 3. **SWF Flash Lêer Gebruik**: 'n Minder algemene maar haalbare metode behels die gebruik van 'n SWF flash lêer om sulke beperkings te omseil. Vir 'n diepgaande begrip van hierdie tegniek, verwys na [hierdie pos](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937). ### Referrer / Oorsprong kontrole omseiling **Vermy Referrer kop** Toepassings mag die 'Referer' kop slegs valideer wanneer dit teenwoordig is. Om te voorkom dat 'n blaaier hierdie kop stuur, kan die volgende HTML meta tag gebruik word: ```xml ``` Dit verseker dat die 'Referer' kop nie ingesluit word nie, wat moontlik valideringskontroles in sommige toepassings omseil. **Regexp omseilings** {% 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 %} Om die domeinnaam van die bediener in die URL wat die Referrer binne die parameters gaan stuur, in te stel, kan jy doen: ```html
``` ### **HEAD metode omseiling** Die eerste deel van [**hierdie CTF skrywe**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) verduidelik dat [Oak se bronkode](https://github.com/oakserver/oak/blob/main/router.ts#L281), 'n router is ingestel om **HEAD versoeke as GET versoeke** te hanteer sonder 'n responsliggaam - 'n algemene omseiling wat nie uniek is aan Oak nie. In plaas van 'n spesifieke handler wat met HEAD versoeke werk, word hulle eenvoudig **aan die GET handler gegee, maar die app verwyder net die responsliggaam**. Daarom, as 'n GET versoek beperk word, kan jy eenvoudig **'n HEAD versoek stuur wat as 'n GET versoek verwerk sal word**. ## **Eksploitasie Voorbeelde** ### **Exfiltrering van CSRF Token** As 'n **CSRF token** as **verdediging** gebruik word, kan jy probeer om dit te **exfiltreer** deur 'n [**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens) kwesbaarheid of 'n [**Dangling Markup**](dangling-markup-html-scriptless-injection/) kwesbaarheid te misbruik. ### **GET met HTML merke** ```xml

404 - Page not found

The URL you are requesting is no longer available ``` Ander HTML5-tags wat gebruik kan word om outomaties 'n GET-versoek te stuur, is: ```html