一、图片木马
图片码就是在一张图片中写上我们的一句话,然后利用php的文件包含特性,可以将我们的图片以php进行解析
先找一张图片,再创建一个php的一句话木马
适用:文件包含,解析漏洞

图片木马制作的两种方法
(1)在cmd里面敲击 copy 命令
copy 图片名字 /b + 脚本名字 /a 生成的名字
(2)把图片以记事本打开。保留前三行其他的全部删除。在最后加上木马即可。
注意:这种报错的图片不行

这种可以
第一种操作具体流程


2.上传成功

3.
127.0.0.1/upload-labs/include.php?file=upload/7020241112202320.jpg(相对路径,包含上传的jpg文件)
成功解析

4.链接
二、文件头检测
1.基本概念
图片的格式在防护中通常是不会使用后缀进行判断的依据,文件头是文件开头的一段二进制码,不同类型的图片也就会有不同的二进制头。
JPEG (jpg),文件头:FF D8 FF E1
PNG (png),文件头:89 50 4E 47
GIF (gif),文件头:47 49 46 38

如果使用只有一句话木马的jpg等图片文件就不行
这时可以使用图片马
三、二次渲染
二次渲染:就是根据用户上传的图片,新生成一个照片,将原始的图片删除,将新的图片添加到文件夹中。
操作过程:
将图片马上传
将上传的图片下载
使用010editor进行图片比较

红色为渲染的地方,在灰色的地方重新写木马即可
四、木马其他绕过方式
upload-19


upload-20
依然是依靠代码审计找出漏洞,那么看看源码吧
//检查MIME
$msg = "禁止上传该类型文件!";
}else{
//检查文件名
}
$ext = end($file);
$allow_suffix = array('jpg','png','gif');
if (!in_array($ext, $allow_suffix)) {
$msg = "禁止上传该后缀文件!";
}else{
$file_name = reset($file) . '.' . $file[count($file) - 1];
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH . '/' .$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$msg = "文件上传成功!";
$is_upload = true;
} else {
$msg = "文件上传失败!";
}
}
}}else{
$msg = "请选择要上传的文件!";}
相比较于上一关的源码,此处服务器端先是检查了MIME类型,然后判断save_name参数是否为空,为空就把文件本来名称赋值给
如果不是数组则将其拆成数组,然后数组最后一个的值(end函数就是取数组最后一个的值)同白名单做比较,符合jpg、png、gif中的一种就允许上传了。
在允许上传之后还要把数组的值拼接在一起对文件进行重命名。
所以我们可以构造save_name[0]=cs.php/ save_name[1]置为空 save_name[2]=jpg(一个白名单的合法后缀)。
总结:
把文件名分为两部分
修改后,其中第一部分是cmd.php
d第二部分是jpg
因为有count函数,不计算空的
拼接时拼接数组中的0和1下标的元素
最后拼接的是cmd.php.

思维导图在本地有