简介

NoSQLMap是一款Python编写的开源工具,常用于审计NoSQL数据库中的自动注入攻击、为了从数据库中揭露数据而利用NoSQL数据库或使用NoSQL的Web应用的默认配置弱点。

它这样命名是为了几年Bernardo Damele和Miroslav创作的流行的SQL工具SQLmap,它的设计理念来源于Ming Chow在Defcon中发表的很棒的演讲-”Abusing NoSQL Databases”。该工具目前主要应用于MongoDB,但是它在未来的版本中还会支持其他基于NoSQL的平台,如CouchDB, Redis和Cassandra等。当前该项目的目的是为简单攻击MongoDB服务器和一些web应用提供渗透测试工具,以及用通过概念攻击来证明某NoSQL应用不会受到SQL注入。

功能

自动化MongoDB和CouchDB数据库枚举和克隆攻击。

通过MongoDB web应用提取数据库名称、用户和哈希密码。

为使用默认访问和枚举版本的MongoDB和CouchDB数据库扫描子网或IP列表。

字典攻击、暴力破解恢复的MongoDB和CouchDB的哈希密码。

针对MongoClient的PHP应用程序参数注入攻击,返回所有数据库中的记录。

Javascript函数变量转移和任意代码注入,返回所有数据库中的记录。

类似于盲SQL注入的用于验证无来自应用程序的反馈的Javascript注入漏洞的时序攻击。

更多功能敬请期待!

发布历史

0.6 builds(在github社区简历完整版本,非常感谢众位优秀的贡献者完善功能和代码!)

Web应用攻击,增加支持发送用户提供的headers(感谢gpapakyriakopoulos)

Web应用攻击,迁移所有来自urllib到rullib2的requests到 support header input(感谢 gpapakyriakopoulos)

修Bug,没有提供GET方法的url参数将会导致AttributeError异常(感谢gpapakyriakopoulos)

接口,纠正输出中的拼写错误(感谢akash0x53)

设置,增加新的安装过程,该过程使用Python的setuptool而不依赖BASH,并且它能够成功的独立安装(感谢akash0x53)

实现第二阶段代码清理,剥离尾部空格(感谢akash0x53)

0.5 builds:

V0.5(主要版本):

Web应用攻击,增加针对PHP/ExpressJS应用的$gt no value攻击。感谢 Petko D. Petkov!

Web应用攻击,纠正影响PHP和ExpressJS关联数组的攻击的标签。

一般,代码清理项目,每个NoSQL平台都是一个免费的可以被import其他代码的基于Python的模块。

扫描器,增加支持CouchDB扫描及版本记录。

网络攻击,增加支持CouchDB网络层,以及包括数据库复制和密码破解的访问攻击。

一般,为主菜单增加更改平台以切换NoSQL平台和自动设置的正确选项。

0.4 builds:

v0.4b:

修Bug,修复导致网络攻击认证无法使用的问题。

v0.4a:

为启动和异常处理实现了更好的Python结构。

v0.4(GIANT主要版本):

Web应用攻击,增加HTTPS支持。

Web应用攻击,为检测和报告用于减少误报并提供额外的针对注入的监视NoSQL错误增加逻辑。

一般,代码清理和组织项目的第二阶段。

MongoDB扫描器,扫描器现在记录服务器上检测到的MongoDB的版本。

MongoDB扫描器,来自结果/目标列表的飞默认访问模式的过滤的MongoDB目标。

MongoDB扫描器,为版本大规模提速设置socket超时。

MongoDB扫描器,在尝试简历MongoDB连接增加ping主机的能力。

MongoDB扫描器,增加保存扫描器结果到CSV文件的选项。

密码破解,增加暴力破解。

网络攻击,为了直接访问需要的攻击而不是通过yes/no菜单获取所有攻击而更改对菜单驱动的界面攻击。

网络攻击,增加自动化特使来检查、查看是否MongoDB服务器需要凭据和提示,如果需要凭据则不用要求用户指定。

0.3 builds:

v0.31:

为yes/no输入处理修改代码。

修复了当web应用不返回HTTP200响应时的漏洞。

v0.3(主版本):

为使用POST方法的请求的注入测试增加测试版本支持。

在使用MongoDB(MongoDB版本<2.4)的脆弱的web应用上增加提取数据库名称、数据库用户名和密码哈希的功能。

从注入结果中获取一般的MongoDB版本检测。

增加了针对不是运行在默认端口27017的MongoDB服务器的功能。

