返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >upload-labs通关攻略(更新中)
  • 363
分享到

upload-labs通关攻略(更新中)

php服务器开发语言Poweredby金山文档 2023-09-11 17:09:06 363人浏览 泡泡鱼
摘要

1.靶场介绍 upload-labs是一个使用PHP语言编写,专注于文件上传漏洞的靶场。该靶场可以让练习者了解文件上传漏洞的原理、利用方法。 2.环境搭建 1.首先要下载phpstudy,解压安装 phpstudy下载链接:http

1.靶场介绍

upload-labs是一个使用PHP语言编写,专注于文件上传漏洞的靶场。该靶场可以让练习者了解文件上传漏洞的原理、利用方法。

2.环境搭建

1.首先要下载phpstudy,解压安装

phpstudy下载链接:https://www.xp.cn/download.html

2.下载upload-labs源代码

下载链接:https://codeload.github.com/c0ny1/upload-labs/zip/refs/heads/master

将压缩包解压后的文件名改为upload-labs,然后放入phpstudy\www目录下

3.打开phpstudy面板,启动Apache+Mysql

4.在浏览器中输入http://127.0.0.1/upload-labs/

就会打开一下界面,就安装成功了

Pass-01

任务是上传一个WEBshell服务器

为了方便观察,这里我们选择上传,代码成功执行后显示PHP服务器的配置信息

尝试上传phpinfo.php,发现上传失败

我们点击显示源码或查看提示,发现这一关是使用javascript在客户端验证上传的文件类型

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;    }}

通关方法:

在浏览器中禁用JavaScript

firefox浏览器按f12调出开发者工具-->调试器-->设置-->禁用JavaScript,重新上传phpinfo.php就可以成功上传了。

在url中输入文件保存的路径

成功执行

Pass-02

点击显示源码跟查看提示可以看出,这一关是通过数据包中的MIME类型验证

$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.'文件夹不存在,请手工创建!';    }}

使用BurpSuite抓包

将Content-Type修改为允许上传的类型,(image/jpeg、image/png、image/gif)选其中一个修改,修改完后即可上传成功。

访问一下,成功执行

Pass-03

看一下源码,发现禁止后缀为'.asp','.aspx','.php','.jsp'的文件上传,属于黑名单验证。

$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 . '文件夹不存在,请手工创建!';    }}

过关思路:这里黑名单定义不全,可以将后缀改为'.php5','.phtml','.pht'进行绕过。上传成功后可以直接连接,这里上传的文件名会改变成随机数字组合,不过返回的数据包中有回显,还是可以看到上传的文件名跟路径。

这里由于我环境的问题,操作没有成功。大家可以自行操作试一下

Pass-04

首先我们看一下源码,发现跟第三关一样,也是黑名单验证,只是限制的后缀更多了。

$is_upload = false;$msg = null;if (isset($_POST['submit'])) {    if (file_exists(UPLOAD_PATH)) {        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".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",".ini");        $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 = UPLOAD_PATH . '文件夹不存在,请手工创建!';    }}

这里还是因为我环境的问题,操作没有成功

过关思路:我们上传一个.htaccess后缀的文件(注意这里不能取文件名,就是.htaccess文件),文件内容为

SetHandler application/x-Httpd-php

然后下载一个图片,将图片名改为1.jpg(对应.htaccess文件内容),用Notepad打开图片,在图片内插入php代码,上传图片后,访问一下1.jpg,图片内的php代码就会被执行。

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 = UPLOAD_PATH . '文件夹不存在,请手工创建!';    }}

过关思路:这一关虽然有对文件后缀名的过滤比较全,但是没有循环过滤,我们可以通过. .进行绕过上传。将文件名后缀改为.php. .这里的验证过程首先是过滤了文件末尾的点,将后缀名改为小写,去除后缀名中的::$DATA,最后再首尾去空。由于这里只过滤了一次,所以将.php. .被过滤成.php.还是可以绕过这里的黑名单验证,最后上传成功。

访问一下

成功通关

Pass-06

$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",".ini");        $file_name = trim($_FILES['upload_file']['name']);        $file_name = deldot($file_name);//删除文件名末尾的点        $file_ext = strrchr($file_name, '.');        $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 = '此文件类型不允许上传!';        }    } else {        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';    }}

通过源代码可以看出,这一关没有对文件名转化为小写,直接将文件名改为phpinfo.PHP大写后缀即可上传成功。

Pass-07

这一关将后缀名转化为了小写,但是相对上一关少了一个首位去空的过滤。

我们这里抓包,在后缀名后面加一个空格,就可以绕过成功上传。

Pass-08

这一关通过源码可以看出少了一个删除末尾的'.'

$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",".ini");        $file_name = trim($_FILES['upload_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 = UPLOAD_PATH . '文件夹不存在,请手工创建!';    }}

抓包在后缀名后加上一个'.',就可以上传成功

成功过关

Pass-09

这一关在文件后缀名加上字符串::$DATA,就可以上传成功

访问一下

成功连接

