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未授权漏洞。

相关推荐
算法小白(真小白)1 小时前
低代码软件搭建自学第二天——构建拖拽功能
python·低代码·pyqt
唐小旭2 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python
007php0072 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程
Chinese Red Guest2 小时前
python
开发语言·python·pygame
骑个小蜗牛2 小时前
Python 标准库:string——字符串操作
python
蜜獾云4 小时前
linux firewalld 命令详解
linux·运维·服务器·网络·windows·网络安全·firewalld
黄公子学安全5 小时前
Java的基础概念(一)
java·开发语言·python
程序员一诺5 小时前
【Python使用】嘿马python高级进阶全体系教程第10篇:静态Web服务器-返回固定页面数据,1. 开发自己的静态Web服务器【附代码文档】
后端·python