• upload_libs通关教程


    Pass-01-js检查

    在这里插入图片描述

    只能上传jpg|png|gif

    js验证

    在这里插入图片描述

    上传php文件被拦截

    在这里插入图片描述

    删除js验证,上传成功

    在这里插入图片描述

    在这里插入图片描述

    Pass-02-MIME-Type验证

    在这里插入图片描述

    文件有MIME-Type验证,可以用burpsuit抓包,修改Content-Type为image/jpeg

    在这里插入图片描述

    上传成功

    在这里插入图片描述

    在这里插入图片描述

    Pass-03-黑名单验证

    在这里插入图片描述

    文件有黑名单需要绕过

    用黑名单不允许上传.asp,.aspx,.php,.jsp后缀的文件

    但可以上传.phtml .phps .php5 .pht

    前提是apache的httpd.conf中有如下配置代码

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

    在这里插入图片描述

    修改文件后缀名phtml,上传文件成功

    在这里插入图片描述

    在这里插入图片描述

    Pass-04-黑名单验证(.htaccess)

    在这里插入图片描述

    黑名单拒绝了几乎所有有问题的后缀名,除了.htaccess
    前提条件(1.mod_rewrite模块开启。2.AllowOverride All

    在这里插入图片描述

    因此先上传一个.htaccess文件,内容如下:

    SetHandler application/x-httpd-php 
    

    这样所有文件都会当成php来解析

    上传.htaccess

    在这里插入图片描述

    将php文件后缀名改为.gif,上传成功

    在这里插入图片描述

    Pass-05-黑名单验证(路径拼接绕过)

    在这里插入图片描述

    查看源码发现过滤了几乎所有后缀名,但没有对上传的文件进行重命名。

    上传文件后缀名为.php. .

    deldot删除最后一个点之后,不再进行删除,trim删除空格,那么最终上传的文件名为 1.php.。利用Windows自动去除最后一个点,导致成功上传1.php

    使用bp修改后缀名上传成功

    在这里插入图片描述

    在这里插入图片描述

    Pass-06-黑名单验证(大小写)

    在这里插入图片描述

    源码没有进行大小写后缀名过滤,可以将文件后缀名大小写绕过

    在这里插入图片描述

    Pass-07-黑名单验证(空格绕过)

    在这里插入图片描述

    源码没有去空格,可以在后缀名加空格绕过 php+

    在这里插入图片描述

    在这里插入图片描述

    Pass-08-黑名单验证(点绕过)

    在这里插入图片描述

    源码没有去除点,可以通过点绕过

    在这里插入图片描述

    在这里插入图片描述

    Pass-09-黑名单验证(特殊符号)

    在这里插入图片描述

    源码没有去除:: D A T A , 可 以 通 过 : : DATA,可以通过:: DATA::DATA绕过

    Windows系统下,如果上传的文件名中test.php::$DATA会在服务器上生成一个test.php的文件,其中内容和所上传文件内容相同,并被解析。

    在这里插入图片描述

    文件路径删除::$DATA访问

    在这里插入图片描述

    Pass-10-黑名单验证(路径拼接绕过)

    在这里插入图片描述

    查看源码发现过滤了几乎所有后缀名,但没有对上传的文件进行重命名。

    上传文件后缀名为.php. .

    deldot删除最后一个点之后,不再进行删除,trim删除空格,那么最终上传的文件名为 1.php.。利用Windows自动去除最后一个点,导致成功上传1.php

    使用bp修改后缀名上传成功

    在这里插入图片描述

    在这里插入图片描述

    Pass-11-黑名单验证(双写绕过)

    在这里插入图片描述

    str_ireplace() 函数替换字符串中的一些字符(不区分大小写),只替换一次。

    可以进行双写绕过1.pphphp

    在这里插入图片描述

    在这里插入图片描述

    Pass-12-白名单验证(GET00截断)

    在这里插入图片描述

    0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。

    GET型提交的内容会被自动进行URL解码。

    使用00截断绕过

    截断条件:php版本小于5.3.4,php的magic_quotes_gpc为OFF状态
    
    在抓包头save_path.../upload/1.php%00
    

    在这里插入图片描述

    使用bp,将php文件后缀名改为1.png,并且GET路径后面添加2.php%00,上传

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    Pass-13-白名单验证(POST00截断)

    在这里插入图片描述

    在POST请求中,%00不会被自动解码,需要在16进制中进行修改00

    ./upload/2.php空格-》转到hex找到2.php-》把2.php后面的2020改为0000
    

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    Pass-14-图片马绕过

    在这里插入图片描述

    通过源码可知,服务器打开文件读取前两个字节,判断文件类型

    针对这种情况可以直接新建文件改名1.jpg,其中代码内容如下 
    GIF98A 
    <?php
         phpinfo(); 
    ?>
    或
    Windows制作webshell 
    copy 1.png/b+1.php/a shell.png
    

    将图片上传

    直接访问图片并不能把图片当做PHP解析,因此还需要利用文件包含漏洞

    ##include.php
    <?php
    /*
    本页面存在文件包含漏洞,用于测试图片马是否能正常运行!
    */
    header("Content-Type:text/html;charset=utf-8");
    $file = $_GET['file'];
    if(isset($file)){
        include $file;
    }else{
        show_source(__file__);
    }
    ?>
    

    在这里插入图片描述

    Pass-15-getimagesize图片马绕过

    在这里插入图片描述

    用getimagesize函数判断文件类型,还是可以图片马绕过,方法同pass-14

    Pass-16-exif_imagetype()图片马

    在这里插入图片描述

    这里用到php_exif模块来判断文件类型,用图片马绕过,方法同pass-14

    Pass-17-二次渲染绕过

    在这里插入图片描述

    判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,最后再做了一次二次渲染

    制作一张图片马进行上传

    在这里插入图片描述

    在这里插入图片描述

    使用010Editor查看webshell图片

    在这里插入图片描述

    查看上传的图片,发现图片被二次渲染,我们插入的代码<?php phpinfo(); ?>已经消失了

    在这里插入图片描述

    显然,这样的图片马上传方式失败了。
    不过二次渲染会保留一些文件内容不会改变,所以在制作图片马之前,我们先观察二次渲染前后图片不会改变的地方,将其代码写入其中即可绕过二次渲染

    Pass-18-条件竞争

    在这里插入图片描述

    这里是条件竞争,先将文件上传到服务器,然后判断文件后缀是否在白名单里,如果在则重命名,否则删除,因此我们可以上传1.php只需要在它删除之前访问即可,可以利用burp的intruder模块不断上传,然后我们不断的访问刷新该地址即可

    在这里插入图片描述

    Pass-19-条件竞争

    在这里插入图片描述

    因此也存在条件竞争的问题,不过这题对文件后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等,因此可以通过不断上传图片马,由于条件竞争可能来不及重命名,从而上传成功。

    Pass-20-00截断

    在这里插入图片描述

    //发现move_uploaded_file()函数中的img_path是由post参数save_name控制的,因此可以在save_name利用00截断绕过

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    上传图片马,使用文件包含打开

    在这里插入图片描述

    Pass-21-数组绕过

    在这里插入图片描述

    可以使用图片马的方法

    首先,判断文件的Content-Type类型是否在白名单中,如果不在禁止上传,如果在的话,继续往下执行。

    如果POST接收的save_name为空,则赋值为$_FILES[‘upload_file’][‘name’],不为空就为本身

    explode() 函数把字符串打散为数组
    end()函数将 array的内部指针移动到最后一个单元并返回其值
    reset()函数将 array 的内部指针倒回到第一个单元并返回第一个数组单元的值
    count() 函数计算数组中的单元数目或对象中的属性个数,这里要注意,数组下标从0开始

    继续执行,如果$file不是数组则打乱成数组,如果是就往下执行

    利用end函数将 f i l e 数 组 的 最 后 一 个 单 位 赋 值 给 file数组的最后一个单位赋值给 fileext

    之后判断$ext是否在白名单内。在的话继续往下执行

    将file数组的第一个元素用点拼接最后一个元素,赋值给$file_name,之后上传

    这一关可以数组+/绕过

    在这里插入图片描述

    上传失败QAQ

  • 相关阅读:
    批量修改同一种控件属性
    线程池的使用
    金蝶K3常用数据表
    安装更新
    ApexSQL
    c# 计算一个整型数组的平均
    sqlServer基础知识
    c# 获取字符串数组中最长的的字符串并输出最长的字符串
    c# 获取数组中最大数的值
    c# 计算1-100之间的所有质数(素数)的和
  • 原文地址:https://www.cnblogs.com/jiufang/p/16451984.html
Copyright © 2020-2023  润新知