漏洞文件:/Application/Weibo/Controller/IndexController.class.php
public function uploadMyExp(){
$flag=1;
$uid=is_login();
$mycollection='mycollection';
$config = array(
'maxSize' => 5*1024*1024,
'rootPath' => './Uploads/',
'savePath' => 'Expression/'.$mycollection.'/',
'saveName' => '',
'exts' => array('jpg', 'gif','png','jpeg'),
'autoSub' => true,
'subName' => '',
'replace' => true,
);
if($_FILES['file']['size']<5*1024||$_FILES['file']['size']> 5*1024*1024){
echo json_encode('-3');
$flag=0;
}
$upload = new pload($config); // êμày»ˉéÏ′«àà
$info = $upload->upload($_FILES);
if (!$info) { // éÏ′«′íÎóìáê¾′íÎóDÅÏ¢
echo json_encode('-1');
$flag=0;
}获取当前登录的uid,然后获取上传的FILES进入upload

正常的一个流程

这里有一个check检测,跟进

对后缀进行了检测.所以我们得必须满足后面.jpg这个条件

文件名的控制

当saveName为空时则true并截取我们上传的文件名

最后则是检测后缀还有MIME类型,true则进入uplandfie.复现

为了方便我var_dump了出来

成功上传
任意文件删除:
$name=I('post.name','','op_t');
$allname=substr($name,strrpos($name,'\')+1,strlen($name)-strrpos($name,'\')-1);
// $iname=substr($allname,0,strrpos($allname,'.'));
$rp= $this-> ROOT_PATH = str_replace('/Application/Weibo/Controller/IndexController.class.php', '', str_replace('\', '/', __FILE__));
$path = $rp."/Uploads/Expression/" ;
if(!file_exists($path.$mycollection)){
mkdir($path.$mycollection,0777,true);
}
$path0=$rp.'/Uploads/Expression/'.$mycollection.'/'.$allname;
$file=file_get_contents($path0);
$map['md5']=md5($file);
$iexp_id=$iexpression->where($map)->getField('id');
if($iexp_id){
$map1['iexpression_id']=$iexp_id;
$map1['uid']=$uid;
$res=$iexplog->where($map1)->select();
if($res){
echo json_encode('0');
$iexp_path=$iexpression->where($map)->getField('path');
if($iexp_path!="/Uploads/Expression/".$mycollection.'/'.$allname)
{
unlink($path0);
}Post获取name并进入了op_t函数

可以看见这是针对安全过滤,并没有针对路径跳转过滤

然后进行截取,很简单的就可以绕过的一种截取

这里就很狗血的一段了!进入数据库查询当查询出来的内容与我们输入的内容不符合的时候则删除不符合内容


