查看原文
其他

XVE-2023-21328|XXL-JOB默认密钥审计分析

老呆 阿呆攻防
2024-10-03

 


此文章是呆哥在SpringKiller安全研究师傅贴心指导下产出,这位佬是一个能独立开发一款企业级IAST,伸手0day伸脚1day,能手搓操作系统用脚逆向的师傅,还是OWASP的代码贡献者之一。哦,差点忘了,这个师傅能书会画,上厅堂下厨房无所不能,呆哥建议爱学习的可以找他击剑一下。


SpringKill师傅的Github地址:https://github.com/springkill



  

01

威胁情报


 

 

02

EXP


Github上已经看到的一位师傅的利用EXP,有GUI功能很多,觉得已经够好了

https://github.com/charonlight/xxl-jobExploitGUI

 

03

漏洞审计与分析


 

01

复现环境

 这里呆哥IDEA抽风了,前面截图用的VScode,后面实在忍不了重启切回IDEA。


02

审计思路

默认密钥的问题,联想问题发生位置:

  1. 登录认证时,调用默认密钥,生成可绕过Token

  2. 调用执行器Controller时,调用默认密钥绕过

  3. 执行器Config配置出错

我们先按这个思路来审计,其实一般直接先看Config的,然后再去看Controller和Service,但是由于说明上指出是执行器的默认密钥,所以我先看的Controller和Service。

 

03

登录认证

先看登录的Controller:

找到登录的Service:

里面调用一个函数makeToken():

这里面获取登录查询到的的账号密码和角色权限等信息的字符串去生成,所以这里不能伪造。

综上,登录认证无法伪造。

 

04

执行器面板服务分析

 

全走完都没看到token校验和权限控制,所以估计是全局拦截的:

还是没啥关系,结束。

05

执行器Config分析

 重启抽风好了,切回IDEA,没跳转太难受。

看到就这两个地方有调用,其实看到start()方法也就懂了:

先看第一个:

这个逻辑就是当accessToken不空且长度不为0的时候设置XXL-JOB-ACCESS-TOKEN的请求头为default_token

Key出来了校验在这:

token写在配置文件里一直在那传:

然后看第二个类:

继承的netty的方法:

明了。

 

04

总结


请求头加入:

JOB-ACCESS-TOKEN: default_token

即可。

 

继续滑动看下一个
阿呆攻防
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存