zoukankan      html  css  js  c++  java
  • 【网络安全】给你讲清楚什么是文件上传漏洞

    文件漏洞

    什么是文件上传漏洞

    文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器。

    可以看出来这种攻击的危害很大,攻击者一旦拿到服务器权限,那必然“天下大乱”。想要预防这种攻击必然要知道这种攻击的原理,攻击的方式。这样我们才能做出更好的应对。本文就从攻击原理攻击方式预防方法等方面来介绍下文件上传漏洞。知己知彼,方能百战不殆。

    文件漏洞攻击成功的条件

    一个“可疑”文件成功上传到后台后并不代表攻击就成功了。还必须满足一定的条件才能才能对后台造成攻击:

    • 首先上传的文件能够被Web容器解释执行(比如php被Apache容器执行),所以文件上传后所在的目录要是Web容器所覆盖到的路径;

    • 其次,用户能够从Web上访问这个文件,如果文件上传了,但用户无法通过Web访问,或者无法得到Web容器解释这个脚本,那么也不能称之为漏洞。

    以上条件缺一不可。

    一个文件上传漏洞的列子

    一般情况下,我们会通过文件名的后缀来判断上传的文件是否符合要求。但是在某些时候,攻击者可以手动修改了上传过程中的POST包,在文件名后添加一个%00字节额,则可以截断某些函数对文件名的判断。因为在许多语言的函数中,比如在C、PHP等语言的常用字符串处理函数中,0x00被认为是终止符。受此影响的环境有Web应用和一些服务器。比如应用原本只允许上传JPG图片,那么可以构造文件名为xxx.php[].JPG,其中[]为十六进制的0x00字符,.JPG绕过了应用的上传文件类型判断;但对于服务器来说,此文件因为0x00字符截断的关系,最终保存文件时变成了xxx.php。

    预防文件上传漏洞的一些方法

    1. 客户端校验文件名

      在客户端使用JS脚本判断上传的文件名是否在白名单之内,如果不符合直接拒绝上传。但是这种校验很容易让攻击者绕过,比如说攻击者可以禁用JS,也可以先上传一个分发的文件名,让后将请求截住,手动将文件名改成非法的文件名。所以光前端进行校验是远远不够的,还需要后台一同进行校验。

    2. 服务端文件名校验

      上面提到攻击者可以绕过前端校验,所以还需要后台一起校验文件名是否在白名单内。但是光校验文件名的攻击者还是能有办法绕过。比如说0x00截断(上面提到的,hacker.php%00.jpg),因此还需要其他手段进行进一步校验。

    3. 文件头校验

      查看上传过来的文件的文件头是否和扩展名匹配。这种方式一定程度上能降低文件上传成功的概率。但是个人觉得最稳妥的预防方法还是以下几种。

    4. 将上传上来的文件和Web服务器隔离,专门存放到一台文件服务器上,通过文件ID来访问。如果非要将文件存放在Web服务器一起,可以将存放文件的文件夹的可执行权限去掉。

    5. 将上传的文件进行随机重新命名。

    参考

  • 相关阅读:
    开源:不断创新的动力
    Inkpad中文翻译已合并到官方项目
    Inkpad绘图原理浅析
    Vectoroid
    发布大幅重构优化的 TouchVG 1.0.2
    清理掉一直想研究的开源项目
    函数指针调用方式
    音视频直播优化
    std::unique_lock与std::lock_guard区别示例
    c++容器的操作方法总结
  • 原文地址:https://www.cnblogs.com/54chensongxia/p/11662252.html
Copyright © 2011-2022 走看看