文章目录
12、pass12-白名单-%00截断
-
查看源码(部分)
... $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext; ...
-
分析:
- 之前代码通过获取文件扩展名,使用白名单过滤
- 上传文件目标路径通过GET方式传参
-
利用思路:GET传参,使用%00截断
-
步骤:
- 正常上传后缀为jpg|png|gif的php文件
- bp拦截,传递如图所示参数:
-
原理:
-
条件:
- php版本<5.3.4
- 实测5.3.29没成功,5.2.17成功
- 参数:magic_quotes_gpc关闭
- php版本<5.3.4
-
在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。截断的产生核心,就是chr(0)字符 。这个字符即不为空(Null),也不是空字符(“”),更不是空格!当程序在输出含有chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据直接忽略,这就导致漏洞产生的原因。
-
-
适用条件:上传路径可控
13、pass13-白名单-0x00截断
-
查看源码(部分)
... $img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext; ...
-
分析:其他同pass12,不同的是这里save_path路径改为post方式获取。
-
利用思路:POST传参,使用0x00截断
-
步骤:
-
正常上传后缀为jpg|png|gif的php文件
-
bp拦截
-
方式1-直接修改post传递的参数,但是记得%00进行url解码,图示: -
方式二-1.php后任意跟字符,修改Hex编码为00,图示:
-
-
-
原理:
- 条件
- php版本<5.3.4
- 实测5.3.29没成功,5.2.17成功
- 参数:magic_quotes_gpc关闭
- php版本<5.3.4
- 同理同pass12,只不过这里参数通过POST方式接收。POST方式不自动解码url编码字符,说以要手动解码url字符%00或者通过Hex直接修改为16进制的00(即0x00)
- 条件
-
适用条件:上传路径可控
14、pass14-内容及其他-文件头检测
-
查看源码(文件头检测部分)
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; }
- 分析改函数功能从文件后去前2个字节的内容,拼接转换为整数,根据数值判断是否为jpg|png|gif中的一种,否则为unknown
-
利用思路:
-
伪造文件头信息
- JPEG (jpg),文件头:FFD8FF
- PNG (png),文件头:89504E47
- GIF (gif),文件头:47494638
-
合成图片马
-
-
步骤
-
伪造文件头
-
上传带有php一句话的php文件
-
拦截修改文件头信息
-
通过菜刀连接
-
-
合成图片马
-
copy 1.png /b + 1.php/a 2.png
-
上传
-
菜刀链接
-
-
-
原理:每种文件头信息都有其唯一标志,通过伪造文件的头信息或者合成图片马,可以绕过通过文件头检测文件类型,进而通过菜刀链接
15、pass15-内容及其他-getimagesize
利用思路和原理同pass14,getimagesize函数的详细说明自行查阅相关文档
16、pass16-内容及其他-exif_imagetype
利用思路和原理同pass14,exif_imagetype函数的详细说明自行查阅相关文档
17、pass17-内容及其他-二次渲染
这里我们只考虑二次渲染的问题。
这里我们以gif图片为例,通过copy命令制作一个图片马,上传,对比上传前后,二次渲染会把后面加入的一句话木马去除。
显然,这样的图片马上传方式失败了。
-
利用思路:不过二次渲染会保留一些文件内容不会改变,所以在制作图片马之前,我们先观察二次渲染前后图片不会改变的地方,将其代码写入其中即可绕过二次渲染。
-
步骤:
-
利用010Editor软件对比文件上传前后一致的代码部分:
-
替换后在上传对比:
-
这就完成了绕过,根据图片格式大小等的不同,代码匹配有所差异。
- 原理:二次渲染会保留部分代码与原文件相同,这里我们就可以插入一句话,通过菜刀连接,完成绕过。
18-21
下面几关给出参考连接,不在详述,如有问题,可以解答。
后记
QQ群:433529853