diff --git a/src/pentesting-web/csrf-cross-site-request-forgery.md b/src/pentesting-web/csrf-cross-site-request-forgery.md
index b31f563a6..69ebad668 100644
--- a/src/pentesting-web/csrf-cross-site-request-forgery.md
+++ b/src/pentesting-web/csrf-cross-site-request-forgery.md
@@ -4,64 +4,92 @@
## Cross-Site Request Forgery (CSRF) Explained
-**Cross-Site Request Forgery (CSRF)** एक प्रकार की सुरक्षा कमजोरी है जो वेब अनुप्रयोगों में पाई जाती है। यह हमलावरों को अनजान उपयोगकर्ताओं की ओर से कार्य करने की अनुमति देती है, उनके प्रमाणित सत्रों का लाभ उठाकर। हमला तब किया जाता है जब एक उपयोगकर्ता, जो एक पीड़ित के प्लेटफॉर्म में लॉग इन है, एक दुर्भावनापूर्ण साइट पर जाता है। यह साइट फिर पीड़ित के खाते के लिए अनुरोधों को ट्रिगर करती है, जैसे कि जावास्क्रिप्ट को निष्पादित करना, फॉर्म सबमिट करना, या छवियों को लाना।
+**Cross-Site Request Forgery (CSRF)** वेब एप्लिकेशनों में पाई जाने वाली एक प्रकार की सुरक्षा vuln है। यह attackers को authenticated सत्रों का फायदा उठाकर अनजान उपयोगकर्ताओं की तरफ़ से actions करने में सक्षम बनाती है। यह attack तब executed होता है जब कोई उपयोगकर्ता, जो पीड़ित के प्लेटफ़ॉर्म में logged in है, किसी malicious साइट पर जाता है। यह साइट फिर victim के अकाउंट पर requests ट्रिगर कर देती है जैसे कि JavaScript execute करना, forms submit करना, या images fetch करना।
### Prerequisites for a CSRF Attack
-CSRF कमजोरी का लाभ उठाने के लिए, कई शर्तें पूरी होनी चाहिए:
+एक CSRF vulnerability का exploit करने के लिए कुछ शर्तें पूरी होनी चाहिए:
-1. **Identify a Valuable Action**: हमलावर को एक ऐसा कार्य ढूंढना होगा जिसका लाभ उठाना मूल्यवान हो, जैसे उपयोगकर्ता का पासवर्ड, ईमेल बदलना, या विशेषाधिकार बढ़ाना।
-2. **Session Management**: उपयोगकर्ता का सत्र केवल कुकीज़ या HTTP बेसिक प्रमाणीकरण हेडर के माध्यम से प्रबंधित किया जाना चाहिए, क्योंकि अन्य हेडर को इस उद्देश्य के लिए हेरफेर नहीं किया जा सकता।
-3. **Absence of Unpredictable Parameters**: अनुरोध में अप्रत्याशित पैरामीटर नहीं होने चाहिए, क्योंकि वे हमले को रोक सकते हैं।
+1. **Identify a Valuable Action**: attacker को ऐसा action ढूँढना होगा जिसे exploit करना लाभकारी हो, जैसे यूज़र का password बदलना, email बदलना, या privileges बढ़ाना।
+2. **Session Management**: उपयोगकर्ता का session केवल cookies या HTTP Basic Authentication header के माध्यम से manage होना चाहिए, क्योंकि अन्य headers इस उद्देश्य के लिए manipulate नहीं किए जा सकते।
+3. **Absence of Unpredictable Parameters**: request में unpredictable parameters नहीं होने चाहिए, क्योंकि वे attack को रोक सकते हैं।
### Quick Check
-आप **Burp में अनुरोध को कैप्चर** कर सकते हैं और CSRF सुरक्षा की जांच कर सकते हैं और ब्राउज़र से परीक्षण करने के लिए आप **Copy as fetch** पर क्लिक कर सकते हैं और अनुरोध की जांच कर सकते हैं:
+आप request को **Burp** में capture कर सकते हैं और CSRF protections की जाँच कर सकते हैं और ब्राउज़र से टेस्ट करने के लिए आप **Copy as fetch** पर क्लिक करके अनुरोध की जाँच कर सकते हैं:
","widgetType":"URL"}]
+```
+
+- Bypass by switching to GET (no token):
+
+```http
+GET /index.php?module=Home&action=HomeAjax&file=HomeWidgetBlockList&widgetInfoList=[{"widgetId":"https://attacker
","widgetType":"URL"}] HTTP/1.1
+```
+
+Notes:
+- यह pattern अक्सर reflected XSS के साथ दिखाई देता है जहाँ responses को गलत तरीके से text/html के रूप में भेजा जाता है बजाय application/json के।
+- इसे XSS के साथ जोड़ने से exploitation की बाधाएँ काफी कम हो जाती हैं क्योंकि आप एक ही GET link दे सकते हैं जो vulnerable code path को trigger करता है और CSRF checks को पूरी तरह से चकमा दे देता है।
### Lack of token
-अनुप्रयोग एक तंत्र को लागू कर सकते हैं **टोकन को मान्य करने के लिए** जब वे मौजूद होते हैं। हालाँकि, एक कमजोरी तब उत्पन्न होती है जब टोकन के अनुपस्थित होने पर मान्यता पूरी तरह से छोड़ दी जाती है। हमलावर इस पर **टोकन ले जाने वाले पैरामीटर को हटा कर** लाभ उठा सकते हैं, न कि केवल इसके मान को। इससे उन्हें मान्यता प्रक्रिया को बायपास करने और प्रभावी रूप से एक Cross-Site Request Forgery (CSRF) हमला करने की अनुमति मिलती है।
+Applications ऐसे mechanisms लागू कर सकती हैं जो मौजूद होने पर **validate tokens** करती हैं। हालाँकि, एक vulnerability तब पैदा होती है जब token के अनुपस्थित होने पर validation पूरी तरह से स्किप कर दी जाती है। Attackers इसका फायदा उठाकर उस parameter को **remove** कर सकते हैं जो token ले जाता है, केवल उसकी value हटाने तक सीमित नहीं रहकर। इससे वे validation प्रक्रिया को बाईपास करके प्रभावी रूप से Cross-Site Request Forgery (CSRF) attack कर पाते हैं।
### CSRF token is not tied to the user session
-अनुप्रयोग **CSRF टोकनों को उपयोगकर्ता सत्रों से नहीं बांधने** पर एक महत्वपूर्ण **सुरक्षा जोखिम** प्रस्तुत करते हैं। ये सिस्टम टोकनों को एक **वैश्विक पूल** के खिलाफ मान्य करते हैं, बजाय इसके कि प्रत्येक टोकन को आरंभिक सत्र से बंधा हो।
+ऐप्लिकेशन जो CSRF tokens को user session से बाँधते नहीं हैं, वे एक गंभीर सुरक्षा जोखिम पेश करते हैं। ऐसे सिस्टम tokens को session के बजाय एक **global pool** के खिलाफ verify करते हैं।
-हमलावर इस तरह से इसका लाभ उठाते हैं:
+Attackers इसका दुरुपयोग इस तरह करते हैं:
-1. **Authenticate** अपने स्वयं के खाते का उपयोग करके।
-2. **Obtain a valid CSRF token** वैश्विक पूल से।
-3. **Use this token** एक पीड़ित के खिलाफ CSRF हमले में।
+1. अपने account से authenticate करें।
+2. global pool से एक valid CSRF token प्राप्त करें।
+3. इस token का उपयोग करके victim के खिलाफ CSRF attack करें।
-यह कमजोरी हमलावरों को पीड़ित की ओर से अनधिकृत अनुरोध करने की अनुमति देती है, अनुप्रयोग के **अपर्याप्त टोकन मान्यता तंत्र** का लाभ उठाते हुए।
+यह vulnerability attackers को victim की ओर से unauthorized requests करने की अनुमति देती है, जो application's **inadequate token validation mechanism** का शोषण है।
### Method bypass
-यदि अनुरोध एक "**अजीब**" **विधि** का उपयोग कर रहा है, तो जांचें कि क्या **विधि** **ओवरराइड कार्यक्षमता** काम कर रही है। उदाहरण के लिए, यदि यह **PUT** विधि का **उपयोग कर रहा है** तो आप **POST** विधि का **उपयोग करने** और **भेजने** का प्रयास कर सकते हैं: _https://example.com/my/dear/api/val/num?**\_method=PUT**_
+यदि request किसी "weird" method का उपयोग कर रही है, तो चेक करें कि क्या **method override functionality** काम कर रही है। उदाहरण के लिए, यदि यह **using a PUT** method है तो आप **use a POST** method करके और भेजकर कोशिश कर सकते हैं: _https://example.com/my/dear/api/val/num?**\_method=PUT**_
-यह **POST अनुरोध के अंदर \_method पैरामीटर** भेजकर या **हेडर** का उपयोग करके भी काम कर सकता है:
+यह तब भी काम कर सकता है जब **\_method parameter** को POST request के अंदर भेजा जाए या headers का उपयोग करके:
- _X-HTTP-Method_
- _X-HTTP-Method-Override_
@@ -69,18 +97,18 @@ CSRF हमलों से बचाने के लिए कई प्रत
### Custom header token bypass
-यदि अनुरोध एक **कस्टम हेडर** के साथ एक **टोकन** को CSRF सुरक्षा विधि के रूप में जोड़ रहा है, तो:
+यदि request में CSRF protection के तौर पर किसी **custom header** में **token** जोड़ा जा रहा है, तो:
-- **कस्टमाइज्ड टोकन और हेडर के बिना** अनुरोध का परीक्षण करें।
-- **सटीक समान लंबाई लेकिन अलग टोकन** के साथ अनुरोध का परीक्षण करें।
+- Request को **Customized Token और संबंधित header** के बिना test करें।
+- उसी **same length लेकिन different token** के साथ request को test करें।
### CSRF token is verified by a cookie
-अनुप्रयोग CSRF सुरक्षा को टोकन को कुकी और अनुरोध पैरामीटर दोनों में डुप्लिकेट करके या एक CSRF कुकी सेट करके और यह सत्यापित करके लागू कर सकते हैं कि बैकएंड में भेजा गया टोकन कुकी के अनुरूप है। अनुप्रयोग अनुरोधों को मान्य करते हैं यह जांचकर कि क्या अनुरोध पैरामीटर में टोकन कुकी में मान के साथ मेल खाता है।
+ऐप्लिकेशन CSRF protection के लिए token को cookie और request parameter दोनों में duplicate कर सकते हैं या CSRF cookie सेट करके backend में यह verify कर सकते हैं कि request में भेजा गया token cookie के value से मेल खाता है। एप्लिकेशन requests को इस तरह validate करता है कि request parameter में मौजूद token cookie की value के अनुरूप है या नहीं।
-हालांकि, यदि वेबसाइट में ऐसी खामियाँ हैं जो हमलावर को पीड़ित के ब्राउज़र में CSRF कुकी सेट करने की अनुमति देती हैं, जैसे कि CRLF कमजोरी, तो यह विधि CSRF हमलों के प्रति संवेदनशील है। हमलावर इसका लाभ उठाकर एक धोखाधड़ी छवि लोड कर सकता है जो कुकी सेट करता है, इसके बाद CSRF हमले को शुरू करता है।
+हालाँकि, यह तरीका तब CSRF के लिए vulnerable हो सकता है जब वेबसाइट में ऐसी खामियाँ हों जो attacker को victim के ब्राउज़र में CSRF cookie सेट करने की अनुमति देती हों, जैसे कि CRLF vulnerability। Attacker deceptive image load कर के cookie सेट कर सकता है, और फिर CSRF attack शुरू कर सकता है।
-नीचे एक उदाहरण है कि एक हमला कैसे संरचित किया जा सकता है:
+Below is an example of how an attack could be structured:
```html
@@ -103,19 +131,19 @@ onerror="document.forms[0].submit();" />
```
> [!TIP]
-> ध्यान दें कि यदि **csrf टोकन सत्र कुकी से संबंधित है तो यह हमला काम नहीं करेगा** क्योंकि आपको पीड़ित को अपना सत्र सेट करना होगा, और इसलिए आप खुद पर हमला कर रहे होंगे।
+> ध्यान दें कि यदि **csrf token is related with the session cookie this attack won't work** क्योंकि आपको victim का session सेट करना पड़ेगा, और इसलिए आप अपने आप पर हमला कर रहे होंगे।
### Content-Type परिवर्तन
-[**इस**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests) के अनुसार, **POST** विधि का उपयोग करते समय **preflight** अनुरोधों से बचने के लिए ये अनुमत Content-Type मान हैं:
+According to [**this**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests), in order to **avoid preflight** requests using **POST** method these are the allowed Content-Type values:
- **`application/x-www-form-urlencoded`**
- **`multipart/form-data`**
- **`text/plain`**
-हालांकि, ध्यान दें कि **सर्वर की लॉजिक भिन्न हो सकती है** जो उपयोग किए गए **Content-Type** पर निर्भर करती है, इसलिए आपको उल्लेखित मानों और अन्य जैसे **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._ का प्रयास करना चाहिए।
+हालांकि, ध्यान दें कि उपयोग किए गए **Content-Type** के आधार पर **severs logic may vary** इसलिए आपको ऊपर बताए गए मानों के अलावा **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._ जैसे मान भी आज़माने चाहिए।
-उदाहरण ([यहां](https://brycec.me/posts/corctf_2021_challenges) से) JSON डेटा को text/plain के रूप में भेजने का:
+उदाहरण (from [here](https://brycec.me/posts/corctf_2021_challenges)) JSON डेटा को text/plain के रूप में भेजने का:
```html