关于文件上传漏洞的二三事
作者:互联网
目录
……
什么是文件上传漏洞?
Web通常都具备上传功能。卖家上传花里胡哨的图片,你在能在购物网站上看到琳琅满目的商品,从而被诱惑购买。你觉得你的头像不够非主流,所以你才精心挑选一张霸气侧漏的图片来作为你的头像。文件上传功能已经成为了网上冲浪的一部分,但是稍有不慎就会产生难以挽回的损失······
程序员在写代码时考虑不够充分或是过于信任客户,对上传功能的控制不足或处理缺陷,让不法用户可以越过其本身权限向服务器上传可执行的脚本文件。比如木马,病毒,webshell等等。不乏用户将恶意代码植入服务器中后,在利用一些工具进行连接,以达到其不可告人的目的。
webshell是以asp,php,jsp等网页文件形式存在的一种命令执行环境,可以理解为网页后门
漏洞怎么产生?
服务器配置不当
对上传文件的限制不足
上传文件的限制被绕过
文件路径截断
常见利用方式
使用pikachu靶场进行学习研究,操作均在虚拟环境中完成
前端/客户端检测
可以查看页面源代码,得知检测在前端
那么有什么意义呢?
按照正常操作,我们必须上传一张图片
先写一个php文件,其中包含一句话木马<?php @eval($_POST['cmd']);?>
然后将该文件上传,于是我们失败了
但是因为是前端检查文件类型,所以可以尝试去绕过前端的检查,在此可以修改前端代码,也可以按照下面的方法
没有关系,我们可以先将其改名为1.jpg,绕过前端检查后,在burpsuite中修改其后缀,将filename的1.jpg改为1.php即可
页面提示上传成功,并且提示了上传路径
然后用菜刀进行连接即可
服务器端检测
这次检查的是mime类型,我们直接上传一个php文件,然后抓包
只需要将content-type更改为 image/jpg 即可上传成功
MIME 是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问时,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。
这一关就是检查MIME的类型来判断上传文件是否合法。
因为我们这次上传的文件代码内容为 phpinfo(),利用该代码可以查看php信息
尝试访问该链接
文件内容检测
打开网页,点击提示后,提示让我们先了解 getimagesize,那就去了解呗
得知该函数可以测定图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度,也就是说这个函数会通过读取文件头,返回图片的长、宽等信息,如果没有相关的图片文件头,函数会报错。
那我们可以在代码前添加一个图片的头,比如
也可以使用图片木马,上传成功后利用文件包含漏洞执行代码
我这一关有问题,故不做演示
……
相关绕过方法还有很多,在此只是简单的举了几个例子,其他的可以参考upload-labs相关文章。
如何防御
每种漏洞的防御都离不开开发者的安全意识,开发者要时刻以用户不可信的态度去编写代码,最大可能的限制漏洞的产生一面,才能避免造成巨大的损失。
对文件上传漏洞来说,最好能在客户端和服务器端对用户上传的文件名和文件路径等项目分别进行严格的检查。客户端的检查虽然可以借助工具绕过,但是这也可以阻挡一些基本的试探。服务器端的检查尽可能使用白名单过滤的方法,这样能防止大小写等方式的绕过,同时还需对%00截断符进行检测,对HTTP包头的content-type也和上传文件的大小也需要进行检查。
在运行阶段运维人员要时刻注意观察日志,并且经常使用工具对web服务器进行扫描,对可能的攻击行为早做分析,早做处理。
over!!
标签:文件,前端,二三,漏洞,php,上传,客户端 来源: https://blog.csdn.net/weixin_45557138/article/details/121225907