网站地图    收藏   

主页 > 后端 > 网站安全 >

SinaEditor二次开发JSP版本上传漏洞简单分析 - 网站

来源:自学PHP网    时间:2015-04-17 14:11 作者: 阅读:

[导读] 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

添加评论