• 浅析文件上传漏洞


     

    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.单独设置文件服务器的域名

  • 相关阅读:
    如何把报表轻松嵌入应用程序?Telerik Reporting可以轻松搞定
    看DevExtreme如何用HTML/Markdown编辑器轻松设置多行工具栏
    先睹为快!界面控件DevExpress WPF这些功能即将发布
    行业领先的界面开发组件DevExpress 8月发布新版——v22.1.4
    界面组件DevExpress ASP.NET Core v22.1 增强数据导出功能
    看DevExpress丰富图表样式,如何为基金公司业务创新赋能
    djang中orm使用iterator()
    最简单的python判断是否是回文
    缺少库文件对应的包下载地址
    工厂模式
  • 原文地址:https://www.cnblogs.com/0nth3way/p/7161041.html
Copyright © 2020-2023  润新知