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获取当前时间戳,所以文件名存在重命名的情况,导致文件名无法使用../../跳转到其他目录,所以漏洞在预编译模式下也不能被恶意利用。
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预编译模式,请感兴趣的师傅们继续关注。