用户在使用本文信息时,应自行承担风险。本文不对用户因使用本文信息而导致的任何直接或间接损失承担责任。——鲁迅
知识补给库
学习内容:图片马绕过
PHP函数
getimagesize()函数
getimagesize()
函数用于获取图像文件的大小信息,包括图像的宽度、高度、类型等。
函数原型:array getimagesize(string $filename, array &$imageinfo = null)
- 参数
$filename
:图像文件的路径或 URL$imageinfo
(可选):用于存储图像的额外信息,例如 MIME 类型
- 返回值(返回一个数组,包含以下元素)
[0]
:图像宽度(像素)[1]
:图像高度(像素)[2]
:图像类型(如 1 表示 GIF,2 表示 JPEG,3 表示 PNG 等)[3]
:HTML 的height
和width
属性字符串
$image_path = 'C:\Users\Armey\Desktop\upload_test.png';
if ($size = getimagesize($image_path)) {
echo "Width: " . $size[0] . "\n";
echo "Height: " . $size[1] . "\n";
echo "Type: " . $size[2] . "\n";
echo "MIME type: " . $size['mime'] . "\n";
} else {
echo "无法获取图像信息";
}
image_type_to_extension()
image_type_to_extension()
函数用于根据指定的图像类型返回对应的文件后缀名。
函数原型:string image_type_to_extension(int $imagetype, bool $include_dot = TRUE)
- 参数
$imagetype
:图像类型,通常是IMAGETYPE_XXX
系列常量之一,例如IMAGETYPE_PNG
、IMAGETYPE_JPEG
等。$include_dot
:是否在后缀名前加一个点(.
)。默认值为TRUE
- 返回值
- 该函数返回与指定图像类型对应的文件后缀名。如果失败,则返回
false
- 该函数返回与指定图像类型对应的文件后缀名。如果失败,则返回
$image_path = 'C:\Users\Armey\Desktop\upload_test.png';
if ($size = getimagesize($image_path)) {
echo "Width: " . $size[0] . "\n";
echo "Height: " . $size[1] . "\n";
echo "Type: " . $size[2] . "\n";
echo "MIME type: " . $size['mime'] . "\n";
} else {
echo "无法获取图像信息";
}
echo image_type_to_extension($size[2]);
代码审计
打开第十五关的源代码,如下图所示
$temp_file
为上传文件的临时保存目录$res = isImage($temp_file);
判断上传的文件是否为图片,是进行保存,不是显示上传失败
isImage()
函数是开发者自定义的函数,其实现代码如下图所示:
if(file_exists($filename))
判断上传的文件是否存在。存在则继续向下执行$info = getimagesize($filename);
是获取上传图片的信息$ext = image_type_to_extension($info[2]);
获取上传图片的后缀
靶场实战
由于本关使用了getimagesize()
函数获取图片的信息,因此使用修改文件头的形式就无法生效了
- 原因:修改文件头依旧是
PHP
文件,不存在图片的宽度和高度等属性值
因此本关使用图片马进行绕过
图片马制作
准备一句话木马文件和一张正常的图片
在终端中输入命令:copy upload_test.png/b + muma.php muma.png
靶场测试
打开靶场第十五关,上传图片马
点击上传按钮后,图片马上传成功
查看图片马的存储位置
利用文件包含漏洞,解析图片马(原理在上一篇已讲,不在赘述)
- 如果包含失败,切换一下
PHP
版本(版本太低会解析失败)
使用蚁剑连接上面的URL
补充
使用记事本打开制作好的图片马,在最后可以找到插入的一句话木马。
无情的广告时间
哈哈哈哈,又到了大家喜欢的广告时间了,公众号:编码魔坊
,喜欢的话给个关注呗,点击下方小卡片,扫码即可关注,谢谢您的关注!!!