Upload-labs文件上传漏洞(图片马)——Pass13
0×00 题目概述
0×01 源代码
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 = "上传出错!";
}
}
}
源代码也提示只读两个字节,因此直接上传图片马试试
0×02 解题步骤
将普通图片和一句话木马文本放到同一个文件夹下,要使用的是1.php和6.jpg
在目录下输入cmd即可进入该目录下的任务管理器
然后输入
copy 6.jpg /b + 1.php /a 2.png
表示将文件b:6.jpg与文件a:1.php合成为文件2.png
这时候看到文件夹中多了一个文件2.png
图片马制作完成,可直接上传
抓包看图片解析
能够解析出来其中的webshell代码
但是吧,菜刀和蚁剑连不上
应该是无法解析图片的原因
所以根据题目一开始的提示,要使用文件包含漏洞
在www/upload-labs/upload目录下建立一个php文件,代码如下
<?php
/*
本页面存在文件包含漏洞,用于测试图片马是否能正常运行!
*/
header("Content-Type:text/html;charset=utf-8");
$file = $_GET[file];
if(isset($file)){
include $file;
}else{
show_source(__file__);
}
?>
然后我上传的文件被重命名为5220200728083133.jpg,所以跳转到如下url
就可以解析出如下页面(和抓包里面看到的一样)
即解析成功
这样看可能不太直观,就用phpinfo来看是否解析成功
重现建一个图片“马”,内容为图片和phpinfo代码
直接上传
然后用文件包含漏洞的指定url打开
7420200728085254.jpeg
真 解析成功
