欢迎来到[自学php网] ①群 AG亚游集团

AG亚游集团 > 网站后台 > 网站安全 >

DEDECMS全局变量覆盖漏洞科普

来源:自学PHP网 ?? 时间:2018-11-07 14:20?作者:

[导读] DEDECMS全局变量覆盖漏洞最早是狼族安全小组09年公布的,官方硬撑到现在没修补漏洞,到现在基本上覆盖了DEDECMS全部的版本。个人猜想是不是官方故意留下的后门。下面稍微科普下这个...

DEDECMS全局变量覆盖漏洞最早是狼族安全小组09年公布的,官方硬撑到现在没修补漏洞,到现在基本上覆盖了DEDECMS全部的版本。个人猜想是不是官方故意留下的后门。下面稍微科普下这个漏洞,大牛们可以完全无视:

 

一. 了解PHP超级全局变量

下面是PHP的超级全局变量,可以了解一个特性,全是数组。

$GLOBALS, 所有全局变量数组
$_SERVER, 服务器环境变量数组
$_GET,通过GET方法传递给脚本的变量数组
$_POST, 通过POST方法传递给脚本的变量数组
$_COOKIE,cookie变量数组
$_REQUEST,所有用户输入的变量数组,包括$_GET, $_POST和$_COOKIE所包含的输入内容
$_FILES,与文件上传相关得变量数组
$_ENV,环境变量数组
$_SESSION,会话变量数组

 

二. 理解$_GET变量

 

可以写个PHP来看看:

<?phpvar_dump($_GET);?>

 

访问

/wwwaff42ctoaff4com /test.php?key=value
得到

array(1) { ["key"]=> string(5) "value" }

OK,看到这里应该明白了,$_GET就是个数组,我们用GET方法可以传一个数组。

 

再访问

/wwwaff42ctoaff4com /test.php?key[arr1]=value

得到

array(1) { ["key"]=> array(1) { ["arr1"]=> string(5) "value" } }

我们通过GET方法传入了一个嵌套数组。

 

到这里其实问题就出来了,很多PHP安全资料都没提过GET传嵌套数组的这个特性,偶尔在几个exploit里看到 - -!

 

三. 深入跟进DEDECMS全局变量注册漏洞

 

真正理解了$_GET变量后,我们来深入跟进这个漏洞产生的真正原因,模拟一下漏洞的全过程:

 

提交一个嵌套数组:

/wwwaff42ctoaff4com /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:安全就是基础,必须理解好基础。

最新文章

点击排行

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号@版权所有AG亚游集团

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

皇马谈好的引援为啥最后黄了 最主要原因在于他 郭士强:从未想过离开篮球 梦想没实现怎能放弃 中学生泼汽油烧狗遭人肉 有人堵门声讨寄送花圈 欧洲官员“打脸”特朗普:美欧关税协议范围被夸大 人民日报海外版:各党派拟提交的提案体现界别特色 独角兽热潮下需要冷静思考:修好路不意味可无证驾驶 林丹全英4次大战李宗伟:3次决战PK 超级丹夺2冠 嘉凯城董事长甄立涛离职 接任恒大地产总裁 不按套路出牌 特朗普“御用”电台直播遇尴尬一幕 海帅:肯定不会继续执教拜仁 推荐此人接过教鞭 孔蒂:切尔西打欧冠学不了尤文 有一点差太远了 男子违章被交警拦下 发朋友圈点赞超20个可免罚款
东芝半导体“肥皂剧”剧终 存储市场乱战或将揭幕 伊拉克埃尔比勒省办事处遭枪手袭击 2名警察受伤 羽生结弦确认缺席米兰世锦赛 脚踝伤仍未痊愈 网络直播平台“雾霾”消散:色情视频减少 内容变雅 辽媒:雅尼斯胜过闵鹿蕾 辽篮没资格轻视北京队 论欧冠梅西真远远不如C罗 巴萨媒体也为他点赞 大乐透1注2400万落河北 乐善奖首期开2注5千元 女子诽谤诬陷法官 被处司法拘留10日罚款3000元 5名90后护士殴打患者受审 家属曾要调监控被拒绝 名宿:温格是个斗士 连输弱旅+曼城会让他尴尬 苹果联合创始人被骗走7枚比特币 价值逾7万美元 人大司法委员会建议修改有关法律 向校园欺凌说不
监拍女生吃饭被下药后性侵 牢记这点太重要 皇马巴黎均战平 周六足彩爆3562注3645元 女排休息日三将主动加练 郎平:距离目标还很远 春寒料峭 这样养生增强体质不生杂病 齐达内:皇马花4亿买内马尔?我觉得价都涨疯了 浪潮孙丕恕:推动人工智能与工业互联网的融合发展 台退役将领:台独分子主要来自日裔“皇民”等群体 三六零不差钱却强行融资百亿 增发定价或暗藏玄机 长生生物公布子公司冻干人用狂犬病疫苗调查进展 25岁我赚了3个亿 品牌设计公司排行榜 前景最好的十大专业 品牌设计公司排行榜 AG亚游集团