HackTheBox – DevOops Çözümü (Write Up)

Merhaba Arkadaşlar;

Bugün HackTheBox platformundan DevOops adlı makinenin çözümü inceleyeceğiz.Her zaman ki gibi işe port taramasıyla başlayalım.

Evet.Gördüğümüz gibi sadece 22(ssh) ve 5000(http) portları açık.HTTP serverında ne çalışıyor bir göz atalım.

Gunicorn servisiyle çalışan bir website görüyoruz.Gobuster ile hangi directorylere sahip olduğuna bakalım.

/feed directorysinde ilk sayfadaki resmin aynısını görüyoruz./upload dizininde ne var bir bakalım.

Upload edebileceğimiz bir sayfa çıkıyor karşımıza.Böyle bir sayfa çıktığında içgüdüsel olarak reverse shell alabileceğimiz bir dosya upload etmek geldi aklıma.Fakat xmlden başka bir dosya türünü kabul etmiyor.Ben de boş bir xml dosyası upload etmeye çalıştım.Aşağıda gördüğünüz gibi bir hata ile karşılaştım.

Xml harici bir dosyayı kabul etmiyor.Fakat xml dosyasını da kabul etmedi.Burp suite ile arka planda neler dönüyor bir bakalım.

HTTP 500 hatası veriyor.Bunun nedeni sunucunun istediği biçimde bir xml dosyası upload etmememizdir.Peki sunucu nasıl bir xml istiyor?Xml in yapısına baktığımız zaman bir root ve elements yapısına sahiptir.O halde sunucunun istediği şekilde bir xml dosyası upload edelim.Xml dosyasının elementlerini zaten /upload dizininde bize söylemiş.XML Elements:Author,Subject,Content

O zaman xml in içeriği şu şekilde olacak.

Evet.Resimde de gördüğünüz gibi eğer bu şekilde gönderirsek sunucumuz bize response olarak  HTTP 200 OK raporunu veriyor.Demek ki hatasız bir şekilde upload edebildik.Peki şimdi ne yapacağız.OWASP 2017 Top 10 da 4.sırada olan XXE(Xml Enternal Entities) zaafiyetini kullanmaya çalışalım.Biraz google da arattıktan sonra aşağıdaki gibi bir kod buldum.Bu kod ile sunucudaki dosyaları okuyabiliyoruz.

Resimde de gördüğünüz gibi /etc/passwd dosyasını okuyabiliyoruz.O zaman biraz enumeration zamanı 🙂 Passwd dosyasını incelediğimizde roosa adlı bir kullanıcı görüyoruz.Bir bilgisayarda dosya okuma yetkim var ise ilk yaptığım şeylerden biri herhangi bir kullanıcının .bash_history dosyasını okumaktır.(Başka şeylerde var tabiki.Bu linkten bilgilenebilirsiniz. https://digi.ninja/blog/when_all_you_can_do_is_read.php )

roosa kullanıcısının .bash_history dosyasını okuyalım.

“ssh-keygen” komutu çalıştırılmış.RSA algoritmasıyla bir şifreleme yapılmış.Port taramasında ssh portunun açık olduğunu görmüştük.O halde roosa kullanıcısının private keyini okumaya çalışalım.

Evet,okuyabiliyoruz.O halde bu keyi kullanarak roosa kullanıcısı olarak ssh ile bağlanmayı deneyelim.”roosa.txt”(adı önemli değil) adlı bir dosya oluşturup private keyi içine yazalım.Daha sonrası resimde:

Gördüğünüz gibi userı aldık.Tabiki bize yetmez bu root olmamız lazım. 🙂 Klasik root olma exploitleri denedim.Fakat işe yaramadı.Ben de enumeration yapmaya karar verdim.Ama istediğim şey her yerde olabilir.İşimi hızlandırmak için tekrar .bash_history dosyasına bakalım.

Dosyayı incelediğimizde /work/blogfeed dizininde “git” komutlarının çalıştığını görüyoruz.Neler yaptığına bakmak için o dizinde “git log” komutunu çalıştırıp logları okuyalım.Commitleri incelediğimde “add key for feed…” kısmı dikkatimi çekti.O committe neler olmuş yakından göz atalım.

Bir rsa private key görüyoruz.Kırmızı renkle olan kısım değiştirilmiş.Acaba bu kırmızı renkli key root kullanıcısının private keyi olabilir mi?Denemekten zarar gelmez. 🙂 Yine aynı şekilde “root.txt” adlı bir dosya oluşturup bu keyi oraya yapıştırdım.

(- leri silmeyi ve sonuna -----END RSA PRIVATE KEY----- eklemeyi unutmayın)

 

Evet gördüğünüz gibi root olduk arkadaşlar.Umarım faydalı bir yazı olmuştur.Herkese başarılar diliyorum…

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir