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
真 解析成功