分析某通T+产品多个接口存在任意文件上传风险

0x01 背景

2022年08月28日,各大安全公司监测到很多主机被.locked后缀的勒索病毒加密,通过加密文件特征分析,确认此次勒索病毒为 TellYouThePass 变种。

行业监管机构也第一时间通知各家单位高度重视,提醒警惕加强防范,全面排查相关系统资产,及时备份主机重要文件做好安全防护,严防勒索病毒攻击。.

经过本地搭建复现环境评估发现某通T+产品存在多个接口文件上传0day漏洞,好在软件系统运行在预编译模式下,所以这几个上传漏洞未造成实际安全风险

0x02 缺陷

2.1 上传一 SYSImportData.aspx

由于系统采用了预编译模式,上传的aspx文件不能运行,所以漏洞虽然存在,但基本无实际危害,漏洞位于 /SM/DTS/SYSImportData.aspx,核心代码如下

protected void ButtOk_Click(object sender, EventArgs e)    {        UpLoadCollection upLoadInbfo = this.GetUpLoadInbfo();        List<bool> list2 = new List<bool>();        if (upLoadInbfo != null)        {            foreach (object obj in upLoadInbfo)            {                UpLoadInfo upLoadInfo = (UpLoadInfo)obj;                string text = upLoadInfo.FUpload.FileName;                string voucherName = upLoadInfo.VoucherName;                string text2 = string.Concat(new object[]                {                    this.path,                    "\\",                    DateTime.Now.Ticks,                    "_",                    text                });                upLoadInfo.FUpload.SaveAs(text2);

upLoadInfo.FUpload.FileName获取文件名并未作任何扩展名过滤,但是用DateTime.Now.Ticks获取当前时间戳,所以文件名存在重命名的情况,导致文件名无法使用../../跳转到其他目录,所以漏洞在预编译模式下也不能被恶意利用。

分析某通T+产品多个接口存在任意文件上传风险

2.2 上传二 InvDataImport.aspx

由于系统采用了预编译模式,上传的aspx文件不能运行,所以漏洞虽然存在,但基本无实际危害,漏洞位/ST/Common/InvDataImport.aspx,核心代码如下

protected void btnImport_Click(object sender, EventArgs e)    {        try        {            string fileName = this.UpLoadControl1.FileName;            string text = base.Server.MapPath("~/UserFiles/" + DateTime.Now.Ticks.ToString() + "_" + fileName).ToLower();            this.UpLoadControl1.SaveAs(text);            text = this.TextBox1.Text + '\u0011' + text;              }        catch (Exception e2)        {            this.HandleException(e2);        }    }

this.UpLoadControl1.FileName用户控件获取文件名并未作任何扩展名过滤,但是用DateTime.Now.Ticks获取当前时间戳,所以文件名存在重命名的情况,导致文件名无法使用../../跳转到其他目录,所以漏洞在预编译模式下也不能被恶意利用。

0x03 总结

此软件上传风险还有不少,但只有被勒索病毒利用的文件存在跨目录可控的漏洞,其他的任意文件上传在预编译下只能算是SDL下需要消灭的安全风险,提前透露下篇文章从技术分析角度笔者将介绍动态关闭.NET预编译模式,请感兴趣的师傅们继续关注。