Scan / Enumeration
Makineyi keşif işlemine nmap
taraması yaparak başlıyorum. Makinedeki açık portları hızlı bir şekilde tespit edebilmek için -T4
parametresini kullanıyorum. Bulunan portları tarama tamamlanmadan göstermesi ve taramanın ne zaman biteceğine dair bilgi vermesi için -vv
parametresini veriyorum. Makinedeki bütün portları taraması için -p-
parametresini verdikten sonra makinenin IP adresini vererek taramayı başlatıyorum.
nmap -T4 -vv -p- $IP
Tarama sonuçlandığında 22
, 80
ve 443
portlarının açık olduğunu görüyorum. Bu portlar üzerinde çalışan servisler hakkında daha ayrıntılı bilgiye sahip olmak için bir nmap
taraması daha gerçekleştiriyorum. Versiyon ve script taraması yapmak için -sVC
parametresini kullanıyorum. Taranacak portları -p
parametresiyle belirtiyorum. Taramanın sonucunun bir dosyaya kayıt edilmesi için -oN
parametresini kullanıyorum ve makinenin IP adresini vererek taramayı başlatıyorum.
nmap -sVC -p22,80,443 -oN paper.nmap $IP

Makinede 22 portunda SSH
, 80 portunda Apache
web server ve 443 portunda aynı Apache
server’ın https
versiyonu çalışıyor. 22 portunda çalışan OpenSSH 8.0
servisi için searchsploit
ve arama motorları aracılığıyla exploit araması yapıyorum fakat işime yarayabilecek bir exploit bulamıyorum.
80 portunda çalışan web sunucusunu keşfetmeye başlıyorum. İlk olarak Apache 2.4.37
versiyonu için bir exploit araması yapıyorum fakat işime yarayacak bir exploit ile karşılaşmıyorum. Siteyi el ile keşfetmeye başlamadan önce site üzerinde işime yarayabilecek dizinleri bulmak için bir gobuster
ve sitenin yapılandırması hakkında bilgi sahibi olmak için bir nikto
taraması başlatıyorum.
gobuster
aracına dir parametresini vererek taramanın bir dizin taraması olduğunu belirtiyorum. Sitenin adresini -u
, taramada kullanılacak wordlist’i -w
parametresiyle veriyorum. Dizin taraması sırasında dosya taraması da yapmak için -x
parametresiyle dosya uzantılarını belirtiyorum. Tarama hızını -t
parametresiyle belirliyorum. Taramanın çıktısını -o
ile bir dosyaya yönlendirdikten sonra taramayı başlatıyorum.
gobuster dir -u http://$IP -w common.txt -x php,txt,db,bak -t 30 -o paper.buster
nikto
taramasını tamamen default ayarlarda -h
parametresiyle hedef sistemi belirterek başlatıyorum.
nikto -h http://$IP
Taramalar devam ederken bir browser aracılığıyla siteye erişiyorum ve incelemeye başlıyorum. Tamamiyle varsayılan bir sayfa olması dışında dikkatimi herhangi bir şey çekmiyor. Dizin taraması yapan gobuster
aracının çıktısında /cgi-bin
ve /manual
dizinlerini görüyorum fakat ikisi de şu an için işime yaramayacak dizinler.
Bu sırada nikto
taraması da sonuçlanıyor. Çıktılar içerisinde response’un headerları içerisinde x-backend-server
isminde ve office.paper
değerinde bir header olduğunu görüyorum. Bunun dışındaki bilgiler şu an için bana pek bir şey ifade etmiyor. Burada bulduğum office.paper
adresini hosts
dosyama ekleyerek adrese erişmeye çalışıyorum.

Bu adresi kullanarak eriştiğimiz sayfa bir wordpress sayfaysı. Sayfanın kaynak kodundan wordpress 5.2.3
sürümünün kullanıldığını öğreniyorum. Bu sürüm için bir zafiyet araması yaptığımda kullanabileceğim bir Unauthenticated View Private/Draft Posts zafiyeti olduğunu görüyorum. Direkt olarak http://office.paper/?static=1
adresine ulaşmaya çalışıyorum ve kullanıcının eklediği draft’ları görebiliyorum.

Gain Shell
Buradan öğrendiğim chat.office.paper
subdomain’ini de hosts dosyama ekleyerek erişebiliyorum. Adresi verilen kayıt sayfasını kullanarak bir kullanıcı oluşturuyorum ve giriş yapıyorum. Burada kullan rocket.chat
uygulaması için bir exploit araması yapıyorum uygulamanın 3.12.1
sürümü için bir NoSQL Injection to RCE zafiyeti buluyorum. Uygulamanın sürümünü öğrenmek için tarayıcı üzerinden siteyi keşfetmeye devam ediyorum. General chat sayfasını incelediğimde recyclops
isminde bir bot’un server’da dosya listeleme ve okuma işlerini yapmak için kullanıldığını öğreniyorum.
Botu özel mesaj atarak kullanıyorum ve server üzerinde gezinmeye çalışıyorum. İçerisinde bulunduğumuz dizinin dwight
isimli kullanıcının home dizini olduğunu öğreniyorum. Sonra passwd
dosyasını okuyarak makinede yalnızca rocketchat
ve dwight
kullanıcılarının shell sahibi olduğunu görüyorum. Kullanıcıların olası id_rsa
dosyasına erişmek için .ssh
dizinlerini kontrol ediyorum fakat ikisinde de bu dosyaların olmadığını hatta rocketchat kullanıcısının home dizini olmadığını görüyorum.
Makinede komut çalıştırabilmek için kullandığım bota ;
, |
, ||
, &
ve &&
karakterlerini kullanarak OS Command Injection denemesi yapıyorum fakat hepsini bot yakalıyor ve komut çalıştırmama izin vermiyor. Bot’un nasıl çalıştığını anlayabileceğim dosyaları bulmak için kullanıcının dizinini inceliyorum.
Burada /home/dwight/hubot
dizini altındaki bot’un dosyalarını incelerken start_bot.sh
dosyasını okuyorum. Dosyanın içerisinde source olarak .env
dosyasını aldığını görüyorum ve bu dosyayı da okuduğumda içinde bir parola bulunduğunu görüyorum.

