TryHackMe / Road

road
LinkDifficultyCreator
RoadMediumStillNoob

Scan / Enumeration

Makineyi keşif işlemine nmap taraması yaparak başlıyorum. Varsayılan hızı arttırmak için -T4 parametresini kullanıyorum. Tarama sırasında bulunan portları ekrana basması için -vv parametresini veriyorum. Makinedeki bütün portları taramak için -p- parametresini veriyorum ve IP adresini vererek taramayı başlatıyorum.

nmap -T4 -vv -p- $IP

Tarama sonucunda 20 ve 80 portlarının açık olduğunu görüyorum. Bu portlarda çalışan servisleri ayrıntılı olarak tespit edebilmek için bir nmap taraması daha gerçekleştiriyorum. Versiyon ve script taraması yapabilmek için -sVC parametresini veriyorum. Taranacak portları -p parametresiyle belirtiyorum. Taramanın sonucunun bir dosyaya yazılması için -oN parametresiyle dosya ismi veriyorum ve hedefin IP adresini vererek taramayı başlatıyorum.

nmap -sVC -p22,80 -oN road.nmap $IP

Makinede 22 portunda SSH servisi, 80 portunda Apache web server çalışıyor. SSH servisinin OpenSSH 8.2p1 versiyonu için searchsploit ve arama motorları aracılığıyla exploit araması yapıyorum. İşime yarayabilecek herhangi bir exploit ile karşılaşmıyorum.

Web sitesini keşfetmeye başlamadan önce makinede çalışan Apache 2.4.41 versiyonu için searchsploit ve arama motorları aracılığıyla exploit araması yapıyorum. Bu apache versiyonu üzerinde Thrive Smart Home 1.1 cihazı için bir exploit buluyorum fakat üzerinde çalıştığım cihaz için kullanabileceğimi düşünmüyorum. Başka işime yarayabilecek bir şey bulamadığım için web sitesini keşfetme işlemine geçiyorum.

Siteye erişmeden önce gobuster aracılığıyla bir dizin taraması başlatıyorum. Verdiğim dir paramteresiyle dizin taraması yapacağımı belirtiyorum. Hedefin url adresini -u parametresiyle, dizin listesini -w parametresiyle veriyorum. Dizin tararken dosya da taraması için -x parametresiyle dosya uzuntıları veriyorum. Tarama hızını -t parametresiyle arttırıyorum ve taramanın çıktısını -o parametresiyle bir dosyaya kaydediyorum.

gobuster dir -u http://$IP -w directory.list -x php,txt,db,bak -t 30 -o road.buster

Dizin taraması devam ederken bir browser aracılığıyla web sitesine erişiyorum ve incelemeye başlıyorum. Sayfanın footer kısmında skycouriers.thm domain adresini görüyorum ve hosts dosyasama ekliyorum. Siteyi kurcalarken bir login sayfası ile karşılaşıyorum aynı sayfada register bölümü de olduğunu görüyorum ve kayıt oluyorum.


Gain Shell

Kendi kullanıcımı oluşturup giriş yaptığım sayfayı incelemeye başladığımda ilk dikkatimi Reset User alanı çekiyor. Sayfayı incelediğimde username tarafını değiştiremediğimizi ve yeni parola vererek kullanıcının parolasını yenileyebildiğimizi görüyorum.

Burada gönderdiğim Username değerini OWASP ZAP ile araya girerek değiştirebileceğimi düşünüyorum ve yapıyorum. Değiştirebileceğim username olarak admin, admin@skycouriers.thm ve contact@skycouriers.thm değerlerini deniyorum. Gönderdiğim request herhangi bir hata almadan dönse de bu kullanıcılar ile giriş yapamıyorum ve farklı bir kullanıcı bulmak ya da zafiyet içerebilecek başka alanlar bulmak amacıyla siteyi keşfetmeye devam ediyorum. Kendi profil sayfamı incelerken sayfanın en altında kullanabileceğim bir adres ile karşılaşıyorum.

Aynı şekilde proxy ile araya girerek bu kullanıcının parolasını değiştirmeye çalışıyorum.

Parolasını değiştirdiğim kullanıcı ile giriş yapmayı deniyorum ve giriş yapabildiğimi görüyorum. Sayfayı admin kullanıcısıyla incelemeye başlıyorum fakat normal kullanıcıdan farklı olarak erişebileceğim herhangi bir yer ile karşılaşmıyorum. Admin kullanıcısına özel olan profil resmi yükleme özelliğini incelemeye başlıyorum. Bir kaç resim yüklüyorum fakat profil resminin değişmediğini görüyorum. Yüklediğim resimlerin nereye gittiğini anlamak için sayfanın kaynak kodlarını incelemeye başlıyorum. Burada /assets/img dizinini buluyorum fakat içerisindeki resimlerin hiç birinin benim yüklediklerim olmadığını görüyorum. İstediğime ulaşamayınca source kodu incelemeye devam ediyorum. Sayfanın sonlarına doğru bir yorum satırı ile karşılaşıyorum.

