来源:自学PHP网 时间:2015-04-17 13:02 作者: 阅读:次
[导读] 0times;00 SinaEditor简介0times;01 漏洞描述0times;02 漏洞利用0times;03 漏洞分析0times;04 漏洞修复作者:itleaf注:本人初学者,分析有误处还请指正0times;00 SinaEditor简介SinaEditor是基于新浪博......
0×00 SinaEditor简介
0×01 漏洞描述 0×02 漏洞利用 0×03 漏洞分析 0×04 漏洞修复 作者:itleaf 注:本人初学者,分析有误处还请指正 0×00 SinaEditor简介 SinaEditor是基于新浪博客编辑器的开源编辑器。您可以用它来编辑富文本内容。 编辑器的核心是一个执行队列的调度系统,加入插件来实现功能,并通过事件来驱动编辑器的运行。我们对事件进行了一次封装,有效的解决了匿名事件函数不能回收的问题,减少内存占用的情况。 特性 所有的功能基于插件方式编写。可以自由配置功能。 提供了Range的API。对IE的text range进行了标准的兼容及扩展,降低插件编写难度。 支持外观修改。可通过在修改或添加极少代码的情况下,让编辑器的呈现变得更个性化。 更多参考此处http://code.google.com/p/sinaeditor/ 0×01 漏洞描述 SinaEditor为开源web编辑器,原为asp版本,有人再开发得到JSP版本,我分析的正是个存在漏洞的版本。 该版本存在上传漏洞,导致黑客直接上传jsp webshell成功入侵web服务器。 0×02 漏洞利用 0×03 漏洞分析 能力和精力有限不能对其.class文件进行反汇编分析,以下代码作简要注释 漏洞代码 <%@ page contentType="text/html;charset=utf-8" %> <%@ page import="java.text.SimpleDateFormat"%> <%@ page import="java.io.File"%> <%@ page import="java.util.*"%> <%@ page import="javazoom.upload.*"%> <%@ page import="uploadutilities.FileMover"%> <%@ page errorPage="ExceptionHandler.jsp" %> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> www.2cto.com <% request.setCharacterEncoding("utf-8"); FileMover fileMover = new FileMover(); UploadBean upBean = new UploadBean(); MultipartFormDataRequest mrequest = null; Hashtable files = null; if (MultipartFormDataRequest.isMultipartFormData(request)) { mrequest = new MultipartFormDataRequest(request,null,100*1024*1024, MultipartFormDataRequest.COSPARSER,"UTF-8"); files = mrequest.getFiles(); } String sWebRootPath = request.getRealPath("/"); String sPath=sWebRootPath+"upload\\Image"; int iFileCount = 0; String sServerFileName=""; String sLocalFileName = "";// sLocalFileName sServerFileName应该都是结构体 if ( (files != null) && (!files.isEmpty()) ) { iFileCount = files.size(); UploadFile file = (UploadFile) files.get("file1"); sLocalFileName=file.getFileName();//取得本地文件 int ii= sLocalFileName.indexOf("."); //取得本地文件.及其后面的所有字符 String sExt = sLocalFileName.substring(ii,sLocalFileName.length()); //此处调用sLocalFileName.substring //其功能应该是把.及其以后的文件进行判断,判断成功即得到其后缀 java.util.Date dt = new java.util.Date(System.currentTimeMillis()); SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS"); sServerFileName= fmt.format(dt); sServerFileName =sServerFileName + sExt; //重新构成服务器文件名 //年月日时间+随机数+后缀 File dir =new File(sPath); if (!dir.exists()){ dir.mkdirs(); } upBean.setFolderstore(sPath); upBean.setBlacklist("*.jsp"); //此处调用upBean //大致意思是判断.及其以后是否与.jsp格式匹配,一样即禁止上传,否则都通过 //由于是jsp环境,此处判断.jsp也无大碍,但是他却忽略了windows的漏洞,解析漏洞等 //绕过单单与.jsp判断的方法真是多了去了 upBean.addUploadListener(fileMover); fileMover.setNewfilename(sServerFileName); upBean.store(mrequest, "file1"); out.println("<script>window.parent.LoadIMG('/upload/Image/"+sServerFileName+"'); </script>"); } // www.2cto.com 此处/upload/Image难道作者在抄代码时也没弄明白? } %> 0×04 漏洞修复 在第31行末尾添加如下代码 if(sLocalFileName.contains(“.jsp”)){ return ; } 此为针对此版本编辑器图片上传漏洞的临时解决方案 摘自itleaf’s blog http://www.itleaf.info/?p=189 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com