upload-labs第十一关 && 第十二关(截断漏洞)
这是一个古老的漏洞,在php5.3.4以后就被修复了
由于我配置环境没有成功,这里放上另一位博主的链接
https://blog.csdn.net/u014029795/article/details/102889924
upload-labs第十三关(文件头检查)
function getReailFileType($filename){
$file = fopen($filename, "rb");
$bin = fread($file, 2); //只读2字节
fclose($file);
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$fileType = '';
switch($typeCode){
case 255216:
$fileType = 'jpg';
break;
case 13780:
$fileType = 'png';
break;
case 7173:
$fileType = 'gif';
break;
default:
$fileType = 'unknown';
}
return $fileType;
}
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$temp_file = $_FILES['upload_file']['tmp_name'];
$file_type = getReailFileType($temp_file);
if($file_type == 'unknown'){
$msg = "文件未知,上传失败!";
}else{
$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;
if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = "上传出错!";
}
}
}
代码检查了文件的的前两个字节,我们只需要在文件里加上gif | jpg | png 的文件头就行
这里加的GIF的头GIF98a
然后利用文件包含漏洞
upload-labs第十四关(突破getimagesize())
function isImage($filename){
$types = '.jpeg|.png|.gif';
if(file_exists($filename)){
$info = getimagesize($filename);
$ext = image_type_to_extension($info[2]);
if(stripos($types,$ext)>=0){
return $ext;
}else{
return false;
}
}else{
return false;
}
}
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$temp_file = $_FILES['upload_file']['tmp_name'];
$res = isImage($temp_file);
if(!$res){
$msg = "文件未知,上传失败!";
}else{
$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").$res;
if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = "上传出错!";
}
}
}
getimagesize() 函数将测定任何GIF JPG PNG SWF SWC PSD TIFF BMP IFF JP2 JPX JB2 JPC XBM WBMP图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。
我在Windows下用cmd将一个hacker.jpg图片和web.php代码(`<?php
echo 'ip: '.gethostbyname($_ENV[COMPUTERNAME]);
phpinfo();)
?>`结合在一起
返回1.jpg文件,1.jpg文件表面上看起来是个正常图片
实际上里面有php程序,利用文件包含漏洞
upload-labs第十五关(突破exif_imagetype())
function isImage($filename){
//需要开启php_exif模块
$image_type = exif_imagetype($filename);
switch ($image_type) {
case IMAGETYPE_GIF:
return "gif";
break;
case IMAGETYPE_JPEG:
return "jpg";
break;
case IMAGETYPE_PNG:
return "png";
break;
default:
return false;
break;
}
}
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$temp_file = $_FILES['upload_file']['tmp_name'];
$res = isImage($temp_file);
if(!$res){
$msg = "文件未知,上传失败!";
}else{
$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$res;
if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = "上传出错!";
}
}
}
发现有exif_imagetype()函数
exif_imagetype()函数可以获取图片类型
上传方法和upload-labs第十四关方法一样
Comments | NOTHING