Burada bulduğum /v2/profileimages dizinine erişmeyi deniyorum fakat içeriği görüntülemenin devre dışı bırakıldığını görüyorum. Direkt olarak yüklediğim görsele erişmeye çalışıyorum ve başarıyorum. Bir php reverse-shell yüklemeyi deniyorum.


Privilege Escalation

Makineye www-data kullanıcısı üzerinden erişim sağlıyorum. Öncelikle sudo -l komutuyla kullanıcının sudo yetkisini kontrol etmeyi deniyorum fakat parola istediği için göremiyorum. Daha sonra getcap -r 2>/dev/null komutunu kullanarak yetki yükseltmek için kullanabileceğim capability’leri kontrol ediyorum fakat herhangi bir şeyle karşılaşmıyorum. Kullanabileceğim cronjob’ları kontrol etmek için /etc/crontab dosyasını okuyorum fakat buradan da bir şey elde edemiyorum.

Son olarak makinedeki SUID dosyaları kontrol ediyorum. Dosyaları bulabilmek için find komutunu kullanıyorum. Aranacak dizin olarak / değerini vererek bütün makine üzerinde aranmasını sağlıyorum. Yalnızca SUID yetkisi olan dosyaların getirilmesi için -perm parametresine -4000 değerini veriyorum. Karşılaşılan hataları ekrana basmaması için 2>/dev/null ile hataları yakalıyorum ve komutu çalıştırıyorum.

find / -perm -4000 2>/dev/null

Bulunan SUID dosyaları inceliyorum fakat işime yarayabilecek herhangi biri dikkatimi çekmiyor. Makineye linPEAS script’ini atarak otomatik tarama yapmaya karar veriyorum. Makinemde python yardımıyla bir server kaldırdıktan sonra dosyayı hedef makineye çekiyorum ve script’i çalıştırıyorum. Script sonucunu incelerken makinede MongoDB olduğunu görüyorum.

Bağlanabileceğime emin olmasam da mongo komutunu deniyorum ve show dbs dediğimde veritabanlarını görebiliyorum. İşime yarayabilecek bir kaç farklı veritabanı olsa da backup‘ın istediğim sonucu vereceğini düşünerek ilk olarak onu kontrol ediyorum ve webdeveloper kullanıcısının parolasına erişiyorum.

Eriştiğim parola ile webdeveloper kullanıcsına SSH üzerinden bağlanıyorum. Kullanıcının sudo yetkisini kontrol etmek için sudo -l komutunu kullanıyorum ve bir binary için sudo yetkisi olduğunu görüyorum.

Script’in ne yaptığını anlamak için strings komutunu kullanarak inceliyorum. Script, /var/www/html dizini altındaki bütün dosyaları alarak tar yardımıyla sıkıştırıyor ve /root/.backup dizini altına kaydediyor.

Burada kullanılan tar komutuna daha önce başka makinelerde denemiş olduğum Wildcard Injection ile yetki yükseltme saldırısını deniyorum. Bunun için html dizini altında dosyalar oluşturmam gerekiyor ve bu yetkiye sahip olan www-data kullanıcısını kullanıyorum. Saldırının amacı tar komutunun alacağı dosyaları parametre olarak görmesi ve bunları çalıştırarak bizim istediğimiz işi görmesi. Bunun için bir reverse shell script’i hazırlıyorum. Daha sonra tar komutunun parametre olarak göreceği değerlere hazırladığım script’i çalıştıracak değerler veriyorum. Komutu çalıştırıyorum fakat tar komutu dosyaları alırken öncesine /var/www/html dizinini de koyduğu için komuttan istediğim çıktıyı alamıyorum.

Yetki yükseltmek için başka yollar arıyorum. Uzun bir süre bu işlem için tar komutunu nasıl sömürebileceğimi araştırsam da denediğime benzer yöntemler dışında pek bir şeyle karşılaşmıyorum ve vazgeçiyorum. Tekrardan sudo -l komutunun çıktısını incelediğimde env_keep+=LD_PRELOAD değeri dikkatimi çekiyor. Bu değeri arama motorları aracılığıyla sorgulattığımda işime yarayabilecek bir blog ile karşılaşıyorum.

Burada anlatıldığı gibi bir shell.c dosyasi oluşturup dosyayı shared library olarak derliyorum ve sudo komutuna parametre olarak verdiğimde istediğim işlevi yerine getirdiğini görüyorum.

Gev