增加用户输入合法IP地址验证。

增加获取详细输出或默认标准输出的切换。

UI清理和改进。

增加使用CTRL+C清理退出。

Bug修复:解决无法由主机名指定目标的bug。

Bug修复:解决如果指定的凭据无法枚举服务器时,尝试枚举GridFS破解。

Bug修复:解决如果指定的凭据无法枚举服务器时,尝试窃取数据库破解。

Bug修复:在没有目的IP被设置为数据库克隆的情况下增加处理方法。

使用更简单的逻辑增强功能检查结果。

实现第一阶段大规模代码清理。

0.2 builds:

v0.2(主要版本!):

增加子网或IP列表的完整扫描获取默认MongoDB访问,增加直接发送目标到NoSQLMap功能。

增加针对存储的MongoDB密码哈希的字典攻击。

在Debian和红冒系统中增加一个安装shell脚本来自动操作依赖安装。

增加存储在GridFS中的文件枚举。

增加解析来自Burp Suite存储的HTTP请求来填充选项。

增加数据库复制通知,但是文本索引无法被移动。

修正一些小的口错误,改进UI,如执行模块时的标题。

咋想代码清理及bug修复。

0.1 builds:

v0.15b,当解析URL/参数且选项设置不正确时会抛出异常,此时增加错误处理。

v0.15a,修正一个导致web应用在特定环境崩溃的bug;修复会导致额外的&被添加到.this注入URL末尾的bug。

v0.15,增加Mongo认证支持;增加集合名称枚举;增加提取数据库用户、角色和密码哈希;修复会导致攻击者本地IP无法加载的bug。

v0.1(主要版本):

增加不同于注入的攻击以返回所有数据库记录。

增加基于类似于传统盲SQL注入攻击的计时。

输出结果可以被储存成一个文件。

URL参数选择部分的UI改进。

增加加载和保存攻击选项功能。

增加选择输入随机参数格式功能(如,字母数字、仅字母、仅数字、电子邮件地址)。

修复当web应用无法回应基本请求的崩溃。

0.0 builds:

v0.09,改进输出;修复整数注入测试的bug;增加一些代码注释。

v0.08,修复破损的针对Mongo的Metasploit漏洞。

v0.08,一些错误处理和bug修复;改进选项菜单的UI。

v0.06,首次公开发行。

未来发展

支持更多平台

支持更复杂的攻击

更好的攻击利用

优化代码

系统要求

在Debian或者红帽系统上,使用root权限运行setup.sh脚本,自动安装NoSQLMap依赖。

不同的使用的功能:

Metasploit框架;

拥有PyMongo的Python;

httplib2;

现有的urllib。

一个本地默认MongoDB实例对数据库进行复制。点击这里查看安装说明。

还有一些需要的常见的Python库。你需要的东西可能有所不同,所以请检查脚本。

安装

sudo python setup.py install

用法

NoSQLMap

NoSQLMap使用一个菜单建立攻击。当开始NoSQLMap时,你会看到主菜单:

1-Set options (do this first) 2-NoSQL DB Access Attacks
3-NoSQL Web App attacks
4-Scan for Anonymous MongoDB Access
x-Exit
1-设置选项(第一步操作)
2-NoSQL DB 访问攻击
3-NoSQL Web应用攻击
4-扫描匿名MongoDB访问
x-退出

菜单说明

1.设置目标host/IP-目标web服务器(如www.google.com)或者任何你想要攻击的MongoDB服务器。

2.设置web应用端口-如果一个web应用成为目标,为web应用设置TCP端口。

3.设置URI路径-部分URI包含页面名称及任何非主机名称的参数(如 /app/acct.php?acctid=102)。

4.设置HTTP请求方法(GET/POST)-设置请求方法为GET或POST;现在只能使用GET方法但是后续会增加POST方法。

5.设置我的本地Mongo/Shell IP-如果直接攻击一个MongoDB实例,设置这个选项到目标Mongo安装的IP来复制受害者服务器或打开Meterpreter shell。

6.设置shell监听端口-如果开放Meterpreter shell就会指定端口。

7.加载选项文件-加载一个之前1-6中保存的设置。

8.从保存的Burp请求加载选择-解析来自Burp Suite的已保存的请求,并填充Web应用选项。

9.保存选项文件-为未来使用保存1-6中的设置。

x.返回主菜单-使用这个选项开始攻击。

github地址:https://github.com/tcstool/NoSQLMap