- 14 Eki 2022
- 602
- 2
- 497
HackTheBox :: Clicker
Merhaba arkadaşlar, bu konumda HackTheBox platformunda bulunan "Clicker" isimli makinenin çözümünü göstereceğim. Bu makine linux tabanlı orta seviye bir makinedir. İlk önce bir port taraması yaparak başlıyorum.
Makine üzerinde 80 (HTTP) ve 2049/111 (NFS) servisi açık bulunuyormuş. Ayrıyeten http servisine erişilmeye çalışıldığında clicker.htb adresine yönlendiriyormuş.
IP adresi ile beraber yönlendirdiği adresi /etc/hosts dosyasına girdikten sonra showmount -e clicker.htb komutunu kullanarak paylaşılan dizinleri görüntülemeye çalıştığımda /mnt/backups dizinini bir kısıtlama olmadan herkesin bağlanabileceğini gördüm.
/tmp dizini altında bir dizin oluşturduktan sonra sudo mount -t nfs clicker.htb:/mnt/backups /tmp/solukborusu komutunu kullanarak /mnt/backups dizinini bu dizine bağladım.
backups dizininin altındaki dizinde clicker.htb sitesinin kaynak kodları bulunuyormuş. şöyle ki web sitesinde ana dizin haricinde assets ve exports dizinleri bulunuyor. assets dizini altında resimler, js ve css dosyaları bulunuyor. exports dizini altında hiç bir şey bulunmuyor. muhtemelen yapılan bir işlemin sonucunda elde edilen çıktı bu dizine kayıt ediliyor. her neyse şimdilik bu dosyaları rahat bırakalım ve ana dizinde ki dosyalara yönelelim. index.php dosyasında role göre bağlantı gösteren bir kod bulunuyor.
Adım adım bu dosyalardan yola çıkarak sisteme erişmeyi deneyeceğiz. uygulamaya kayıt olmamış kullanıcıların görebileceği info.php, login.php ve register.php dosyaları içerisinde herhangi bir sorun göremedim. kayıtlı kullanıcıların görebileceği profile.php ve logout.php dosyalarında da önemli bir şey yok ancak play.php dosyasında gördüğümüz sonuçları kayıt etmek için kullanılan save_game.php dosyasında sözde "kötü niyetli kullanıcıların rolü değiştirememesi için alınmış bir önlem" bulunmakta.
işaretlediğim alanda GET isteği ile gelen parametrelerin içinde role parametresinin olup olmadığını kontrol eden bir kod var. role parametresi olduğu takdirde uyarı veriyor, olmadığı takdirde ise GET isteği ile gelen tüm parametreleri import ettiği db_utils.php dosyasında ki save_profile() fonksiyonuna göndererek kayıt ediyor.
db_utils.php dosyasında ki save_profile() fonksiyonunda herhangi bir kısıtlama olmadan gelen verileri düzenleyerek veri tabanına giren bir kod var. Yapılması gereken şey role parametresini kullanmadan veri tabanında ki role değerini değiştirmektir. daha önce sql injection bypass üzerine çalıştıysanız ne demek istediğimi anlamışsınızdır.
kullanıcıdan çıkış yapıp tekrar giriş yaptığımda admin yetkisine erişmiş oluyorum.
admin.php sayfasında en çok tıklayan kullanıcıların bulunduğu bir liste mevcut. bu listeyi txt, json ve html çıktısı şeklinde kayıt edebiliyoruz.
en çok tıklayan kullanıcıların listesini exports dizinine kayıt eden export.php sayfası içerisinde seçilen uzantı txt veya json değil ise html etiketleri kullanarak çıktıyı oluşturduğunu görüyoruz. en altta ki kodlarda ise top_players_ adına ek olarak rastgele karakterlerden oluşan bir dosya adı girdiğini ve dosya uzantısı olarak ise seçtiğimiz uzantıyı eklediğini görüyoruz.
pekala dosya uzantısını json veya txt uzantısı yapmadığımız için html kodları içerisine kullanıcı bilgilerini ekliyor. bunun yanı sıra kullanıcını bilgilerini değiştirebileceğimiz bir zafiyet keşfetmiştik. eğer yukarıda ki resimde ilk işaretlediğim kısımda ki kullanıcı bilgilerinden birine bir php kodu eklersek ve dosya uzantısını php olarak değiştirirsek kullanabileceğimiz bir web shellimiz olur.
daha sonra ise wget yardımı ile reverse shell dosyamı çekip çalıştırdıktan sonra pwncat-cs ile dinlediğim port üzerinden bağlantı geldi.
/opt dizini altında monitor.sh dosyası ve /opt/manage dizini altında README.txt ve execute_query dosyaları bulunuyor.
execute_query dosyası web sitesi ile ilgili bir takım işlemler yapan bir dosyaymış. README.txt dosyasını okuduğumda anlamamıştım.
gözden kaçırdığım bir şey olup olmadığını kontrol etmek için linpeas kullandım ama sistem üzerinde kullanabileceğimiz bu dosya harici bir şey yok. Orta seviye makinelerde basit seviye tersine mühendislik ile uğraşılabiliyor. konunun uzmanı değilim ama rizin ile içeriğini kontrol ettiğimde bir kaç şey fark ettim.
işaretlediğim yerde bir karşılaştırma olayı varmış ve dönen değer 0 ise orada gördüğünüz komutu sistem üzerinde çalıştırıyormuş. 0 değil ise ekrana "File not readable or not found" çıktısını yazdırıyor.
bunların dışında /home/jack/queries/ diye bir dizin ve bir takım sql dosyaları belirtilmiş. muhtemelen yapılan işleme göre burada ki sql dosyalarını kullanıyor.
dosyanın varlığını ve okunabilirliğini kontrol ettiğine göre bence ek parametre olarak bu dosyayı açmasını sağlayabiliriz. hem zaten kullanılan komutu kullanarak bir dosyayı görüntüleyebilmesini sağlayabiliyoruz.
bu komutu id_rsa verisini almak için kullandığımızda yetkisiz erişim hatasını veriyor. execute_query dosyasına 1-4 arasında olmayan bir sayı verdiğimde, ardından yazdığım dosyayı okumaya çalışıyor. fakat bize dosyanın okunamadığını veya var olmadığını söylüyor. bulduğumuz bilgileri birleştirdiğimizde herhangi bir seçeneği seçtiğim de aşağıda ki komutu terminalde çalıştırdığını fark edersiniz.
/usr/bin/mysql -u clicker_db_user --password='clicker_db_password' clicker -v < /home/jack/queries/clean.sql
burada ki /home/jack/queries/ kısmını sonradan eklediği için yapacağımız şey görüntülemek istediğimiz dosyanın başına gerektiği kadar ../ eklemektir. bu bizim bir alt satıra inmemizi sağlayacak. mesela id_rsa dosyasını okumak istiyoruz. bu dosyanın kullanıcı dizininde ki .ssh dizininde olduğunu ve bizim /home/jack/queries/ dizinde olduğumuzu varsayarsak ../.ssh/id_rsa şeklinde bir yol girdiğimizde bize içeriğini gösterecektir.
id_rsa dosyasının içeriğini kopyalayıp bir dosyaya kayıt ettikten sonra chmod 600 id_rsa komutu ile yetkilendirip ssh [email protected] -i id_rsa komutunu kullanarak jack kullanıcısına geçiş yapabiliriz.
kullanıcı bayrağını aldığımıza göre son bayrağı alabilmek için yetki yükseltmeye çalışabiliriz. sudo -l komutunu kullandığımda root olarak /opt/monitor.sh dosyasını çalıştırabildiğimizi görüyoruz.
evet burada ne yapmam gerektiğini pek çözmüş değilim. bash kodunun içerisinde perl ile ilgili şeyler var aman aman. perl5lib exploit şeklinde aramalar yaptıktan sonra bulduğum komutu düzenleyerek yapıştırdım.
https://0xn3va.gitbook.io/cheat-sheets/web-application/command-injection#perl5db
HackTheBox :: Clicker
Son düzenleme: