Python武器库开发-武器库篇之Mongodb未授权漏洞扫描器(五十六)

Python武器库开发-武器库篇之Mongodb未授权漏洞扫描器(五十六)

MongoDB 未授权访问漏洞简介以及危害

MongoDB是一款非常受欢迎的开源NoSQL数据库,广泛应用于各种Web应用和移动应用中。然而,由于默认配置的不当或者管理员的疏忽,导致不少MongoDB数据库处于未授权访问的状态,从而产生了潜在的安全风险。

未授权访问漏洞指的是在MongoDB数据库中,没有设置正确的访问控制权限,导致攻击者可以直接访问数据库,获取或者修改敏感数据。这种漏洞的出现主要有以下几个原因:

  1. 默认配置问题:MongoDB在默认情况下是没有开启身份验证机制的,这就意味着任何人都可以直接连接数据库并执行操作。

  2. 管理员疏忽:在配置MongoDB时,管理员没有设置访问控制权限,或者设置了弱密码,容易被攻击者猜测或者暴力破解。

  3. 数据库暴露:有些MongoDB数据库直接暴露在公网上,没有进行网络隔离或者访问限制,这样攻击者可以直接访问数据库。

攻击者可以通过扫描公网IP或者进行端口强行连接的方式,探测MongoDB数据库是否存在未授权访问漏洞。一旦发现漏洞,攻击者可以通过数据库的各种操作命令,获取、修改或者删除数据库中的数据。这对于企业来说是非常危险的,可能导致重要数据的泄露或者篡改。

开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端⼝⽆需密码对数据库任意操作(增、删、改、查高危动作)而且可以远程访问数据库。

造成未授权访问的根本原因就在于启动 Mongodb 的时候未设置 --auth ,也很少会有人会给数据库添加上账号密码(默认空口令),使⽤默认空口令这将导致恶意攻击者无需进行账号认证就可以登陆到数据服务器。

环境搭建

主机 IP
kali 192.168.41.132

在这⾥我们使⽤kali搭建Mongodb未授权环境,在Kali Linux上安装MongoDB并配置为未授权访问有以下步骤:

  1. 打开终端并执行以下命令以安装MongoDB:
python 复制代码
sudo apt update
sudo apt install mongodb
  1. 安装完成后,MongoDB会自动启动。您可以使用以下命令检查MongoDB是否正在运行:
python 复制代码
sudo systemctl status mongodb
  1. 确认MongoDB正在运行后,打开配置文件:
python 复制代码
sudo nano /etc/mongodb.conf

在配置文件中找到bind_ip行并将其注释或将其更改为0.0.0.0,这将允许从任何IP地址访问MongoDB。

  1. 然后保存并关闭配置文件,在nano中保存并关闭配置文件的方法是按下Ctrl+O组合键,然后按下Enter键来保存文件,最后按下Ctrl+X组合键来关闭nano编辑器。然后重新启动MongoDB服务:
python 复制代码
sudo systemctl restart mongodb

现在,MongoDB已经配置为允许未授权访问。

实验代码

首先,请确保已经安装了pymongo库,可以使用以下命令进行安装:

python 复制代码
pip install pymongo

接下来我们用python写一段测试Mongodb未授权漏洞的代码,代码内容如下:

python 复制代码
import pymongo

# 设置MongoDB连接参数
host = "host"  # MongoDB的IP地址
port = 27017  # MongoDB的端口

# 尝试连接MongoDB
try:
    client = pymongo.MongoClient(host, port, serverSelectionTimeoutMS=2000)
    db = client.admin
    # 使用isMaster命令检查是否授权访问
    response = db.command('ismaster')
    if response['ok'] == 1:
        print("MongoDB 未授权访问漏洞存在")
    else:
        print("MongoDB 未授权访问漏洞不存在")
except pymongo.errors.ServerSelectionTimeoutError as err:
    print("MongoDB连接失败:", err)

在代码中,我们使用pymongo库连接到MongoDB实例,并尝试执行isMaster命令来检查是否授权访问。如果成功执行,说明存在未授权访问漏洞,否则说明不存在此漏洞。

这段代码是用来检测MongoDB是否存在未授权访问漏洞的。

首先,通过import pymongo导入了pymongo库,这是一个用于连接和操作MongoDB数据库的Python库。

然后,定义了MongoDB的连接参数hostport,分别表示MongoDB的IP地址和端口。

接下来,使用pymongo.MongoClient方法尝试连接MongoDB,其中传入了hostport以及serverSelectionTimeoutMS=2000参数。serverSelectionTimeoutMS参数用于设置服务器选择超时时间,如果在指定时间内无法连接到MongoDB,则会抛出pymongo.errors.ServerSelectionTimeoutError异常。

如果成功连接到MongoDB,会将连接对象赋值给client变量,然后选择admin数据库并将其赋值给db变量。

然后,使用db.command('ismaster')命令检查是否授权访问。ismaster命令用于返回MongoDB服务器的状态信息,如果返回的字典中ok键的值为1,则表示成功连接并授权访问;如果ok键的值不为1,则表示存在未授权访问漏洞。

最后,根据返回的状态信息输出相应的结果,如果ok值为1,则表示存在未授权访问漏洞,否则表示不存在未授权访问漏洞。

如果在连接过程中出现了pymongo.errors.ServerSelectionTimeoutError异常,则说明连接失败,会输出连接失败的信息。

运行效果

如图我们的代码成功测试出了目标服务器上存在Mongodb未授权漏洞。

相关推荐
弱冠少年26 分钟前
websockets库使用(基于Python)
开发语言·python·numpy
技术无疆1 小时前
【Python】Streamlit:为数据科学与机器学习打造的简易应用框架
开发语言·人工智能·python·深度学习·神经网络·机器学习·数据挖掘
羊小猪~~1 小时前
机器学习/数据分析--用通俗语言讲解时间序列自回归(AR)模型,并用其预测天气,拟合度98%+
人工智能·python·机器学习·数据挖掘·数据分析·回归·时序数据库
Hugo_McQueen1 小时前
pWnos1.0 靶机渗透 (Perl CGI 的反弹 shell 利用)
linux·服务器·网络安全
qq_273900231 小时前
解析TMalign文本文件中的转换矩阵
python·生物信息学
fishmemory7sec1 小时前
Koa2项目实战2(路由管理、项目结构优化)
数据库·mongodb·koa
阿华的代码王国2 小时前
【JavaEE】——文件IO的应用
开发语言·python
电饭叔3 小时前
《python语言程序设计》2018版第8章19题几何Rectangle2D类(下)-头疼的几何和数学
开发语言·python
学习溢出3 小时前
深入了解 net user 命令:上一次是谁登录的?
windows·网络安全·系统安全
程序猿小D3 小时前
第二百六十七节 JPA教程 - JPA查询AND条件示例
java·开发语言·前端·数据库·windows·python·jpa