zoukankan      html  css  js  c++  java
  • 浅析文件上传漏洞

     

    0x01简介

    文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接。但是想真正把这个漏洞利用好却不那么容易,其中有很多技巧,也有很多需要掌握的知识。俗话说,知己知彼方能百战不殆,因此想要研究怎么防护漏洞,就要了解怎么去利用。此篇文章主要分三部分:总结一些常见的上传文件校验方式,以及绕过校验的各种姿势,最后对此漏洞提几点防护建议。

    0x02文件上传检测

    (一)客户端检测

    1. JavaScript本地验证

    在网页上写一段javascript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式

    判断方法:1.响应迅速

                      2.查看网页源代码

    (二)服务器端检测

    1.MIME类型校验(Content-Type字段)

    代码:

     1 <?php
     2 
     3 if($_FILES['userfile']['type'] != "image/gif") {//获取Http请求头信息中ContentType
     4 
     5     echo "Sorry, we only allow uploading GIF images";
     6 
     7     exit;
     8 
     9 }
    10 
    11 $uploaddir = 'uploads/';
    12 
    13 $uploadfile = $uploaddir.basename($_FILES['userfile']['name']);
    14 
    15 if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)){
    16 
    17     echo "File is valid, and was successfully uploaded.
    ";
    18 
    19 } else {
    20 
    21     echo "File uploading failed.
    ";
    22 
    23 }
    24 
    25 ?>

    2.文件扩展名校验(白名单、黑名单)

    代码:

     1 <?php
     2 
     3 $blacklist = array(".php", ".phtml", ".php3", ".php4");
     4 
     5 foreach ($blacklist as $item) {
     6 
     7 if(preg_match("/$item$/i", $_FILES['userfile']['name'])) {
     8 
     9     echo "We do not allow uploading PHP files
    ";
    10 
    11     exit;
    12 
    13 }
    14 
    15 }
    16 
    17 $uploaddir = 'uploads/';
    18 
    19 $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
    20 
    21 if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)){
    22 
    23     echo "File is valid, and was successfully uploaded.
    ";
    24 
    25 } else {
    26 
    27     echo "File uploading failed.
    ";
    28 
    29 }
    30 
    31 ?>
    32 
    33  

    3.文件头内容检验(eg:jpg文件头为FFD8)

    4.自定义正则表达式

    0x03绕过上传检测

    (一)绕过客户端检测

    1.使用firebug插件删除验证函数或者浏览器禁用JS,直接上传脚本文件

    2.抓包改包。上传图片马,抓包改后缀为脚本文件后缀

    (二)绕过服务器端检测

    1.绕过 MIME类型校验(Content-Type字段)

    使用BurpSuite抓包,修改Content-Type字段为允许上传的类型

    2. 绕过文件扩展名校验

    (1)绕过黑名单校验:①找黑名单中的漏网之鱼

                                          ②大小写绕过

    (2)白名单:①%00截断

                           ②配合Web容器的解析漏洞

    3.绕过文件头内容校验

    使用图片马      

    生成图片马: copy  /b 1.jpg+1.php  2.jpg

    0x04文件上传漏洞防御

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

    2.检查文件类型(后缀、MIME)

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

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

  • 相关阅读:
    SpringMVC拦截器
    SpringMVC异常
    SpringMVC文件上传
    SpringMVC返回值类型
    JVM字节码
    使用Apache JMeter进行测试
    Tomcat优化
    垃圾收集器
    GC常见算法
    VisualVM远程连接Tomcat
  • 原文地址:https://www.cnblogs.com/0nth3way/p/7161041.html
Copyright © 2011-2022 走看看