当前位置:首页 >> 网络通讯 >> 网络安全 >> 内容

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

时间:2013/4/19 12:09:00 作者:平凡之路 来源:xuhantao.com 浏览:

0×00 SinaEditor简介
0×01 漏洞描述
0×02 漏洞利用
0×03 漏洞分析
0×04 漏洞修复
 
作者:itleaf
 
注:本人初学者,分析有误处还请指正
 
0×00 SinaEditor简介
 
SinaEditor是基于新浪博客编辑器的开源编辑器。您可以用它来编辑富文本内容。
 
编辑器的核心是一个执行队列的调度系统,涛涛电脑知识网,加入插件来实现功能,www.xuhantao.com,并通过事件来驱动编辑器的运行。我们对事件进行了一次封装,有效的解决了匿名事件函数不能回收的问题,减少内存占用的情况。
 
特性
 
所有的功能基于插件方式编写。可以自由配置功能。
提供了Range的API。对IE的text range进行了标准的兼容及扩展,降低插件编写难度。
支持外观修改。可通过在修改或添加极少代码的情况下,让编辑器的呈现变得更个性化。
更多参考此处
 
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>
<%
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>");
 } // 此处/upload/Image难道作者在抄代码时也没弄明白?
 }
 %>
 
 
0×04 漏洞修复
 
在第31行末尾添加如下代码
 
if(sLocalFileName.contains(“.jsp”)){
 
return ;
 
}
 
此为针对此版本编辑器图片上传漏洞的临时解决方案
 
 
 
摘自itleaf’s blog ?p=189

相关文章
  • 没有相关文章
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1