• 主页
  • 相册
  • 随笔
  • 目录
  • 存档
Total 244
Search AboutMe

  • 主页
  • 相册
  • 随笔
  • 目录
  • 存档

文件上传漏洞

2020-06-17

1. 概述

  • 上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行;
  • 上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似):
  • 上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行;
  • 上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。

  • 首先,上传的文件能够被Web容器解释执行。所以文件上传后所在的目录要是Web容器所覆盖到的路径。
  • 其次,用户能够从Web上访问这个文件。如果文件上传了,但用户无法通过Web访问,或者无法使得Web容器解释这个脚本,那么也不能称之为漏洞。
  • 最后,用户上传的文件若被安全检查、格式化、图片压缩等功能改变了内容,则也可能导致攻击不成功。

2. 攻击

2.1. 绕过文件上传检查功能

比如应用原本只允许上传JPG图片,那么可以构造文件名(需要修改POST包)为xxx.php[\0].JPG,其中[\0]为十六进制的0x00字符,.JPG绕过了应用的上传文件类型判断;但对于服务器端来说,此文件因为0x00字符截断的关系,最终却会变成xxx.php。

  • 但服务器未调用php解释器,也无法成功

在正常情况下,通过判断前10个字节,基本上就能判断出一个文件的真实类型。

常见的攻击技巧是伪造一个合法的文件头,而将真实的PHP等脚本代码附在合法的文件头之后,

2.2. PHP CGI路径解析问题

url/path/test.jpg/notexist.php

  • 会将test.jpg当做PHP进行解析。Notexist.php是不存在的文件
  • PHP的配置文件中有一个关键的选项:cgi.fix_pathinfo,这个选项默认是开启的
    • 在映射URI时,两个环境变量很重要:一个是PATH_INFO,一个是SCRIPT_FILENAME
      • notexist.php不存在,所以将往前递归查询路径

2.3. 利用上传文件钓鱼

服务器端的应用,还需要为客户端买单


而利用文件上传功能,钓鱼者可以先将包含了标网站,然后通过传播这个文件的URL进行钓鱼,HTML的文件(比如一张图片)上传到目则URL中不会出现钓鱼地址,更具有欺骗性。

在正常情况下,浏览器是不会将JPg文件当做HTML执行的,但是在低版本的IE中,比如IE 6和IE 7,包括IE 8的兼容模式,浏览器都会“自作聪明”地将此文件当做HTML执行。这个问题在很早以前就被用来制作网页木马,但微软一直认为这是浏览器的特性,直到IE 8中有了增强的MIME Sniff,才有所缓解。

2.4. 设计安全的文件上传功能

  • 文件上传的目录设置为不可执行
  • 判断文件类型
    • MIME Type
      • Content-type: text/html
    • 后缀检查
  • 单独设置文件服务器的域名
    • 利用同源策略
  • Security
  • Web Security
  • Note
认证与会话管理
html5安全
  1. 1. 1. 概述
  2. 2. 2. 攻击
    1. 2.1. 2.1. 绕过文件上传检查功能
    2. 2.2. 2.2. PHP CGI路径解析问题
    3. 2.3. 2.3. 利用上传文件钓鱼
    4. 2.4. 2.4. 设计安全的文件上传功能
© 2024 何决云 载入天数...