HackTheBox - Bashed Çözümü
Bu ilk yazımda HackTheBox'ta emekliye ayrılan Bashed makinasının çözümünü sizlerle paylaşacağım.
HackTheBox kullanıcıların verdiği puana göre makina zorluk derecesi açısından kolay diyebiliriz.
Her zaman olduğu gibi ilk olarak Nmap taramasının sonuçlarına bakıyoruz:
Hızlıca yaptığımız 1000 portluk tarama sonrasında ayrıca tüm port aralığını (1-65535) arıyarak yukarıdaki aynı sonucun geleceğinden ve başka portlarda herhangi bir servis olmaması için tekrar kontrol edeceğim. Bu arada web servisi üzerinde çalıştığı için diğer taraftan DirBuster(GUI ile gelmektedir), GoBuster veya dirb ile dizinleri kontrol edebilirsiniz, ben burada gobuster kullanacağım. İlk olarak 80 portunda çalışan websitesine tarayıcımızla bir göz atalım.
Websitesini ziyaret ettiğimizde phpbash geliştirilmesiyle ilgili çeşitli girilen açıklamalara ulaşıyoruz. Makinayı hazırlayan Arrexel'in github linkiyle beraber paylaştığı phpbash scriptine buradan ulaşabilirsiniz. Eğer github üzerinde kodunu incelerseniz tarayıcı üzerinde çalışan kullanıcı etkileşimli komut girilmesine izin veren php web shell'in görüceksiniz ki bu saldırı gerçekleştirilmesi için harika bir alan. Şimdi GoBuster'la ne sonuçlar elde ettiğimize bakalım.
-x vererek dosya uzantısı,
-w ile kullanmak istediğiniz sözlüğü belirtebiliyorsunuz.
GoBuster'la elde ettiğimiz sonuca göre /uploads, /php, /dev klasörleri ilgi çekici gözüküyor. "uploads" dizine gittiğimizde bizi index sayfası karşılıyor ve dosya listeleme yapamıyoruz. "dev" dizinine gittiğinizde phpbash.php dosyası tam olarak aradığımız dosya olarak karşımıza çıkıyor.
İlk olarak makinada id komutunu çalıştırarak user ve group id'lerini öğrenelim daha sonrasında user.txt flagini almak için /home dizinene erişimine yetkimiz var mı hemen sorgulayalım.
VE BINGO user.txt buldunuz :)
Privilege Escalation yapmadan önce webshell dışında reverse shell açmaya çalışalım, ilerleyen bölümlerde neden reverse shell açmamızın daha faydalı olacağını sizlerle paylaşacağım. İlk olarak github üzerinde paylaştığım php tiny reverse shell'i buradan indirebilirsiniz.
reverseshell.php dosyası içerisinde yer alan 10.10.10.10 IP adresini ve 1234 olan portu kendinize göre düzenleyin.
Web shell üzerinden gezinirken /var/www/html/uploads dizinine www-data kullanıcısı ile yazma yetkimiz bulunmaktadır. Buraya reverseshell.php dosyamızı yazabilir daha sonrasında tarayıcı üzerinden reverseshell.php dosyamızı çağırabiliriz. Neden direk olarak webshell üzerinden nc ile reverse yapmıyoruz? Bunun sebebi girilen her komut çalıştırıldıktan sonra ömrünü Arrexel'in geliştiridiği web shell'de yitiriyor biz ne kadar sonuna 0>&1 eklesekte.
Kendi lokalimizden dosya göndermek için neredeyse her zaman kullandığım favori python modülümüzü kullanalım. SimpleHTTPServer
Daha sonrasında http://10.10.10.68/dev/phpbash.php adresinden dosyamızı çekmek için gereken komutları yazalım.
Aşağıdaki gibi lokalimizde netcat listener ayarlanması yapalım,
Ve geriye http://10.10.10.68/uploads/reverseshell.php çağırmak kalıyor.
nc ile dinlediğimiz porta aşağıdaki şekilde bağlantı sağlanıncak:
Shell üzerinde daha rahat çalışabilmek için:
Root dizininde gezindiğimizde scripts adlı dizin ve altındaki bazı dosyaları görebiliyoruz. İngilizlerin dediği gibi "Enumerate More..."
Hmm burada ilginç bir dizin görüyoruz, /scripts dizini ve sahibi olarak scriptmanager. www-data kullanıcısıyla sadece dizini okuma yetkimiz bulunduğu için en azından dizin içerisinde bulunan dosyaları görebiliyoruz.
www-data kullanıcısı scriptmanager olarak komut çalıştırabileceğini görüyoruz.
Tekrardan /scripts dizine gidelim,
Görüldüğü üzere test.py çalıştırıldığında, test.txt dosyasına içerikleri scriptteki şekilde basıyor. Burada dikkat edilmesi gereken nokta test.txt dosyası root tarafından kontrol edilmekte fakat test.py dosyasının sahibi scriptmanager. Bir diğer değişle test.txt dosyası her dakika değişiyor böylelikle bu dosyanın cron job tarzı bir yapıyla tetiklenmesi pek muhtemel ve bu cron root yetkili kullanıcısıyla çalışıyor gibi. Bu scripti editleyerek root.txt flag'e erişebilir veya netcat ile kendimize reverse shell açabiliriz.
Pentestmonkey üzerinden aldığımız Python reverse shell'i düzenleyip kullanabiliriz. test.py dosyasını açalım ve linkteki dosyadaki IP ve PORTları değiştirelim.
Script linki için tıklayınız.
Lokalimizde netcat ile 1453 portundan dinlemeye geçelim:
Bir sonraki makinelerde görüşmek üzere :)