Herkese merhabalar, uzun süredir writeup vs yazmıyordum. Okuldaki sınav dönemi, projelerin verilmesi vs. sebeplerden dolayı çok yoğunduk ancak nihayet tatil geldi ve siber güvenlik için çalışma zamanı geldi. Bugün yine basit bir makine olan btrsys1'i çözdüm ve kısaca anlatmaya çalışacağım.
Makineyi vulnhub üzerinden indiriyoruz.(https://www.vulnhub.com/entry/btrsys-v1,195/)
Ardından virtualboxa ekleyip network ayarlamasını yapıyoruz.Ben k*li ile kurban makineyi aynı nat networkde kullandım. Ardından bulunduğunuz ip aralığına nmap taraması yaparak makinenin ip adresini bulabilirsiniz.
Her zamanki gibi ilk olarak nmap taraması yaparak ne var ne yok öğrenmeye çalışıyoruz.
Görüldüğü gibi bize 3 adet porttan sonuç döndü. 21. portta ftp çalışıyormuş. ftp ile bağlanmayı denedim bi şey bulamadım.
Baktık oradan bize ekmek çıkmayacak, 80 portuna bakıyoruz.(Neden 22 deki ssh'a bakmıyoruz diyen vardır, elimizde herhangi bir veri yok ki ssh bağlantısı kurmaya çalışalım 🙂 80 portunda http çalışıyor. Tarayıcıdan gidip bakıyoruz ne varmış diye. Bizi boş bir anasayfa karşılıyor, kaynak kodunda da bir şey yok 🙁
Başka sayfalar bulmak umuduyla dirb ve nikto ile tarama yapıyoruz. Normalde önceki yazılarda sadece dirb ile tarama yapmıştım ve işimize yaramıştı ancak bu sefer nikto da kullandım, dirb herhangi bir login vs bulamayınca nikto da denedim belki bulur başka bir şeyler diye ve buldu da 😗
Dirb ile bir uploads dizini bulduk, nikto ile de login.php ve config.php sayfaları bulduk. Hemen gidip login sayfasına dalıyoruz.
Bize böyle bir login sayfası geldi. Belki bir şeyler çıkar diyerekten kaynak kodlarına bakıyoruz.
Kaynak kodda login ekranından alınan inputu kontrol ederken bir fonksiyon çağırıyor ve bu fonksiyona göre kullancıı adında "@" işaretinden sonra "btrisk.com" ibaresi gelmesi gerektiğini anlıyoruz.(Yani ben öyle anladım, yanlışsam düzeltin lütfen 🙂 Ben önce internetten bir sql injection login örneği alıp denedim ancak login olduktan sonra açılan sayfada yani personel.php de herhangi bir bilgi göremedim.
Ancak ardından istenilen şekilde bir giriş yaptığımızda beklenen sayfayı görüyoruz. username yazarken sql şartının ardından ilgili ibareyi yazıp deniyoruz.
Görüldüğü gibi dosya yüklemeli bir ekran bizi karşıladı. Oradaki revshell dosyasına birazdan geleceğiz, orada ss almayı unutmuşum da bunu koydum artık 😊 Gelen ekranda kişiler ve biraz bilgi vs. var ancak bizi ilgilendiren bölüm dosya yükleme ekranı. Buradan reverse shell almaya çalışacağız. Ancak burada şöyle bir durum var ki upload için sadece png,jpg ve gif iznimiz var.
Bunu aşmaya çalışacağız. Öncelikle her zamanki gibi pentestmonkeyden (https://github.com/pentestmonkey/php-reverse-shell) reverse shell için kullanacağımız kodu kopyalayıp ip bölümüne kendi ip adresimizi ve port değişkenine de dinlemek istediğimiz portu yazıyoruz. Ben 6666 yazdım. Ardından bu php dosyasını karşı tarafa jpg olarak yedirmek lazım, bunu yapmak için dosya adını revshell.php.jpg yapıp upload ettim ve ilgili jpg dosyasına tarayıcıdan gidip netcat ile de 6666. portu dinledim fakat bir sonuç alamadım. Ardından bu dosya uzantısını burp ile değiştirip yollamayı denedim. Tarayıcının proxy ayarlarını burpsuite ayarlarına göre ayarlayıp upload butonuna basıp burpsuitte intruder ile işlem yapıyoruz.
Altta ufak yazıda görülen dosya isminin sonundaki ".jpg" uzantısını silip forward diyoruz ve dosyamız mis gibi yükleniyor 🙂
Ardından netcat ile 6666 portunu dinliyoruz ve tarayıcıdan uploads/revshell.php adresini ziyaret ediyoruz ve nur topu gibi bir shell almış oluyoruz.
Shell aldık ama root değiliz, privilage escalation denilen olayı yani yetki yükseltmeyi yapmak için sistemi didiklemeye başlıyoruz. Önce bash shell için kısa bir python kodu çalıştırarak bashe geçiş yapıyoruz.
Ben önce cron dosyalarına baktım ancak pek bi şey anlamadım daha doğrusu bulamadım. Zamanlanmış görevler ile de root alanlar olmuş onların linkini de koyacağım aşağıya. Ardından etc/passwd dosyasına bakınca gördük ki mysql varmış sistemde.
Diğer kullanıcılar ile ssh denemesi vs yapılabilir belki oradan da bir şeyler çıkar ancak uzun iş gibi geldi bana. Şimdi gidip var/www/html dizininde config dosyasına işimize yarayacak şifre vs var mı diye bakıyoruz ve orada bizi bir username ve password karşılıyor.
User:root, parolası da "toor"muş.Yanda yazan "deneme" ise ilgili veri tabanının ismi. Hemen mysql ile bağlanmayı deniyoruz. ( Ben de şuradan öğrendim nasıl yapıldığını: https://alvinalexander.com/blog/post/mysql/mysql-show-fields-schema-of-database-table )
Önce içerideki databaseleri listeliyoruz.
Görüldüğü gibi deneme isimli database varmış. Bunu "use deneme" komutu ile kullan dedikten sonra içerisindeki tabloları listeleyeceğiz.
User isimli tablo geldi, bu tablodaki verileri görmek için basit bir sql komutu yazacağız.(Blogdaki sql yazısına bakabilrisiniz https://sh4d0wless.blogspot.com/2019/10/sql-nedir-temel-sql-komutlaralterdropse.html )
Vee bize şifreler geldi. Hemen root olmak için gidip deniyoruz.
Root olduk 😚.
Bu yazıda faydalandığım kaynaklar ve okumanızı tavsiye ettiğim writeuplar şu şekilde
+https://sumeyyekolemen.github.io/2018/08/BTRSys-v1
+https://www.mburaks.com/btrisk-boot-to-root-btrsys1-walkthrough/
+http://www.securityidiots.com/Web-Pentest/SQL-Injection/bypass-login-using-sql-injection.html
+https://alvinalexander.com/blog/post/mysql/mysql-show-fields-schema-of-database-table
Umarım faydalı bir yazı olmuştur, gece geç saatlerde yazdığım için fazla ayrıntıya dalmadan yazdım hemen. Tatil boyunca olabildiğince makine ve ctf çözmeyi planlıyorum. Çözümleri buradan yazmaya devam edeceğim, sonraki yazıda görüşmek üzere...
Twitter: https://twitter.com/sh4d0wlesss?s=09
Blog: https://sh4d0wless.blogspot.com