Waldo - Hack The Box

Rıdvan Kaplan
4 min readFeb 8, 2021

--

Merhaba !!!

Şimdi Hack The Box içerisinde yeni emekliye ayrılmış Waldo makinesinin çözümünü paylaşacağım.

Öncelikle nmap taramasıyla port durumlarını inceleyelim.

SSH servisi ve HTTP servisi çalışıyormuş. Büyük ihtimal web tarafından birşeyler yaparak ssh ile bağlanmamızı istiyor. Web sayfasını inceleyelim.

Bir html sayfası geldi. Liste yönetimi adında bir sayfa. Liste ekleyebiliyoruz silebiliyoruz listeleyebiliyoruz. Buradan böyle birşey çıkmayacak gibi duruyor. Birde proxy ile inceleyelim. Burp suite ile biraz daha inceleyelim. Burp suite için küçük bir ayar gerekiyor.

Ayarımızı yaptıktan sonra liste ekleme silme ve listeleme işlemlerini yapıp içeriklerini inceliyorum.

Liste eklemede fileWrite.php dosyasını çalıştırıyor. Numara ve içeriğini alıyor. Ben deneme amaçlı Ridvan yazdım ve numarasını 34 yaptım. Yazıldığına dair true değerini döndürdü. Birde bunu okuyalım. Okumak için ise fileRead.php dosyasını çalıştırıyor.

Dosyamızı okuduk. Peki biz bunu nasıl kendi amacımız için kullanabiliriz ? Mesela buradan sunucuya ait dosyalar okuyabilir miyiz diye aklımıza gelmesi gerekiyor. Birde dirRead.php dosyası var. O anki dizinde neler olduğunu listelemek için. En üst dizinde neler varmış bakalım.

Mesela fileRead.php varmış. Bu dosyanın içeriğine bakalım.

Evet kaynak kodlarını görebiliyoruz. Buradan biraz karmaşık olduğu için biraz düzenledim.

Biraz php kodu okuyabiliyorsanız rahatlıkla olayı anlıyorsunuzdur. Bu koddaki tek sorun gönderilen dosya ismini değiştiriyor ( str_replace kısmı ) olması. İki tane nokta ve / işareti yanyana olduğunda farklı karakterle değiştiriyor. Bunu şu şekilde atlattım.

….//….//….//etc/passwd şekilde.

Evet /etc/passwd içeriğini okuduk. Hatırlarsanız SSH portu açıktı. Uzaktan bağlanabilmek için rsa keyi var mı yok mu bakalım. Home içerisindeki kullanıcının ismi nobody. Ama birkaç deneme yapınca .ssh içindeki key’in ismini bulamadım. Aklıma dirRead.php ile bakmak geldi. Aynı şekilde çift .. ve çift / işareti kullanınca onuda atlattım

Dosyamızın ismi .monitor. Ve içeriğini okuyoruz.

Keyimize ulaştık ve ssh ile bağlanalım.

Bağlandık ve user.txt mizi okuduk.

Kullanıcıyı ele geçirdikten sonra sıradaki amacımız root kullanıcısı olmak. Dizinleri incelerken .ssh içerisinde ki dosyada farklı bir kullanıcıylada ssh ile bağlanabildiğimi gördüm.

Ssh ile bağlandım ve karşıma bir docker çıktı. Ama bu makinede komutları çalıştıramıyordum. Ekran görüntüsündeki gibi komut bulunamadı hatası aldım.

Bunu atlatabilmek için internette biraz araştırma yaptım ve karşıma –noprofile ve –norc komutları karşıma çıktı.

Monitor kullanıcısı olarak normal shell’e sahibiz. Bundan sonra biraz daha araştırıyoruz ve ilginç birşeyler bulmaya çalışıyoruz.

Ve /sbin/getcap te değişik birşeyler olduğunu buldum. Nasıl buldunuz derseniz sunucuda ne varsa araştırıyorsunuz. 5 dakika içerisinde bulmuş değilim. Uzun bir süre inceleme yapmıştım.

Getcap dosyaların yeteneklerini inceler.

-r parametresi ile / (kök dizini) altında yinemeli arama yapar. Yetki hatalarını ekrana bastırmaması içinde 2>/dev/null ile göstermez.

2 sonuç çıktı. tac komutu cat komutunun aynısı tek farkı dosyayı son satırdan okumaya başlar. Örnekteki gibi.

cap_dac_read_search+ei ise isminde de anlaşılacağı üzere okuma işlemi için tam yetkisi vardır anlamı taşıyor diyebiliriz.

Yani anlaşılacağı üzere ikisini birleştirdiğimizde tac ile root yetkilerinde ki dosyaları okuyabiliriz.

Ve root yetkisiyle okunabilen root.txt’mizi de okuduk.

Okuduğunuz için teşekkürler. Yazılarımda herhangi bir teknik hata varsa bildirmekten çekinmeyiniz…

Gereksiz Bilgi : Bu makineyi aktif olduğu 2. veya 3. haftasında çözmüştüm. Direkt root shell’i almaya çalışmıştım ama alamamıştım.

--

--

Rıdvan Kaplan

Cyber Security & Blue Team | OSCP & eCTHPv2 & eCIR & CySA+