• 文件上传


      再上传文件时有多种校验方式,总体分为客户端和服务端校验,其中还细化为很多校验方式,检验文件后缀,大小等。

    客户端校验:顾名思义就是在在用户浏览器上用一段javascript代码进行校验

      判断方式:对于要上传的图片,刚加载以后还没点击确认,就提示文件错误而此时并没有发送数据包。

      突破方法:

      1.直接在浏览器上禁用javascript代码,取消验证。
      2.burp截断改包
       先将上传的木马后缀改为jpg,通过burpsuit抓取上传的包,再将抓取的包中将jpg改为PHP

    服务器端验证
      1.content-type字段校验,filetype检验
       content-type读取的是上传文件的后缀,抓包修改

    将content-type字段改为image/gif进行绕过
    2.文件头校验
    可以通过自己写正则匹配,判断文件头内容是否符合要求,这里举几个常见的文件头对应关系:
    (1) .JPEG;.JPE;.JPG, ”JPGGraphic File”
    (2) .gif, ”GIF 89A”
    (3) .zip, ”Zip Compressed”
    (4) .doc;.xls;.xlt;.ppt;.apr,”MS Compound Document v1 or Lotus Approach APRfile”

    文件头绕过
    在木马内容基础上再加了一些文件信息,有点像下面的结构
    GIF89a<?php phpinfo(); ?>
    3.扩展名验证
    MIME验证
    MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
    它是一个互联网标准,扩展了电子邮件标准,使其能够支持:
    非ASCII字符文本;非文本格式附件(二进制、声音、图像等);由多部分(multiple parts)组成的消息体;包含非ASCII字符的头信息(Header information)。
    这个标准被定义在RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049等RFC中。 MIME改善了由RFC 822转变而来的RFC 2822,这些旧标准规定电子邮件标准并不允许在邮件消息中使用7位ASCII字符集以外的字符。正因如此,一些非英语字符消息和二进制文件,图像,声音等非文字消息原本都不能在电子邮件中传输(MIME可以)。MIME规定了用于表示各种各样的数据类型的符号化方法。 此外,在万维网中使用的HTTP协议中也使用了MIME的框架,标准被扩展为互联网媒体类型。
    MIME的作用
    使客户端软件区分不同种类的数据,例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件。 Web服务器使用MIME来说明发送数据的种类,Web客户端使用MIME来说明希望接收到的数据种类。
    一个普通的文本邮件的信息包含一个头部分(To: From: Subject: 等等)和一个体部分(Hello Mr.,等等)。在一个符合MIME的信息中,也包含一个信息头并不奇怪,邮件的各个部分叫做MIME段,每段前也缀以一个特别的头。MIME邮件只是基于RFC 822邮件的一个扩展,然而它有着自己的RFC规范集。
    头字段:MIME头根据在邮件包中的位置,大体上分为MIME信息头和MIME段头。(MIME信息头指整个邮件的头,而MIME段头只每个MIME段的头。)
    常见MIME类型

    mimntype判断
    一般先判断内容的前十个字节,来判断文件类型,然后再判断后缀名。
    文件扩展名绕过
    前提:黑名单校验
    黑名单检测:一般有个专门的 blacklist 文件,里面会包含常见的危险脚本文件。
    绕过方法:
    (1)找黑名单扩展名的漏网之鱼 - 比如 asa 和 cer 之类
    (2)可能存在大小写绕过漏洞 - 比如 aSp 和 pHp 之类
    能被解析的文件扩展名列表:
    jsp jspx jspf
    asp asa cer aspx
    4.配合文件包含漏洞
    前提:校验规则只校验当文件后缀名为asp/php/jsp的文件内容是否为木马。
    绕过方式:(这里拿php为例,此漏洞主要存在于PHP中)
    (1)先上传一个内容为木马的txt后缀文件,因为后缀名的关系没有检验内容;
    (2)然后再上传一个.php的文件,内容为“上传的txt文件路径”);?>
    此时,这个php文件就会去引用txt文件的内容,从而绕过校验,下面列举包含的语法:
    (2)linux下后缀名大小写
    在linux下,如果上传php不被解析,可以试试上传pHp后缀的文件名。
    5.编辑器漏洞
    (1)CMS漏洞:比如说JCMS等存在的漏洞,可以针对不同CMS存在的上传漏洞进行绕过。
    (2)编辑器漏洞:比如FCK,ewebeditor等,可以针对编辑器的漏洞进行绕过。
    这两方面的漏洞以后单独成文汇总,这里点到为止。
    配合其他规则
    (1)0x00截断:基于一个组合逻辑漏洞造成的,通常存在于构造上传文件路径的时候
    test.php(0x00).jpg
    test.php%00.jpg
    路径/upload/1.php(0x00),文件名1.jpg,结合/upload/1.php(0x00)/1.jpg
    6.检测黑名单类型的绕过(服务端)
    将危险的后缀名写到一个文件里面,禁止指着后缀名的文件执行
    文件名绕过:
    大小写组合绕过pHp,PhP,混搭绕过php1,php2,php3,php4,php5
    列表名绕过:
    cer,ashx,asa,cer,cdx,htr,绕过(黑名单可能会漏掉的)
    特殊字符绕过:
    a.asp改成a.asp_
    0x00截断绕过:
    上传1.php.jpg burp抓包改成1.php%00.jpg,或者hex–>20改成00当解析的时候,看到空格,后面的那段就不解析了
    或者upload/1.asp(空格)/上传,hex修改20–>00绕过上传
    apache解析绕过:
    help.asp.134.×2,从前向后尝试解析,直到遇到自己认识的扩展名为止。
    双扩展名解析绕过:
    apache的conf配置有AddHandler php5-script.php没有注释掉,
    则,文件名1.php.jpg就能当作php执行
    .htaccess文件攻击:
    自定义.htaccess上传,下面是内容
    <FileMatch “aaa”>
    SetHandler application/x-httpd-php
    </FileMatch>
    同目录下,上传一个aaa文件,没有扩展名,内容是一句话,这个时候就成功绕过。

    7.检测白名单类型的绕过(服务端)

    解析漏洞绕过
    iis6.0解析绕过:
    目录绕过:
    IIS6.0目录路径检测解析,文件的名字为“*.asp/xxx.jpg”同样呗解析成asp
    burp进行抓包,其中Content-Disposition:form-data;name=”path”我们把原本的 upload/ 改为 uploading/1.asp/,filename=”yijuhua.asp”修改为filename=”yijuhua.asp/1.jpg”。
    或者创建文件夹a.php里面放一句话图片1.jpg a.php/1.jpg—>php执行
    文件绕过:
    首先我们请求 /aaa.php;xxx.jpg,从头部查找查找 “.”号,获得 .php;xxx.jpg
    查找”;”,如果有则内容截断,所以/aaa.php;xxx.jpg会当做/aaa.php进行解析,除此之外我们还有下面的构造方式绕过:a.php;.jpg,a.php;jpg–>php执行
    iis7.0/7.5解析绕过:
    在默认Fast-CGI开启的情况下上传一个文件1.jpg
    内容:<?php fputs(fopen(‘shell.php’,’w’),'<?php eval($_POST[cmd])?>’);?>
    然后访问1.jpg/.php 这样就会在同级目录下生成木马shell.php
    Nginx<8.0.3解析绕过:
    上传1.jpg—-burp修改–>1.jpg%00.php空字节绕过上传
    apache解析绕过:
    a.php.x1.x2 apache从前向后尝试解析,直到遇到自己认识的扩展名为止。
    .htaccess文件攻击:自定义.htaccess绕过
    <FileMatch “aaa”>
    SetHandler application/x-httpd-php
    </FileMatch>
    同目录下,上传一个aaa文件,没有扩展名,然后内容是“aaa”+一句话,成功绕过。
    8.自动修改后缀的绕过:
    上传php,服务端自动修改成了gif
    burp抓包,1.php–>修改成1.pphphp成功绕过


    设计安全的文件上传功能
    1、文件上传的目录设置为不可执行
    2、判断文件类型:强烈推荐白名单方式。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。
    3、使用随机数改写文件名和文件路径:一个是上传后无法访问;再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。
    4、单独设置文件服务器的域名:由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。

  • 相关阅读:
    监控 SQL Server 的运行状况
    软件开发报价的计算方法
    PHP 正则表达式
    ObjectiveC编程语言简介
    iframe 自适应高度,无限级父框架
    分享iphone开发的好网站,希望大家也能提供一些分享下
    实战WebService I: XMLPRC篇(基于php)
    PHPPRC
    Objective C cocos2D场景切换方式总汇
    NoSQL数据存储引擎
  • 原文地址:https://www.cnblogs.com/hatkids/p/8971499.html
Copyright © 2020-2023  润新知