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.
