[HackTheBox/Clicker] Zafiyetli Kaynak Kod Analizi

Will Graham

Katılımcı Üye
14 Eki 2022
581
489
5a89d213ede5af4b4f94035fd059f976.png


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.


QjLrkY.png


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.


Wf3Oo.png


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.

KCpjsD.png


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.

BcN5eksZrO.png


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.

aV3dTGF_4.png


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.

dVAh5DuUj.png


kullanıcıdan çıkış yapıp tekrar giriş yaptığımda admin yetkisine erişmiş oluyorum.

ZzaBYGpjJ.png


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.

WxR-s.png


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.

tf9Q6s7F1b0.png


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.

39Vs_c8CElX.png


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.



pgrSbduM.png


execute_query dosyası web sitesi ile ilgili bir takım işlemler yapan bir dosyaymış. README.txt dosyasını okuduğumda anlamamıştım.

RMUeI7.png


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.

sBhn1M.png


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.

0cMh2bUAZdLg.png


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.

Dw7Nv2MFhJW.png


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.

z-CiD.png


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.

UFIXB.png


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.

J-ZSBls.png


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.

Z78xOT.png


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

4XQcNpGk0b.png


HackTheBox :: Clicker
 
Son düzenleme:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.