文件上传漏洞

0x00文件上传介绍

  • 文件上传是现代互联网常见的功能,允许用户上传图片、视频、及其他类型文件,向用户提供的功能越多,Web受攻击的风险就越大

0x01文件上传漏洞

  • 上传文件时,如果未对上传的文件进行严格的验证和过滤,就容易造成文件上传漏洞,上传脚本文件(包括asp、aspx、php、jsp等)
  • 恶意上传行为可能导致网站甚至整个服务器被控制。恶意的脚本文件又被称为WebShell,WebShell具有强大的功能,如查看服务器目录、服务器中文件、执行系统命令等。

0x02文件上传绕过

js检测绕过
  • 检测原理
    调用JS的selectFIle()函数,先将文件名转换为小写,然后通过substr获取文件名最后一个点号后面的后缀(包括点号)进行判断。
  • 绕过方法
    由于后端PHP代码没有对文件做任何检测,所以只要绕过前端JS的校验就可以上传WebShell。
  • 具体实现
    手动改后缀为.jpg 用burp抓包改后缀为.php
文件后缀绕过
  • 检测原理
    通过函数pathinfo()获取文件后缀,将后缀转为小写后判断是不是php。
  • 绕过方法1
    有些中间件允许解析其他文件后缀的,如在httpd.conf配置文件中,配置如下代码,则能解析php、php3、phtml文件。所以上传一个后缀名为php3、phtml的文件即可。
  • 绕过方法2
    结合Apache文件解析机制,从右向左开始解析文件后缀,若后缀名不可识别,则继续判断知道遇到可解析的后缀为止。3
  • 具体实现
    1.php php3 phtml后缀
    2.后缀如下
			    xxx.php.xxx
    		    xxx.php3.xxx
        	  	xxx.phtml.xxx
文件类型绕过(MIME)
  • 检测原理
    判断$_FILES【“file"】【“type”】是不是图片格式(image/gif、image/jpeg、image/pjpeg),不是则不允许上传。
    $_FILES【“file”】【“type”】的值是从请求数据包中Content-Type中获取
  • 绕过方法
    通过抓取数据请求包,上传php文件时,Content-Type值是application/octer-stream,上传。jpg格式的文件时Content-Type值。是image/jpeg。可修改文件类型进行绕过。
  • 具体实现
    上传php 抓包改content-type为图片格式
文件类型绕过(文件幻数绕过)
  • 检测原理
    利用getimagesize0函数获取图片的宽高等信息,如果上传的不是图片,那么则获取不到信息。
  • 绕过方法
    在脚本文件开头补充图片对应的头部值,或在图片后写入脚本代码。
  • 具体实现
  1. 找一张图片 用16进制打开 在末尾添加代码
  2. 在文件中加入图片的文件头
  3. linux下: 1.png 1.php > image.php
文件截断绕过
  • 检测原理
    由于00代表结束符,PHP会把00后面的所有字符删除。
    截断条件:PHP版本小于5.3.4、magic_quotes_gpc为OFF状态
  • 绕过方法
    GET方法中加入00截断
    POST方法中传入%00并解码
  • 具体实现
    • 文件名为:1.php%00.jpg 抓包
    • POST:选中%00 ctrl+shift+u转码
    • GET:直接加入 ?jieduan= 1.php%00 (POST值要删掉)
      抓包(绕不过白名单)
      直接上传1.php 抓包 名字改为1.php.jpg
      hex中 2e改为00 (2e为1.php.jpg中的第二个点)
文件内容绕过(竞争条件攻击)
  • 检测原理
    一些网站文件检测逻辑是先允许上传任意文件,然后检查文件内容是否包含可执行脚本,如果包含则删除。这里使用sleep)函数来模拟判断是否含有脚本所需要的时间。
  • 绕过方法
    利用成功上传到删除文件的时间差,传一个.php文件,在未删除之前立即访问,则会自动生成一个新php文件,新文件不会被删除。
  • 具体实现
    上传文件代码1.php
  <?php
  	fputs(fopen('../5/shell.php','w'),'<?php phpinfo();?>');
  	?>
posted @ 2018-10-25 10:27  浅笑996  阅读(95)  评论(0编辑  收藏  举报