划,狠狠划。
免责声明:
本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关。
注意:
本免责声明旨在明确指出,本文仅为技术交流、学习和研究之用,不得将文章中的技术用于任何非法目的或破坏行为。发表本文章的作者对于任何非法使用技术或对他人或系统造成的损害概不负责。
阅读和参考本文章时,您必须明确并承诺,不会利用文章中提供的技术来实施非法活动、侵犯他人的权益或对系统进行攻击。任何使用本文中的技术所导致的任何意外、损失或损害,包括但不限于数据损失、财产损失、法律责任等问题,都与发表本文章的作者无关。
本文提供的技术信息仅供学习和参考之用,不构成任何形式的担保或保证。发表本文章的作者不对技术的准确性、有效性或适用性做任何声明或保证。
考虑到这个漏洞官方已经公布相关POC,遂也发一下审计复现过程。
笔者复现的时候并没有公开POC,只是简单看了一下JAVA代码,后面发现这个漏洞比较简单,适合初学者学习,于是专门写一篇。这是笔者看到的公告:
这是笔者第一时间看到的图,真开局一张图,好在描述挺详细的,说的是默认的accesstoken,噫,有戏。
笔者也不是傻,当时看到微步的公告,你想,嗯,未公开。于是兴冲冲搜了下github,好像还真的没有。。。
回到正题,XXL-JOB之前是有未授权的漏洞的,就是那个未授权调用执行器(一般是9999端口)执行计划任务那个洞,但是这个描述说的比较模糊,没有说具体是控制中心管理后台的洞还是执行器的,所以还是得看一下代码。
不过首先得简单讲讲xxl-job的逻辑,xxl-job后台可以管理执行器,后台添加的计划任务,实际上会传递给执行器进行执行命令,两者怎么通讯的?当然是HTTP请求啊,早些年的执行器没有配认证,自然是组装HTTP请求直接发过去就完事了啊,当然服务端可以发,攻击者也可以下发啦,毕竟不需要鉴权嘛,这也是前一个未授权RCE漏洞的由来,现在又出现一个默认token的问题,那么必然是二者通讯需要的认证信息啦。
考虑到既然是默认accesstoken嘛,先看看配置文件
![JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析 JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析]()
在这里哦:
![JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析 JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析]()
就这?啊?
![JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析 JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析]()
还真的是默认token,看看代码怎么调用的,直接检索accesstoken。
这部分是相关代码
com/xxl/job/admin/controller/JobApiController.java:50
![JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析 JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析]()
很简单啊,就从配置文件里读accesstoken,然后判断是不是从HTTP头传递的accesstoken值一致的,如果不对那么就返回wrong
继续跟从请求头取token那段
![JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析 JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析]()
这里就是设置一个请求头:
XXL-JOB-ACCESS-TOKEN:accesstoken的值
然后组装POST包,传递给后端
已经到这一步了,这是没有认证的执行器:
![JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析 JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析]()
添加认证后:
![JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析 JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析]()
So
![JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析 JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析]()
考虑到既然是默认accesstoken嘛,先看看配置文件
在这里哦:
就这?啊?
还真的是默认token,看看代码怎么调用的,直接检索accesstoken。
这部分是相关代码
com/xxl/job/admin/controller/JobApiController.java:50
很简单啊,就从配置文件里读accesstoken,然后判断是不是从HTTP头传递的accesstoken值一致的,如果不对那么就返回wrong
继续跟从请求头取token那段
这里就是设置一个请求头:
XXL-JOB-ACCESS-TOKEN:accesstoken的值
然后组装POST包,传递给后端
已经到这一步了,这是没有认证的执行器:
添加认证后:
So
原文始发于微信公众号(JC的安全之路):JAVA代码审计之XXL-Job默认token(XVE-2023-21328)分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论