Bu parolayı kullanarak rocketchat kullanıcısına ssh üzerinden bağlanmayı deniyorum fakat başaramıyorum. Aynı parola ile dwight
kullanıcısına bağlanmayı denediğimde bağlanabildiğimi görüyorum.

Privilege Escalation
Yetkimi yükseltebilmek için öncelikle sudo -l
komutuyla kullanıcının sudo yetkisini kontrol ediyorum fakat herhangi bir yetkisi olmadığını görüyorum. Kullanabileceğim SUID
dosyalarını kontrol etmeyi deniyorum. Dosyaları bulmak için find
komutunu kullanıyorum. Bütün dizinler içinde araması için /
dizinini belirtiyorum. Yalnızca SUID dosyaları getirmesi için -perm
parametresiyle birlikte -4000
değerini kullanıyorum. Komut çalışırken karşılaştığı hataları ekrana basmaması için 2>/dev/null
komutuyla hataları null’a yolladıktan sonra komutu çalıştırıyorum.
find / -perm -4000 2>/dev/null
Komutun çıktısını inceliyorum fakat işime yarayabilecek herhangi bir dosya ile karşılaşmıyorum. Kullanabileceğim herhangi bir cronjob
olması ihtimaline karşın /etc/crontab
dosyasını okuyorum fakat herhangi bir şey ile karşılaşmıyorum. İşime yarayabilecek capability
‘leri kontol etmek amacıyla getcap -r 2>/dev/null komutunu kullanıyorum fakat herhangi bir capability de bulamıyorum.
Son olarak kullanabileceğim dosyaları içerebilecek olan /opt
ve /var
dizinlerini kontrol ediyorum. Burada /opt
dizini altında Rocket.Chat dizinini görüyorum ve incelemeye başlıyorum. Sistemin MongoDB
kullandığını hatırlıyorum ve mongo
komutuyla database üzerinde erişimimi kontrol ediyorum fakat erişemediğimi görüyorum. Tarama işlemini otomatize etmeye karar vererek linPEAS
binary’sini python server aracılığıyla makineye göndererek çalıştırıyorum.
Taramanın çıktısında Rocketchat
uygulamasının çalışması için gerekli olan environment’ler içerisinde MongoDB
kullanıcısı ve parolası ile karşılaşıyorum. Bir de sudo komutu için CVE-2021-3560
zafiyetinin sömürülebilir olabileceğini görüyorum.

Öncelikle veritabanı tarafını incelemeye karar veriyorum. Buradan elde ettiğim bilgileri kullanarak MongoDB
servisine bağlanıyorum. Veritabanlarını listelemek için show dbs
komutunu kullanıyorum. İlk dikkatimi rocketchat
isimle database çekiyor ve use rocketchat
komutuyla ona geçiyorum. Koleksiyonları listelemek için show collections
komutunu kullanıyorum ve burada bulunan users
koleksiyonunu db.users.find()
komutuyla inceliyorum. Burada bulunan kullanıcıların rocketchat uygulamasındaki kullanıcılar olduğunu görüyorum.
Burada kullanıcıların parolaları bcrypt
algoritmasıyla hash’lenmiş olduğu için bruteforce
saldırısı dışında bir şey yapamam. Fakat burada kullanıcıların rollerini ve email adreslerini gördüğümde daha önce karşılaşmış olduğum ve admin kullanıcısının email adresini gerektiren Injection to RCE
zafiyeti aklıma geliyor. Bu zafiyeti sömürerek rocketchat
kullanıcısına geçebileceğim ve bu kullanıcının sudo yetkisinin olabileceğini düşünüyorum. Bu nedenle burada admin yetkisi bulunan kullanıcıyı bularak zafiyeti sömürmeyi deniyorum.

Bulduğum exploit’e -u
parametresiyle yetkisiz kullanıcının email adresini, -a
parametresiyle admin kullanıcısının email adresini ve -t
parametresiyle hedef url’yi veriyorum ve exploit’i çalıştırıyorum. Fakat exploit password reset email sent
kısmında takılıyor.

Bu exploit’ten ümidi kesip arkada çalışmaya bırakırken bulduğum CVE-2021-3560
sudo zafiyetini denemeye karar veriyorum. Buradaki poc.sh
dosyasını indirerek python server aracılığıyla hedef makineye gönderiyorum. Exploit’e -u
parametresiyle kullanıcı adını ve -p
parametresiyle parolayı vererek çalıştırıyorum.