Pass-10

这里第十关和第五关重复了,按照第五关的方法过就可以了。

Pass-11

这一关的验证是将黑名单中的后缀名过滤一遍,比如说上传.php文件,他就会过滤掉php,我们可以双写php,就可以绕过。

这里它只过滤了一遍php,过滤后还是有一个php,这样成功上传

Pass-12

12关跟13关都是利用%00截断来绕过验证,这里我因为环境问题没有成功。

过关思路:通过将恶意文件名的结尾添加一个%00空字节,来使服务器认为文件名的结尾已经到达,而忽略后面的任何内容。

使用%00截断需要三个条件:

1.php版本低于5.2.6(php5.2.6及之前的版本都存在%00截断漏洞,5.3.0后的版本修复了这个漏洞)

2.文件上传的路径可控

3.magic_quotes_gpc为OFF状态(在php.ini中设置)

Pass-14

function getReailFileType($filename){    $file = fopen($filename, "rb");    $bin = fread($file, 2); //只读2字节    fclose($file);    $strInfo = @unpack("C2chars", $bin);        $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);        $fileType = '';        switch($typeCode){              case 255216:                        $fileType = 'jpg';            break;        case 13780:                        $fileType = 'png';            break;                case 7173:                        $fileType = 'gif';            break;        default:                        $fileType = 'unknown';        }            return $fileType;}$is_upload = false;$msg = null;if(isset($_POST['submit'])){    $temp_file = $_FILES['upload_file']['tmp_name'];    $file_type = getReailFileType($temp_file);    if($file_type == 'unknown'){        $msg = "文件未知,上传失败!";    }else{        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;        if(move_uploaded_file($temp_file,$img_path)){            $is_upload = true;        } else {            $msg = "上传出错!";        }    }}

这一关通过提示可以知道这里有文件包含漏洞

直接制作图片马配合文件包含漏洞就可以过关了

图片马制作方法:

  1. 提前准备好一张图片跟一个一句话木马,打开cmd命令行输入“copy 1.png/b + 1.php 3.png”,生成3.png图片马。

  1. 用Notepad打开图片,在内容中写入一句话木马。

上传制作好的图片马后,配合文件包含漏洞直接访问上传的文件

成功过关

Pass-15

function isImage($filename){    $types = '.jpeg|.png|.gif';    if(file_exists($filename)){        $info = getimagesize($filename);        $ext = image_type_to_extension($info[2]);        if(stripos($types,$ext)>=0){            return $ext;        }else{            return false;        }    }else{        return false;    }}$is_upload = false;$msg = null;if(isset($_POST['submit'])){    $temp_file = $_FILES['upload_file']['tmp_name'];    $res = isImage($temp_file);    if(!$res){        $msg = "文件未知,上传失败!";    }else{        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").$res;        if(move_uploaded_file($temp_file,$img_path)){            $is_upload = true;        } else {            $msg = "上传出错!";        }    }}

这一关我们看一下源码,这里是用getimagesize函数来验证接受的文件是否为图片信息,跟上一关的过关方法一样,制作图片马上传,配合文件包含漏洞就可以了

Pass-16

16关跟14、15关的方法一直,制作图片马上传配合文件包含漏洞,但是这里需要打开php_exif,在phpstudy里开启就可以了

开启之后重启一下就可以了,再上传图片马就过关了

来源地址:https://blog.csdn.net/weixin_68070435/article/details/129507017

--结束END--

本文标题: upload-labs通关攻略(更新中)

本文链接: https://lsjlt.com/news/403466.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • upload-labs通关攻略(更新中)
    1.靶场介绍 upload-labs是一个使用php语言编写,专注于文件上传漏洞的靶场。该靶场可以让练习者了解文件上传漏洞的原理、利用方法。 2.环境搭建 1.首先要下载phpstudy,解压安装 phpstudy下载链接:http...
    99+
    2023-09-11
    php 服务器 开发语言 Powered by 金山文档
  • Upload-labs通关攻略(适合新手)
    目录 前言 第二关: 第三关: 第四关: 第五关: 第六关: 第七关: 第八关: 第九关: 第十关: 第十一关: 第十二关: 第十三关: 第十四关: 第十五关: 第十六关: 第十七关: 第十八关: 第十九关: 第二十关: 第二十一关: 总...
    99+
    2023-10-26
    网络安全 php javascript
  • upload-labs安装及攻略
    目录 upload-labs靶场的安装搭建(windows) upload-labs靶场攻略 Pass-01 Pass-02 Pass-03 Pass-04 Pass-05~Pass-07 Pass-08 Pass-09 Pass-10  ...
    99+
    2023-09-02
    php labs upload
  • Upload-labs 1-21关 靶场通关笔记(含代码审计)
    目录 Pass-01(JS前端验证)  方法一:删除JS验证   方法二:先上传符合要求的图片 再在burp里面修改后缀即可 Pass-02(MIME验证) 前置知识$_FILES Pass-03(php3、phtml绕过黑名单) Pass...
    99+
    2023-09-03
    php 安全 web安全
  • upload-labs详解1-19关通关全解(最全最详细一看就会)
    upload-labs是一个使用php语言编写的,专门收集渗透测试过程中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共19关,每一关都包含着不同上传方式。 png: Pa...
    99+
    2023-09-07
    网络安全 安全 web安全
  • 文件上传漏洞upload-labs靶场通关教程 1-20(带原理)
    Pass-01 (JS验证) 提示:本pass在客户端使用js对不合法图片进行检查  这里直接跳出弹窗提示 了,可以看出来这个验证是在前端进行的,众所周知,前端都是纸老虎直接禁用掉就好了   从form表单可以看出他在使用了onsubm...
    99+
    2023-08-31
    前端 javascript 网络安全
  • DVWA通关攻略之命令注入
    目录 1.Command Injection 命令注入2.漏洞场景3.实验演示3.1.手工挖掘3.2.使用burp爆破挖掘命令注入4.命令注入防御 1.Command Injection...
    99+
    2023-09-23
    php 安全 web安全 网络安全
  • 关于Mybatis-Plus Update更新策略问题
    目录问题原因updateStrategyselectStrategy(since 3.1.2)解决方法1、指定字段增加注解2、全局配置3、使用UpdateWrapper更新mybat...
    99+
    2024-04-02
  • 菜鸟必看:ASP 数据库连接的通关攻略
    在 ASP 应用中,数据库连接是至关重要的,因为它为我们的应用程序提供了与数据库交互的能力。对于新手来说,理解 ASP 数据库连接的机制可能会有些复杂,但我们 Schritt für Schritt 的逐步分析将为你揭示通关的秘诀。 1....
    99+
    2024-02-20
    ASP 数据库连接 ADO ADO.NET 连接字符串 数据源
  • win10组策略如何关闭自动更新
    本篇内容介绍了“win10组策略如何关闭自动更新”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! win1...
    99+
    2023-02-02
    win10
  • MySql中怎么更新优化策略
    MySql中怎么更新优化策略,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。模拟场景一:给数据库中的一张表的结构调整,添加几个字段,后面对之...
    99+
    2024-04-02
  • ubuntu中如何关闭自动更新
    ubuntu中关闭自动更新的方法:1、打开终端;2、输入命令打开/etc/apt/apt.conf.d/10periodic配置文件;3、在配置文件中修改设置进行关闭即可。具体操作步骤:使用快捷键【Ctrl+Alt+T】打开终端;输入以下命...
    99+
    2024-04-02
  • 怎么在win10中关闭自动更新
    今天小编给大家分享一下怎么在win10中关闭自动更新的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在win10中关闭自动更新...
    99+
    2023-07-01
  • Win10 Mobile年度更新预览版14327中商店应用更新通知回归
    4月21日凌晨,微软推送最新的Win10 Mobile年度更新预览版14327,带来Cortana更多国家语言支持和PC收发短信功能,另外修复了大量Bug,包括微信启动。而安装之后,我们发现,商店应用更新通知功能也已经回...
    99+
    2023-05-20
    Win10 预览版14327
  • 如何关闭xp的自动更新 多种方法关闭xp中的自动更新功能
      自动更新是xp系统中自带的一个自动更新系统补丁的工具,自动更新是很好,但是有时候很麻烦,一些补丁又不是我们想要更新的。于是很多用户就在问如何关闭xp系统中的这个自动更新功能下面我们就来盘点下关闭自动更新的几种方法。 ...
    99+
    2023-06-02
    关闭自动更新 xp 功能 更新 多种 方法
  • Vue中怎么通过AJAX动态更新数据
    本文小编为大家详细介绍“Vue中怎么通过AJAX动态更新数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue中怎么通过AJAX动态更新数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。代码如下:var&nb...
    99+
    2023-07-04
  • 如何在Java中实现高效的缓存更新策略?
    Java作为一种广泛使用的编程语言,其缓存机制是一个不可或缺的部分。在实现高效的缓存更新策略时,我们需要考虑多种因素,如缓存的大小、缓存的存储方式以及缓存的更新频率等等。本文将为您介绍如何在Java中实现高效的缓存更新策略,以提高应用程序的...
    99+
    2023-10-05
    缓存 分布式 编程算法
  • win10更新中强制关机会怎么样
    当在Windows 10更新期间强制关机时,可能会发生以下情况:1. 更新进程被中断:如果在更新过程中强制关机,可能会导致更新进程被...
    99+
    2023-08-19
    win10
  • 如何关闭xp的自动更新以及多种方法关闭xp中的自动更新功能
    如何关闭xp的自动更新以及多种方法关闭xp中的自动更新功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  自动更新是xp系统中自带的一个自动更新系统补丁的工具,自动更新是很好...
    99+
    2023-06-14
  • SQL update中怎么实现多表关联更新
    这篇文章给大家介绍SQL update中怎么实现多表关联更新,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。有A、B张表,其记录如下:A表c1 c2--------------...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作