<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
Eine Angriffstechnik namens XPath-Injection wird verwendet, um Anwendungen auszunutzen, die XPath (XML Path Language)-Abfragen basierend auf Benutzereingaben erstellen, um XML-Dokumente abzufragen oder zu navigieren.
Ausdrücke werden verwendet, um verschiedene Knoten in einem XML-Dokument auszuwählen. Diese Ausdrücke und ihre Beschreibungen sind wie folgt zusammengefasst:
- **bookstore**: Alle Knoten mit dem Namen "bookstore" werden ausgewählt.
- **/bookstore**: Das Wurzelelement "bookstore" wird ausgewählt. Es ist zu beachten, dass ein absoluter Pfad zu einem Element durch einen Pfad, der mit einem Schrägstrich (/) beginnt, dargestellt wird.
- **bookstore/book**: Alle Buchelemente, die Kinder von "bookstore" sind, werden ausgewählt.
- **//book**: Alle Buchelemente im Dokument werden unabhängig von ihrer Position ausgewählt.
- **bookstore//book**: Alle Buchelemente, die Nachkommen des Elements "bookstore" sind, werden unabhängig von ihrer Position unter dem Element "bookstore" ausgewählt.
- **//@lang**: Alle Attribute mit dem Namen "lang" werden ausgewählt.
- **/bookstore/book[1]**: Das erste Buchelement, das Kind des Elements "bookstore" ist, wird ausgewählt. Eine Lösung für IE-Versionen 5 bis 9, bei denen der erste Knoten als [0] indiziert wird, besteht darin, die SelectionLanguage über JavaScript auf XPath festzulegen.
- **/bookstore/book[last()]**: Das letzte Buchelement, das Kind des Elements "bookstore" ist, wird ausgewählt.
- **/bookstore/book[last()-1]**: Das vorletzte Buchelement, das Kind des Elements "bookstore" ist, wird ausgewählt.
XPath Injection ist eine Technik, bei der ein Angreifer bösartige XPath-Ausdrücke in eine Anwendung einschleust, um auf vertrauliche Informationen zuzugreifen. XPath ist eine Abfragesprache, die verwendet wird, um XML-Dokumente zu durchsuchen und zu filtern.
Um XPath Injection durchzuführen, muss der Angreifer eine Schwachstelle in der Anwendung finden, die es ihm ermöglicht, benutzerdefinierte XPath-Ausdrücke einzufügen. Dies kann beispielsweise durch unsichere Eingabevalidierung oder unzureichende Absicherung der Anwendung geschehen.
Sobald der Angreifer erfolgreich einen bösartigen XPath-Ausdruck in die Anwendung eingeschleust hat, kann er verschiedene Techniken verwenden, um auf vertrauliche Informationen zuzugreifen. Dazu gehören das Extrahieren von Daten aus der Datenbank, das Umgehen von Zugriffsbeschränkungen und das Ausführen von Remote-Code.
Um sich vor XPath Injection-Angriffen zu schützen, sollten Entwickler sicherstellen, dass alle Benutzereingaben ordnungsgemäß validiert und bereinigt werden, bevor sie in XPath-Ausdrücken verwendet werden. Darüber hinaus sollten Sicherheitsmechanismen wie Zugriffsbeschränkungen und Berechtigungsprüfungen implementiert werden, um unbefugten Zugriff auf vertrauliche Informationen zu verhindern.
XPath-Injektion kann verwendet werden, um das Schema einer Datenbank zu identifizieren und zu stehlen. Dies kann nützlich sein, um Informationen über die Datenbankstruktur zu erhalten und weitere Angriffe zu planen.
Um das Schema zu identifizieren, können Sie verschiedene Techniken verwenden:
1.**Blind XPath-Injektion**: Wenn Sie keine direkte Rückmeldung von der Anwendung erhalten, können Sie eine blinde XPath-Injektionstechnik verwenden. Durch das Ausnutzen von Fehlern in der Anwendung können Sie feststellen, ob bestimmte Bedingungen wahr oder falsch sind. Sie können beispielsweise versuchen, eine Abfrage zu erstellen, die immer wahr ist, um zu überprüfen, ob eine bestimmte Tabelle oder Spalte vorhanden ist.
Beispiel:
```plaintext
' or 1=1 or 'a'='a
```
2.**Error-Based XPath-Injektion**: Wenn die Anwendung Fehlermeldungen zurückgibt, können Sie versuchen, Fehler auszulösen, um Informationen über das Schema zu erhalten. Sie können beispielsweise versuchen, eine ungültige XPath-Abfrage einzufügen, um eine Fehlermeldung mit Informationen über die Datenbankstruktur zu erhalten.
3.**Union-Based XPath-Injektion**: Wenn die Anwendung UNION-Abfragen unterstützt, können Sie UNION-Abfragen verwenden, um Informationen aus anderen Tabellen abzurufen. Sie können beispielsweise versuchen, eine UNION-Abfrage einzufügen, um Informationen aus dem INFORMATION_SCHEMA abzurufen.
' UNION SELECT table_name FROM INFORMATION_SCHEMA.TABLES --
```
Sobald Sie das Schema identifiziert haben, können Sie weitere Angriffe planen, wie z.B. das Extrahieren von Daten aus der Datenbank oder das Durchführen von weiteren Injektionen, um auf vertrauliche Informationen zuzugreifen.
Null-Injektion ist eine Technik, bei der XPath-Injektion ausgenutzt wird, um Informationen aus einer Datenbank abzurufen, indem eine Bedingung erzeugt wird, die immer wahr ist. Dies wird erreicht, indem der XPath-Ausdruck so manipuliert wird, dass er immer auf den Wert "null" ausgewertet wird.
Angenommen, wir haben eine Anwendung, die Benutzern ermöglicht, nach Produkten zu suchen, indem sie den Produktnamen eingeben. Die Anwendung verwendet XPath, um die Datenbankabfragen durchzuführen. Der XPath-Ausdruck sieht folgendermaßen aus:
Der Wert "USER_INPUT" wird durch den vom Benutzer eingegebenen Produktnamen ersetzt. Wenn der Benutzer jedoch den Wert "null" eingibt, wird der XPath-Ausdruck zu:
```xml
//products/product[name=null]
```
Da der Vergleich mit "null" immer wahr ist, werden alle Produkte in der Datenbank zurückgegeben.
#### **Ausnutzung der Null-Injektion**
Um die Null-Injektion auszunutzen, können wir den Wert "null" in den Produktnamen eingeben. Dies kann auf verschiedene Arten erfolgen, je nachdem, wie die Anwendung die Benutzereingabe verarbeitet.
Ein Beispiel für eine mögliche Eingabe wäre:
```
' or name=null or 'a'='a
```
Der XPath-Ausdruck würde dann zu:
```xml
//products/product[name='' or name=null or 'a'='a']
Um die Null-Injektion zu verhindern, sollten die Benutzereingaben immer ordnungsgemäß validiert und bereinigt werden. Es ist wichtig, die Eingaben auf unerwünschte Zeichen oder Muster zu überprüfen und sicherzustellen, dass nur gültige Werte akzeptiert werden.
Darüber hinaus sollte die Anwendung den Zugriff auf die Datenbank auf das erforderliche Minimum beschränken und keine sensiblen Informationen preisgeben. Es ist auch ratsam, die Verwendung von XPath für Datenbankabfragen zu vermeiden und stattdessen sichere Alternativen wie Prepared Statements oder ORM-Frameworks zu verwenden.
```
Username: ' or 1]%00
```
### **Doppeltes ODER in Benutzername oder im Passwort** (gültig mit nur einem verwundbaren Feld)
### **Länge eines Werts ermitteln und durch Vergleiche extrahieren:**
XPath-Injektion kann verwendet werden, um die Länge eines bestimmten Werts in einer Datenbank zu ermitteln und ihn durch Vergleiche schrittweise zu extrahieren. Dieser Ansatz wird als "Blind Exploitation" bezeichnet, da der Angreifer keine direkte Rückmeldung über den extrahierten Wert erhält.
Um die Länge eines Werts zu ermitteln, kann der Angreifer eine XPath-Abfrage verwenden, die den zu überprüfenden Wert enthält. Wenn der Wert länger ist als der Vergleichswert, gibt die Abfrage "true" zurück, andernfalls "false". Durch schrittweises Erhöhen des Vergleichswerts kann der Angreifer die Länge des Werts ermitteln.
Ein Beispiel für eine solche Abfrage könnte wie folgt aussehen:
```plaintext
' or string-length(/path/to/value) > <length> or '
```
Der Angreifer kann den `<length>`-Parameter schrittweise erhöhen, bis die Abfrage "true" zurückgibt. Auf diese Weise kann der Angreifer die Länge des Werts ermitteln.
Sobald die Länge bekannt ist, kann der Angreifer den Wert schrittweise extrahieren, indem er jeden einzelnen Zeichenwert überprüft. Dazu kann der Angreifer eine ähnliche XPath-Abfrage verwenden, die den Zeichenwert an einer bestimmten Position überprüft.
' or substring(/path/to/value, <position>, 1) = '<character>' or '
```
Der Angreifer kann den `<position>`-Parameter schrittweise erhöhen und jeden möglichen Zeichenwert überprüfen, bis die Abfrage "true" zurückgibt. Auf diese Weise kann der Angreifer den Wert schrittweise extrahieren.
Es ist wichtig zu beachten, dass XPath-Injektionen sorgfältig durchgeführt werden sollten, um unerwünschte Auswirkungen auf das Zielsystem zu vermeiden. Es wird empfohlen, diese Technik nur in einer kontrollierten Umgebung oder mit ausdrücklicher Zustimmung des Eigentümers des Zielsystems anzuwenden.
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
```
### Datei lesen
XPath Injection kann verwendet werden, um Dateien auf dem Server zu lesen. Dies kann nützlich sein, um vertrauliche Informationen zu extrahieren oder um die Funktionalität der Anwendung zu analysieren.
Um eine Datei zu lesen, kann die `document()`-Funktion in Verbindung mit XPath-Ausdrücken verwendet werden. Der XPath-Ausdruck wird in der Regel in einem Eingabefeld oder einer URL platziert, das/ die an den Server gesendet wird.
Ein Beispiel für einen XPath-Injektionsangriff, um eine Datei zu lesen, könnte wie folgt aussehen:
```plaintext
' or 1=1 or 'a'='a' or document('/etc/passwd') or '
In diesem Beispiel wird der XPath-Ausdruck `' or 1=1 or 'a'='a' or document('/etc/passwd') or '` in das Eingabefeld oder die URL eingefügt. Dadurch wird der Server dazu gebracht, die Datei `/etc/passwd` zu lesen und die Informationen zurückzugeben.
Es ist wichtig zu beachten, dass XPath-Injektionen nicht immer erfolgreich sind, da sie von verschiedenen Faktoren abhängen, wie z.B. der Konfiguration des Servers und der Art der Anwendung. Es ist daher ratsam, verschiedene Techniken auszuprobieren und die Ergebnisse zu überprüfen, um festzustellen, ob eine XPath-Injektion möglich ist.
Out-of-Band (OOB) Exploitation ist eine Technik, bei der XPath-Injection verwendet wird, um Informationen aus einer Datenbank abzurufen und sie an einen externen Server zu senden. Dies ermöglicht es einem Angreifer, vertrauliche Daten zu extrahieren, ohne direkt auf die Datenbank zugreifen zu müssen.
### OOB-Exploitation-Methoden
Es gibt verschiedene Methoden, um OOB-Exploitation durchzuführen:
1. DNS-Exfiltration: Der Angreifer injiziert eine speziell gestaltete XPath-Anweisung, die dazu führt, dass die Daten an einen DNS-Server gesendet werden, den der Angreifer kontrolliert. Der Angreifer kann dann die DNS-Anfragen überwachen und die extrahierten Daten abrufen.
2. HTTP-Exfiltration: Der Angreifer injiziert eine XPath-Anweisung, die dazu führt, dass die Daten an einen externen Webserver gesendet werden, den der Angreifer kontrolliert. Der Angreifer kann dann die HTTP-Anfragen überwachen und die extrahierten Daten abrufen.
3. SMTP-Exfiltration: Der Angreifer injiziert eine XPath-Anweisung, die dazu führt, dass die Daten per E-Mail an eine von ihm kontrollierte Adresse gesendet werden. Der Angreifer kann dann die E-Mails überwachen und die extrahierten Daten abrufen.
### Vorteile der OOB-Exploitation
OOB-Exploitation bietet mehrere Vorteile gegenüber herkömmlichen In-Band-Exploitationstechniken:
- Es umgeht möglicherweise vorhandene Sicherheitsmaßnahmen wie Firewalls oder Intrusion Detection Systems (IDS).
- Es ermöglicht die Extraktion von Daten über verschiedene Protokolle wie DNS, HTTP oder SMTP.
### Gegenmaßnahmen
Um sich vor OOB-Exploitation zu schützen, sollten folgende Maßnahmen ergriffen werden:
- Eingabevalidierung: Implementieren Sie eine strenge Eingabevalidierung, um potenziell schädliche Eingaben zu verhindern.
- Parameterisierte Abfragen: Verwenden Sie parameterisierte Abfragen, um die Möglichkeit von Injection-Angriffen zu verringern.
- Aktualisierte Software: Stellen Sie sicher, dass alle verwendeten Softwarekomponenten auf dem neuesten Stand sind, um bekannte Sicherheitslücken zu schließen.
- Sicherheitsbewusstsein: Schulen Sie Ihre Entwickler und Administratoren in sicheren Codierungspraktiken und sensibilisieren Sie sie für die Risiken von OOB-Exploitation.
- Überwachung: Überwachen Sie den Netzwerkverkehr und die Protokolle auf verdächtige Aktivitäten, um Angriffe frühzeitig zu erkennen und darauf reagieren zu können.
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) **und** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **GitHub-Repositories senden.**