0x00 靶機信息
0x01 信息收集
使用nmap掃描靶機端口:
只開了兩個端口,直接訪問https://10.10.10.110,得到如下界面:
沒有進一步的暗示,再查看頁面源碼,得到如下兩個域名:
https://api.craft.htb/api/
https://gogs.craft.htb/
但是直接訪問是失敗的,因爲沒有dns的關係。
於是需要現在hosts文件下添加兩個域名並保存。
網站是craft cms搭建的。再分別訪問以上兩個網址:
這個是類似github的代碼託管倉庫,這裏存放了craft-api的開發代碼。
跟進查看,發現是flask開發的。
0x02 Port22嘗試:
使用hydra進行ssh爆破測試
爆破無果
0x03 Port443嘗試:
0x03-1 代碼審計
下載Gogos裏面的代碼做審計。
在craft-api/api/endpoints/brew.py
的第43行有eval函數:
要觸發該eval函數需要訪問/brew/
後經過身份認證,之後取post中的json數據,而如果在json的abv
變量中輸入命令執行的語句,就可以執行命令。
而要通過認證,可以在craft_api/api/auth/endpoints/auth.py
中找到:
即在header中添加X-Craft-Api-Token
的值。值就是login認證的token
0x03-2 getshell
訪問https://10.10.10.110/api/
,先進行登陸認證操作:
這裏的登陸密碼需要從代碼倉庫的更新記錄中找到:
登陸成功後會返回toke值
之後在/brew
的api那塊選擇POST選項卡,然後在選項卡中的數據區域的abv變量處輸入payload:
payload可以參考
https://blog.csdn.net/u011721501/article/details/47298723
發送的數據包如下:
然後用nc監聽6909端口:
0x03-3 搜索
嘗試搜索user.txt和root.txt但都無果。查看當前目錄,跟代碼倉庫的差不多。
運行dbtest.py,發現返回了一個用戶信息:
修改dbtest.py,查看user表中的數據:
0x03-4 再訪代碼倉庫
從項目的開發者名單裏面發現有三個人,正好對應從數據庫中查詢出來的。
挨個賬號登陸,發現gilfoyle
這個賬戶下有個項目,而且還有ssh密鑰。
下載項目到本地,使用密鑰進行ssh登陸,但是一直失敗,仔細看了警告信息:
說明id_rsa的權限過高,使用命令chmod 0600 ~/.ssh/id_rsa
進行修改,然後再次ssh,使用原來的密碼就可以了。
登陸後查找user.txt,得到對應的flag信息
Root權限
這裏不能用sudo提權,困擾了很久,也看了別人的留言,最後注意到vault這個文件夾。
搜索vault,發現是一種用於在現代應用程序體系結構中安全地管理機密信息的流行工具。而且從泄漏的信息中找到secrets.sh可以看到:
#!/bin/bash
# set up vault secrets backend
vault secrets enable ssh
vault write ssh/roles/root_otp \
key_type=otp \
default_user=root \
cidr_list=0.0.0.0/0
使用命令:
vault write ssh/creds/root_otp ip=<靶機ip>
然後輸入keyd的值即可以root的身份登陸。
搜索root.txt即可獲得flag