时尚起义开源话题微博系统 v.0.4.5 上传漏洞

本文深入探讨了一个存在于PHP行动上传文件中的漏洞,通过详细分析代码逻辑,揭示了漏洞成因,并提供了PoC演示,展示了如何利用漏洞上传PHP文件。

漏洞出现在/action/upload.php文件中

 1 <?php
 2 /**
 3 **
 4 **By QINIAO
 5 **/
 6 !defined('QINIAO_ROOT') && exit('access deined!');
 7 if($uid == 0)
 8 {
 9 echo "请登录后再上传照片! <a href ='javascript:history.go(-1);'>返回</a> ";
10 exit;
11 }
12 $uptypes = array( 
13 'image/jpg',
14 'image/jpeg',
15 'image/png',
16 'image/pjpeg',
17 'image/gif',
18 'image/bmp',
19 'image/x-png'
20 );
21 if($_POST['Submit']=='上传')
22     {
23     $file        =  $_FILES["upfile"];
24     $fname         =  $_FILES["upfile"]["name"];
25     $fname_array   =  explode('.',$fname);
26     $fname = $fname_array[count($fname_array)-2];  //或者这样写$fname = $fname_array['0'];
27     $extend        =  $fname_array[count($fname_array)-1];  ////或者这样写$extend = $fname_array['1'];
28     $MAX_FILE_SIZE =  512000;
29     //文件当前位置创建picture文件夹,若要在上一层目录创建则为"../picture/";
30     
31     
32     $dest_folder   =  'data/uploadfile/content/'.date('Ymd').'/';
33     
34     if($extend!="")
35         {
36         if(!in_array($file["type"],$uptypes))
37             {
38             echo "只能上传图片文件! <a href ='javascript:history.go(-1);'>返回</a> ";
39             exit;
40             }
41 ...

代码第12行,使用$uptypes定义了一个白名单,使用数组控制允许上传的文件类型,在第36的if语句行中进行判断,如果文件类型不在$uptypes数组中,则禁止上传,但是用于判断的$file是在第23行由$_FILES['upfile']赋值的,而$_FILES数组在客户端是可控的。

 

在文件后面处理上传的代码中:

 1 if(move_uploaded_file($_FILES["upfile"]["tmp_name"],$uploadfile))
 2             {
 3             $dest100=$dest_folder.$randval.'.'.$extend.'_view.jpg';
 4             chmod($uploadfile, 0755);
 5             $resizeimage = new resizeimage("$uploadfile", "100", "80", "1","$dest100");
 6             header('Location: index.php?action=group&id='.$gid.'');
 7             }
 8         else
 9             {
10             echo "图片分享失败! <a href ='javascript:history.go(-1);'>返回</a>";
11             }

会生成两个文件名,一个是上传了原始文件名,另一个是第3行代码,在原始文件名后面添加一个'_view.jpg'的后缀,估计是缩略图的文件名。

POC:

首先注册一个账号,然后发微博上传照片

上传一个测试文件test.php,其中只有一条代码phpinfo();然后需要抓包

 

 

上图是原始数据包的内容,当然不能直接上传,这样的话类型判断会过不去,上传不了的,需要修改红框标注的地方,改为$uptypes数组中定义的任何一个值即可

这是修改后的数据包

 

 

然后上传即可,在前台处,鼠标移动到图片的上方,可以看到图片路径,Php文件已经上传成功

直接在浏览器中访问该文件

 

转载于:https://www.cnblogs.com/debugzer0/p/4855760.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值