php 上传图片漏洞,ZwelL通用图片上传漏洞

和大牛在奶茶厅喝奶茶的时候意外发现的。直接贴源码https://raw.githubusercontent.com/hardwork537/code/master/uploadimg.php让大家感受下

/* * ****************************************************************************

参数说明:

$max_file_size : 上传文件大小限制, 单位BYTE

$destination_folder : 上传文件路径

$watermark : 是否附加水印(1为加水印,其他为不加水印);

使用说明:

1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;

2. 将extension_dir =改为你的php_gd2.dll所在目录;

* **************************************************************************** */

//上传文件类型列表

$uptypes = array(

'image/jpg',

'image/jpeg',

'image/png',

'image/pjpeg',

'image/gif',

'image/bmp',

'image/x-png'

);

$max_file_size = 2000000; //上传文件大小限制, 单位BYTE

$destination_folder = "uploadimg/"; //上传文件路径

$watermark = 1; //是否附加水印(1为加水印,其他为不加水印);

$watertype = 1; //水印类型(1为文字,2为图片)

$waterposition = 1; //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);

$waterstring = "tony"; //水印字符串

$waterimg = "xplore.gif"; //水印图片

$imgpreview = 1; //是否生成预览图(1为生成,其他为不生成);

$imgpreviewsize = 1 / 2; //缩略图比例

?>

ZwelL图片上传程序

上传文件:

允许上传的文件类型为:= implode(', ', $uptypes) ?>

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

if (!is_uploaded_file($_FILES["upfile"][tmp_name])) {

//是否存在文件

echo "图片不存在!";

exit;

}

$file = $_FILES["upfile"];

if ($max_file_size < $file["size"]) {

//检查文件大小

echo "文件太大!";

exit;

}

if (!in_array($file["type"], $uptypes)) {

//检查文件类型

echo "文件类型不符!" . $file["type"];

exit;

}

if (!file_exists($destination_folder)) {

mkdir($destination_folder);

}

$filename = $file["tmp_name"];

$image_size = getimagesize($filename);

$pinfo = pathinfo($file["name"]);

$ftype = $pinfo['extension'];

$destination = $destination_folder . time() . "." . $ftype;

if (file_exists($destination) && $overwrite != true) {

echo "同名文件已经存在了";

exit;

}

if (!move_uploaded_file($filename, $destination)) {

echo "移动文件出错";

exit;

}

$pinfo = pathinfo($destination);

$fname = $pinfo[basename];

echo " 已经成功上传
文件名: " . $destination_folder . $fname . "
";

echo " 宽度:" . $image_size[0];

echo " 长度:" . $image_size[1];

echo "
大小:" . $file["size"] . " bytes";

if ($watermark == 1) {

$iinfo = getimagesize($destination, $iinfo);

$nimage = imagecreatetruecolor($image_size[0], $image_size[1]);

$white = imagecolorallocate($nimage, 255, 255, 255);

$black = imagecolorallocate($nimage, 0, 0, 0);

$red = imagecolorallocate($nimage, 255, 0, 0);

imagefill($nimage, 0, 0, $white);

switch ($iinfo[2]) {

case 1:

$simage = imagecreatefromgif($destination);

break;

case 2:

$simage = imagecreatefromjpeg($destination);

break;

case 3:

$simage = imagecreatefrompng($destination);

break;

case 6:

$simage = imagecreatefromwbmp($destination);

break;

default:

die("不支持的文件类型");

exit;

}

imagecopy($nimage, $simage, 0, 0, 0, 0, $image_size[0], $image_size[1]);

imagefilledrectangle($nimage, 1, $image_size[1] - 15, 80, $image_size[1], $white);

switch ($watertype) {

case 1: //加水印字符串

imagestring($nimage, 2, 3, $image_size[1] - 15, $waterstring, $black);

break;

case 2: //加水印图片

$simage1 = imagecreatefromgif("xplore.gif");

imagecopy($nimage, $simage1, 0, 0, 0, 0, 85, 15);

imagedestroy($simage1);

break;

}

switch ($iinfo[2]) {

case 1:

//imagegif($nimage, $destination);

imagejpeg($nimage, $destination);

break;

case 2:

imagejpeg($nimage, $destination);

break;

case 3:

imagepng($nimage, $destination);

break;

case 6:

imagewbmp($nimage, $destination);

//imagejpeg($nimage, $destination);

break;

}

//覆盖原上传文件

imagedestroy($nimage);

imagedestroy($simage);

}

if ($imgpreview == 1) {

echo "
图片预览:
";

echo "\"图片预览:\r文件名:"";

}

}

?>

不得不佩服这个作者。仅仅验证了上传文件的类型,不判断文件到底是否是需要的//上传文件类型列表

$uptypes = array(

'image/jpg',

'image/jpeg',

'image/png',

'image/pjpeg',

'image/gif',

'image/bmp',

'image/x-png'

);

上传的时候只是需要匹配或者是里面的类型就可以直接任意文件上传了e3cacd35bcb1447b91fdb5aa3a1216ed.png。直接上传,谷歌搜了下,发现不少。网速问题,自己去搜呗

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值