点击十四关,并选择显示源码:
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函数和image_type_to_extension 获取图像的后缀。
$info = getimagesize($filename);
其中,$filename是要获取信息的图像文件的路径。该函数返回一个数组$size,数组元素如下:
- $size[0]: 图像的宽度
- $size[1]: 图像的高度
- $size[2]: 图像的类型
- $size[3]: 图像的MIME类型
- $size[bits]: 图像的位深度
- $size[channels]: 图像的通道数
- $size[mime]: 图像的MIME类型
$ext = image_type_to_extension($info[2]) : 根据指定的图像类型返回对应的后缀名。
striipos()函数返回字符串在另一个字符串中第一次出现的位置。(这里用来判断后缀名是否为图片)
getimagesize()在获图像信息的时候,会涉及到图像的读取,此时我们可以利用该漏洞,上传图片马。制作过程同第十三关(十三关题解),使用copy命令,然后上传图片马。
构造url地址,并访问,从而获得目标服务器的php信息