zoukankan      html  css  js  c++  java
  • 文件上传漏洞

    文件上传漏洞

    用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。

    文件上传可能存在的安全问题:

    (1)上传文件为 Web 脚本,服务器的 Web 容器解释并执行了该脚本,导致代码执行——webshell

    (2)上传文件是 Flash 的策略文件 crossdomain.xml,攻击者可以控制 Flash 在该域下的行为;

    (3)上传文件是病毒、木马文件,攻击者用以诱骗用户或者管理员下载执行;

    (4)上传文件是钓鱼图片或包含了脚本的图片,在某些版本的浏览器中被作为脚本执行,进而被用于欺诈。

    webshell 形成的条件:

    (1)上传的文件位于 Web 容器能够覆盖的目录,从而能够被 Web 容器解释执行;

    (2)用户能够从 Web 上访问这个文件,从而触发 Web 容器解释执行上传的脚本;

    另外,上传的文件内容不被破坏,比如安全检查、格式化、图片压缩等,确保上传的脚本可用。

    在防御文件上传漏洞的时候切忌使用黑名单机制,因为该方法不全面、不可靠。

    文件上传中的防与攻:

    (1)防:上传时检测文件名后缀;攻:① 构造文件名 “filename.php.合法后缀”(原理:有些服务器端从左至右检测文件,将遇到的第一个 “.???” 作为文件后缀;有些 Web Server 对文件名的解析时从右往左解析的,直到遇见一个它认识的文件类型为止,比如 Apache);② 构造文件名 “filename.php[].合法后缀”(原理:在大多语言中 “0x00” 或 “” 是终止符(0字节截断),这种形式的文件名可以绕过应用的上传文件类型判断,但对于服务器端,此文件会因为 0字节截断的问题,最终变成 filename.php);③ 在 IIS 提供 web 服务的站点中,构造文件名 “filename1.php;filename2.合法后缀”(原理:在 IIS 和 Windows 环境下,字符 “;” 常被用作截断字符);

    (2)防:上传时检测文件头;攻:伪造合法的文件头,当 Web Server 将该文件当做脚本文件解析时攻击成功。

    (3)用户配置未妥当配置 Web 服务系统的一些功能带来的安全隐患:① IIS 的 WebDav 中定义的 PUT、MOVE 方法。攻击者可以通过 OPTIONS 方法探测服务器支持的 HTTP 方法类型,如果支持 PUT,则使用 PUT 上传一个指定的文本文件,最后通过 MOVE 改写为脚本文件。② PHP 的 CGI 路劲解析问题:当访问 http://www.xxx.com/path/test.jpg/notexist.php 时,会将 test.jpg 当做 PHP 进行解析,其中 notexist.php 是不存在的文件。原因是,当 PHP 的配置选项 cgi.fix_pathinfo=1 时,在映射 URI 的时候将递归查询路径确认文件的合法性。notexist.php 是不存在的,所以将往前递归查询路径,直到检测到存在的 test.jpg 文件。此时 SCRIPT_FILENAME 为 /path/test.jpg,而 PATH_INFO 为 notexist.php,最终 test.jpg 被当做 PHP 文件进行解析。

    (4)利用上传文件钓鱼:低版本的 IE 浏览器(IE6/7)会将图片文件当做 HTML 进行解析,不怀好意者可以将网页跳转的代码藏在图片里,然后将图片上传,然后传播该图片。查看该图片的用户将被跳转到一个恶意站点,掉进坏人的陷阱。

    避免文件上传功能带来的安全问题

    (1)文件上传的目录设置为不可执行;

    (2)用白名单机制判断文件类型(文件后缀、文件头);

    (3)对上传的文件做更改文件名、压缩、格式化等预处理;

    (4)单独设置文件服务器的域名。

  • 相关阅读:
    NET ERP系统架构设计
    WebApi的一种集成测试写法(in-memory)
    开发类工具
    GitHub版本控制
    TortoiseGit安装与配置(转)
    tortoisegit使用密钥连接服务器(转)
    重构一个功能块的总结
    脚本绘图工具总结(转)
    Oracle 多表关联更新
    数据结构与算法之递推算法 C++与PHP实现
  • 原文地址:https://www.cnblogs.com/shilxfly/p/6848707.html
Copyright © 2011-2022 走看看