upload-labs 21关大合集

本文详细介绍了Upload-Labs的21个关卡,每个关卡重点讲解如何通过文件上传漏洞进行绕过防御,涉及多种技巧,如修改文件后缀、利用Burpsuite抓包、配置Apache、利用PHP解析漏洞等。通过这些关卡,读者可以深入理解文件上传漏洞及其防范方法。
摘要由CSDN通过智能技术生成

漏洞原理,看这里

upload-labs

首先是一些常见的文件上传绕过思路

在这里插入图片描述

Pass-01

首先直接查看提示
在这里插入图片描述选中一个php文件上传

在这里插入图片描述1.最简单的就是把他的js文件修改一下

F12查看源码
在这里插入图片描述把js文件目录下的内容删除或者修改一下

2.运用Burpsuite进行绕过

首先将文件后缀修改为以上3种之一

进行上传 抓包

在这里插入图片描述说明jpg的格式已经绕过js的规则了

将后缀又给改回去php

然后放包

然后拖动图片获取地址

在这里插入图片描述
然后上蚁剑

最后我们这个码就上来了

管理文件和获取终端就都可以

在这里插入图片描述

Pass-02

选择上传文件

在这里插入图片描述
查看提示

在这里插入图片描述然后查看源码

在这里插入图片描述格式可以看到:仅允许image/jpeg、image/png、image/gif类型的文件上传。

用burpsuite抓包,有两种绕过方式:
(1.)修改request包的content-type字段声明文件类型为图片然后上传php文件
(2.)直接修改文件后缀上传jpg/png/gif 文件再改为php(与Pass-01相同)

在这里插入图片描述
这次我们写一个php info
不用一句话木马了

Pass-03

上传文件进行尝试

在这里插入图片描述 尝试使用大小写,双写是否可以绕过

emmmmmm

尝试失败

绕过方法:

畸形后缀名:php1、php2、php3、php4、php5、php7、pht、phtml、 phar、 phps、Asp、aspx、cer、cdx、asa、asax、jsp、jspa、jspx

但是需要修改Apache的httpd.conf有配置代码

添加一句代码

AddType application/x-httpd-php .php3 .php4 .phtml .phps .php5 .pht

然后就可以了

Pass-04

查看提示

在这里插入图片描述

查看源码:

$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists($UPLOAD_ADDR)) {
        $deny_ext = array('.asp','.aspx','.php','.jsp');
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空

        if(!in_array($file_ext, $deny_ext)) {
            if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR. '/' . $_FILES['upload_file']['name'])) {
                 $img_path = $UPLOAD_ADDR .'/'. $_FILES['upload_file']['name'];
                 $is_upload = true;
            }
        } else {
            $msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
        }
    } else {
        $msg = $UPLOAD_ADDR . '文件夹不存在,请手工创建!';
    }
	}

上传.htaccess文件进行绕过

文件内容为AddType application/x-httpd-php .png

代码的意思:让 .png后缀名文件格式的文件名以php格式解析,因此达到了可执行的效果。

但是需要一些配置

1.要打开mod_rewrite模块

phpstudy软件界面——>其他选项菜单——PHP扩展及设置——Apache扩展——rewrite_module模块

2.AllowOverride All。
其他选项菜单——打开配置文件——httpd.conf 文件
搜索查找AllowOverride None,然后把AllowOverride None修改为 AllowOverride All,完成后保存。

然后进行上传就好了

Pass-05

查看源码

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //首尾去空
        
        if (!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.$file_name;
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '此文件类型不允许上传!';
        }
    } else {
        $msg = U特斯hiPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

查看提示

在这里插入图片描述
源码里把所有可以解析的后缀名都给写死了,包括大小写,转换,空格,还有点号,正

常的php类文件上传不了了,并且拒绝上传 .htaccess 文件。

反复观察发现没有被限制的文件名有 .php7 以及 .ini


 user.ini : 自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 风格的 INI 文件。此类文件仅被
   CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用
   .htaccess 文件有同样效果。
   
   除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web
   根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。
   
   在 .user.ini 风格的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI
   设置可被识别。
   
   两个新的 INI 指令,user_ini.filename 和 user_ini.cache_ttl 控制着用户 INI 文件的使用。
   
   user_ini.filename 设定了 PHP 会在每个目录下搜寻的文件名;如果设定为空字符串则 PHP 不会搜寻。默认值是
   .user.ini。
   
   user_ini.cache_ttl 控制着重新读取用户 INI 文件的间隔时间。默认是 300 秒(5 分钟)。

php.ini 是 php的配置文件,.user.ini 中的字段也会被 php 视为配置文件来处理,从而导致 php 的文件解析漏洞。

但是想要引发 .user.ini 解析漏洞需要三个前提条件

服务器脚本语言为PHP  

服务器使用CGI/FastCGI模式  

上传目录下要有可执行的php文件

  什么是 CGI
       CGI 的全称为“通用网关接口”(Common Gateway Interface),为 HTTP 服务器与其他机器上的程序服务通信交流的一种工具, CGI 程序须运行在网络服务器上。
   
       传统 CGI 接口方式的主要缺点是性能较差,因为每次 HTTP 服务器遇到动态程序时都需要重新启动解析器来执行解析,之后结果才会被返回给 HTTP
       服务器。这在处理高并发访问时几乎是不可用的,因此就诞生了 FastCGI。另外,传统的 CGI 接口方式安全性也很差,故而现在已经很少被使用了。
   
       什么是 FastCGI
       FastCGI 是一个可伸缩地、高速地在 HTTP 服务器和动态服务脚本语言间通信的接口(在 Linux 下, FastCGI 接口即为 socket,这个socket 可以是文件 socket,也可以是IP socket),主要优点是把动态语言和 HTTP
   服务器分离开来。多数流行的 HTTP 服务器都支持 FastCGI,包括 Apache 、 Nginx 和 Lighttpd 等。
   
       同时,FastCGI也被许多脚本语言所支持,例如当前比较流行的脚本语言PHP。FastCGI 接口采用的是C/S架构,它可以将 HTTP 服务器和脚本服务器分开,同时还能在脚本解析服务器上启动一个或多个脚本来解析守护进程。当 HTTP
   服务器遇到动态程序时,可以将其直接交付给 FastCGI 进程来执行,然后将得到结果返回给浏览器。这种方式可以让 HTTP
   服务器专一地处理静态请求,或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高整个应用系统的性能。







网上搜的。。。

其中php语言和CGI我们的nginx和环境均满足

然后根据提示再去看一下这个(re

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值