网站地图    收藏   

主页 > 后端 > 网站安全 >

qibocms下载系统 注入&另外一个老问题 - 网站

来源:自学PHP网    时间:2015-04-16 23:15 作者: 阅读:

[导读] RT 详细说明:下载地址 http: bbs qibosoft com down2 php?v=download1 0 down 0x01 老问题在download inc job down_encode php中if(eregi( php,$url)){header(location:$true_url);exit;}$webdb[upfi...

RT.

详细说明:

下载地址 http://bbs.qibosoft.com/down2.php?v=download1.0#down



0x01 老问题



在download/inc/job/down_encode.php中



if(eregi('.php',$url)){
header("location:$true_url");
exit;
}
$webdb[upfileType] = str_replace(' ','|',$webdb[upfileType]);
if(file_exists(ROOT_PATH."$webdb[updir]/$url") && eregi("($webdb[upfileType])$",$url) && filesize(ROOT_PATH."$webdb[updir]/$url")<1024*1024*10)
{
$filetype=substr(strrchr($url,'.'),1);
ob_end_clean();
header('Last-Modified: '.gmdate('D, d M Y H:i:s',time()).' GMT');
header('Pragma: no-cache');
header('Content-Encoding: none');
header('Content-Disposition: attachment; filename='."$true_name.$filetype");
header('Content-type: '.$filetype);
header('Content-Length: '.filesize(ROOT_PATH."$webdb[updir]/$url"));
readfile(ROOT_PATH."$webdb[updir]/$url");
exit;





厂商对上次我爆的那个洞做了修补

eregi("($webdb[upfileType])$",$url 白名单验证。



但是在download/inc/down_encode.php 中



$true_url=tempdir($url);
if(eregi('.php',$url)){
header("location:$true_url");
exit;
}

if(file_exists(ROOT_PATH."$webdb[updir]/$url")&&filesize(ROOT_PATH."$webdb[updir]/$url")<1024*1024*10)
{
$filetype=substr(strrchr($url,'.'),1);
ob_end_clean();
header('Last-Modified: '.gmdate('D, d M Y H:i:s',time()).' GMT');
header('Pragma: no-cache');
header('Content-Encoding: none');
header('Content-Disposition: attachment; filename='."$true_name.$filetype");
header('Content-type: '.$filetype);
header('Content-Length: '.filesize(ROOT_PATH."$webdb[updir]/$url"));
readfile(ROOT_PATH."$webdb[updir]/$url");
exit;





却没有做白名单验证 只是黑名单验证是否含有.php 按照上次发的那个可以绕过。



然后这个涉及到了个入库出库 然后在发布软件的时候图片地址写要下载的就行了



绕过黑名单参照这个。及剩下的参照下面这个 我就不多说了。



WooYun: qibocmsV7整站系统任意文件下载导致无限制注入多处(可提升自己为管理 Demo演示)



____________________________________________________________________





0x02 注入



在全局文件中

$_POST=Add_S($_POST);
$_GET=Add_S($_GET);
$_COOKIE=Add_S($_COOKIE);





function Add_S($array){
foreach($array as $key=>$value){
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;
}



这里调用了这个函数来对get post cookie来转义 如果gpc off的话 就addslashes对数组中的value进行转义 这里没有对数组中的key进行过滤。



在download/member/post.php中

elseif($job=='manage')
{
if(!$atc_power)showerr("你没权限");
if($rsdb[pages]<2){
header("location:post.php?job=edit&aid=$aid");exit;
}
if($step==2){
asort($orderDB);
$i=0;
foreach( $orderDB AS $key=>$value){
$i++;
$db->query("UPDATE {$_pre}reply SET orderid=$i WHERE aid='$aid' AND rid='$key'");
}
refreshto("$FROMURL","排序成功",1);
}





if($lfjid){
if($web_admin||$lfjuid==$rsdb[uid]){
$atc_power=1;
}
}



这个只要是你自己发布的就有权限了。 所以我们自己先发布一个。



foreach( $orderDB AS $key=>$value){
$i++;
$db->query("UPDATE {$_pre}reply SET orderid=$i WHERE aid='$aid' AND rid='$key'





这里把数组中的key循环出来后 没有做任何的过滤就带入到了查询当中

造成了注入。



漏洞证明:

20.jpg





首先注册一个会员 投稿 因为if($rsdb[pages]<2){

header("location:post.php?job=edit&aid=$aid");exit;

}

验证了两页 所以得发两页。



25.jpg





然后就成功注入了。

修复方案:

对于第一个问题 做白名单



第二个 $key=intval($key);

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论