[漏洞利用]xxl-job Hessian2反序列化漏洞深入利用

如果觉得该文章有帮助的,麻烦师傅们可以搜索下微信公众号:良月安全。点个关注,感谢师傅们的支持。

免责声明

本公众号所发布的所有内容,包括但不限于信息、工具、项目以及文章,均旨在提供学习与研究之用。所有工具安全性自测。如因此产生的一切不良后果与文章作者和本公众号无关。如有涉及公司与个人敏感信息,侵权烦请告知,我们会立即删除并致歉。

前言

xxl-job Hessian2反序列化漏洞本身是一个挺老的漏洞了,影响版本也比较老,在一次项目中碰到了xxl-job,其/api接口可以未授权访问存在hessian2反序列化漏洞,但是不出网,于是有了这次利用。

漏洞分析

XXL-JOB <= 2.0.2,其/xxl-job-admin/api接口可以未授权访问,该接口存在Hessian2反序列化漏洞。

未授权是因为设置了@PermessionLimit(limit=false)导致的。

invokeAdminService方法中调用了handle方法。

handle方法中满足if条件后,调用了parseRequest方法。

在parseRequest方法中,获取请求的数据后,会调用this.xxlRpcProviderFactory.getSerializer().deserialize方法对传入的数据进行反序列化。

this.xxlRpcProviderFactory.getSerializer()返回的是HessianSerializer。

其deserialize方法中进行了Hessian2反序列化。

利用链构造

网上提到的大部分都是jndi注入利用,在不出网的情况下就难以利用,这里选择利用hessian jdk原生反序列化利用链,其原理就是通过SerializerFactory.setAllowNonSerializable(true)关闭Serializable派生类检查,使得没有继承Serializable的类也可以反序列化。

javax.swing.UIDefaults中的内部类ProxyLazyValue的createValue中存在类方法的反射调用,可以调用任意类的静态public方法,调用堆栈如下图:

这里可以选择com.sun.org.apache.bcel.internal.util.JavaWrapper类的_main方法,加载恶意类的_main方法。

也可以使用sun.reflect.misc.MethodUtil.invoke反射调用sun.misc.Unsafe.defineClass方法来加载字节码,然后再实例化这个类

回显利用

bcel

invoke反射调用defineClass

发送第一个包加载类字节码。

发送第二个包实例化该类。

因为微信公众号和阿里云盘都无法直接分享压缩包文件,payload项目这部分就打包放星球了。师傅们可以自己构造利用。

参考链接

https://xz.aliyun.com/t/11091

https://yzddmr6.com/posts/swinglazyvalue-in-webshell/

探寻Hessian JDK原生反序列化不出网的任意代码执行利用链 – Whwlsfb's Tech Blog

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值