Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et automatiser facilement des flux de travail alimentés par les outils communautaires les plus avancés au monde.\
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Les bases de données NoSQL offrent des restrictions de cohérence plus lâches que les bases de données SQL traditionnelles. En nécessitant moins de contraintes relationnelles et de vérifications de cohérence, les bases de données NoSQL offrent souvent des avantages de performance et de mise à l'échelle. Cependant, ces bases de données sont toujours potentiellement vulnérables aux attaques par injection, même si elles n'utilisent pas la syntaxe SQL traditionnelle.
MongoDB est une base de données NoSQL très populaire. Contrairement aux bases de données SQL traditionnelles, MongoDB stocke les données sous forme de documents JSON. Les injections NoSQL sont similaires aux injections SQL, mais elles exploitent les différences de syntaxe et de structure de MongoDB.
#### **Injection basique**
La technique d'injection de base consiste à ajouter une clé supplémentaire à la requête JSON. Par exemple, si la requête est la suivante :
Cela renverra tous les documents où le champ "password" n'est pas vide.
#### **Injection d'opérateurs**
MongoDB utilise des opérateurs pour effectuer des opérations sur les données. Les injections d'opérateurs consistent à utiliser des opérateurs malveillants pour contourner les contrôles d'accès. Par exemple, si la requête est la suivante :
```
db.users.find({username: "admin"})
```
Nous pouvons utiliser l'opérateur "$regex" pour contourner la vérification du nom d'utilisateur :
Cela renverra tous les documents où le champ "password" n'est pas vide, indépendamment du nom d'utilisateur.
#### **Injection de code**
MongoDB prend en charge l'exécution de code côté serveur à l'aide de la fonction "eval". Les injections de code consistent à injecter du code malveillant dans la requête pour qu'il soit exécuté côté serveur. Par exemple, si la requête est la suivante :
```
db.users.find({username: "admin"})
```
Nous pouvons utiliser la fonction "eval" pour exécuter du code malveillant :
L'injection NoSQL est similaire à l'injection SQL, mais elle est utilisée pour les bases de données NoSQL telles que MongoDB. Les attaques NoSQL Injection sont souvent plus difficiles à exploiter que les attaques SQL Injection, car les bases de données NoSQL n'utilisent pas de langage de requête structuré tel que SQL. Cependant, les attaquants peuvent toujours exploiter les vulnérabilités de sécurité dans les applications qui utilisent des bases de données NoSQL pour extraire des informations sensibles ou effectuer des actions malveillantes.
### Syntaxe de base
La syntaxe de base de l'injection NoSQL est similaire à celle de l'injection SQL. Les attaquants peuvent utiliser des caractères spéciaux pour modifier la requête d'origine et extraire des informations sensibles. Par exemple, si une application utilise MongoDB pour stocker des informations d'utilisateur, un attaquant peut utiliser la syntaxe suivante pour extraire toutes les informations d'utilisateur de la base de données :
```
username: {$ne: ''}, password: {$ne: ''}
```
Cette syntaxe utilise l'opérateur `$ne` pour extraire toutes les informations d'utilisateur qui ne sont pas vides. L'attaquant peut également utiliser d'autres opérateurs tels que `$gt`, `$lt`, `$gte`, `$lte`, `$regex`, etc. pour extraire des informations sensibles.
### Contre-mesures
Les contre-mesures suivantes peuvent être prises pour prévenir les attaques NoSQL Injection :
- Utiliser des bibliothèques de requêtes NoSQL sécurisées qui échappent automatiquement les caractères spéciaux.
- Valider et filtrer les entrées utilisateur pour empêcher les caractères spéciaux d'être utilisés dans les requêtes.
- Utiliser des rôles d'utilisateur et des autorisations pour limiter l'accès aux bases de données et aux informations sensibles.
- Mettre à jour régulièrement les bibliothèques et les frameworks utilisés pour éviter les vulnérabilités connues.
En utilisant l'opérateur **$func** de la bibliothèque [MongoLite](https://github.com/agentejo/cockpit/tree/0.11.1/lib/MongoLite) (utilisée par défaut), il est possible d'exécuter une fonction arbitraire comme dans [ce rapport](https://swarm.ptsecurity.com/rce-cockpit-cms/).
Il est possible d'utiliser [**$lookup**](https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/) pour obtenir des informations à partir d'une collection différente. Dans l'exemple suivant, nous lisons à partir d'une **collection différente** appelée **`users`** et obtenons les **résultats de toutes les entrées** avec un mot de passe correspondant à un joker.
Blind NoSQL injection is a type of injection attack that targets NoSQL databases. It is similar to blind SQL injection, but instead of targeting SQL databases, it targets NoSQL databases. The attack is called "blind" because the attacker does not receive any error messages or other feedback from the database. This makes it more difficult to detect and exploit.
L'injection NoSQL aveugle est un type d'attaque par injection qui cible les bases de données NoSQL. Elle est similaire à l'injection SQL aveugle, mais au lieu de cibler les bases de données SQL, elle cible les bases de données NoSQL. L'attaque est appelée "aveugle" car l'attaquant ne reçoit aucun message d'erreur ou autre retour d'information de la base de données. Cela rend plus difficile la détection et l'exploitation de l'attaque.
Boolean-based blind NoSQL injection is a technique that uses boolean-based queries to extract information from a NoSQL database. The attacker sends a query to the database that will return either true or false, depending on whether the query is successful or not. By sending a series of queries, the attacker can extract information from the database.
L'injection NoSQL aveugle basée sur des booléens est une technique qui utilise des requêtes basées sur des booléens pour extraire des informations d'une base de données NoSQL. L'attaquant envoie une requête à la base de données qui renverra soit vrai, soit faux, en fonction de la réussite ou non de la requête. En envoyant une série de requêtes, l'attaquant peut extraire des informations de la base de données.
Time-based blind NoSQL injection is a technique that uses time delays to extract information from a NoSQL database. The attacker sends a query to the database that will cause a time delay if the query is successful. By measuring the time it takes for the database to respond, the attacker can extract information from the database.
L'injection NoSQL aveugle basée sur le temps est une technique qui utilise des délais de temps pour extraire des informations d'une base de données NoSQL. L'attaquant envoie une requête à la base de données qui provoquera un délai de temps si la requête est réussie. En mesurant le temps qu'il faut à la base de données pour répondre, l'attaquant peut extraire des informations de la base de données.
Les injections NoSQL sont souvent utilisées pour attaquer les bases de données MongoDB. Voici quelques exemples de charges utiles pour les injections NoSQL dans MongoDB:
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et **automatiser facilement des workflows** alimentés par les outils communautaires les plus avancés au monde.\