【通关选择】upload-labs通关攻略(全)

news2024/11/24 5:42:18

前提条件:
1.文件能够成功上传到服务器
2.攻击者能够知道文件的上传路径

upload-labs靶场

Pass-01( 前端验证)

三种方法解决思路
1.禁用客户端JavaScript弹窗
image.png
2.通过burp抓包,修改后缀名
3.f12删除return filecheck()代码
步骤:
通过上传一个.php格式的脚本会出现弹窗,那么做此题的出发点可以从客户端的方式绕过入手。
image.png
修改前端代码:将javascript弹窗关掉
image.png
将弹窗和检查代码的函数删除掉,那么此时上传的.php脚本文件就是可以上传到服务器的(如果不删除 return checkfile()函数,.php脚本是可以上传的但是不会上传到服务器,不满足为文件上传的条件,所以是失败的)
image.png
可以看到.php脚本文件上传成功,检查服务器目录
1.服务器后台能够看到
image.png
2.直接访问图片的所在路径
(1)右键图片
image.png
(2)通过前端代码同样也会显示相对路径
image.png
(3)burpsuite抓包演示
3.浏览器访问路径查看信息
image.png
出现白色页面是正常情况,因为你的web服务器无法正常去显示一个含有“木马”的php脚本,所以就用到密码接收的方式
image.png
以上重要信息全部显示
最后便是用蚁剑去获取文件路径
测试成功,代表实验成功
image.png

Pass-02(MIME验证)

没有弹窗,显示以下红字的错误提示信息
image.png
两种方法:第一种是上传php文件,改Content-Type,第二种是上传合法后缀文件,改文件后缀。
法一:
改Content-Type:
image.png
repeater之后可以看到右侧画面
验证:不断的放包直到火狐页面也会显示如右图样式
image.png
服务器下显示脚本上传成功
image.png

法二:更改文件后缀
burp开启拦截,然后另外一边将shell.php更改为,shell.png,然后点击上传,完事burp中就会获取如下的包,更改文件后缀为.php
image.png
服务器的后台显示方才上传的脚本文件
image.png

Pass-03(黑名单验证,特殊后缀名)

黑名单策略—在服务器上不允许特定后缀的文件上传(PHP, asp, jsp)
php环境可以尝试的后缀php1,php2,php3,php4.php5,phtmI, pht
image.png
需要修改Apache的httpd.conf有配置代码

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

将#去掉
image.png
image.png
蚁剑连接即可
这是源码当中的黑名单

$deny_ext = array('.asp','.aspx','.php','.jsp');

Pass-04(.htaccess)

这一关我们可以看到禁止上传文件可太多了,几乎完全屏蔽
源码黑名单

 $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");

image.png
1.但是.htaccess还是没有过滤,可以重写文件解析规则绕过,上传一个.htaccess,这个文件内容的意思是告诉apache当遇到qianxun.jpg文件时,按照php去解析,文件内容如下:

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

我们再创建一个php测试文件xxx.php
分别将.htaccess文件和xxx.jpg文件上传

AddType application/x-httpd-php .jpg

.htaccess
xxx.jpg
如图所示,已经上传服务器成功image.png
用浏览器访问xxx.jpg:
image.png
如图所示,xxx.jpg被成功解析

Pass-05(黑名单验证,.user.ini.)

这关多过滤了个.htaccess

 $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");

创建一个.user.ini文件并把它上传
image.png
.user.ini文件里的意思是:所有的php文件都自动包含666.jpg文件。.user.ini相当于一个用户自定义的php.ini
image.png
修改php-ini配置文件
把这里的300秒(即默认等5分钟)改为10
image.png
修改后保存php.ini文件并重启phpstudy
前提:在服务器上有一个456.php当中含有“一句话木马”文件,然后访问此php文件即可
Snipaste_2023-05-12_15-05-44.jpg

Pass-06 (黑名单绕过,大小写绕过)

滤掉.htaccess和.ini。但是没有使用strtolower()函数,可以使用大小写绕过黑名单
把.php 格式改为 .Php 上传上去之后,就会自动解析为.php

strtolower() 函数把字符串转换为小写

image.png

右键获取图片链接
image.png
参数获取phpinfo
image.png
连接蚁剑
image.png

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

没有使用trim()去除空格,可以使用空格绕过黑名单

image.png
正常显示
image.png

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

这没有使用deldot()过滤文件名末尾的点,可以使用文件名后加.进行绕过
image.png

image.png
测试蚁剑连接
image.png

Pass-09(黑名单,特殊字符::$DATA绕过)

image.png
连接蚁剑,不能使用::$DATA
image.png

Pass-10(黑名单 点 空格 点

补充知识:deldot()函数从后向前检测,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来

使用shell.php. . 的方式绕过 (点 空格 点)
image.png

image.png

Pass-11(双写绕过)

提示信息:
image.png
源码要求(str_ireplace())函数将黑名单中的文件后缀名进行了替换为空
image.png

在burp中更改文件后缀名
image.png
在靶机中的效果,后缀名一律没有
image.png

str_ireplace() 函数不区分大小写,大小写绕过不适用,因此使用双写绕过

image.png
成功被传入
image.png

连接蚁剑成功,php文件成功被解析
image.png

Pass-12 (白名单绕过 00截断GET型)

源码:
只能上传jpg,png,gif图片的方式
用GET的方式传参,要求是:随机数+时间参数 +.+可控的类型,保证传入的参数可控
image.png

本体绕过方式:

apache版本调至5.2.17
magic_quotes_gpc=off

将php后缀改为服务器允许上传的文件后缀(png,gif,jpg),将123.php后的内容忽略掉,使用web.php.png文件中的内容上传到123.php中

原理:(参考:https://blog.csdn.net/weixin_47598409/article/details/115050869)
php的一些函数的底层是C语言,而move_uploaded_file就是其中之一,遇到0x00会截断,0x表示16进制,URL中%00解码成16进制就是0x00。

image.png
右键访问图片链接,可以看到文件成功被解析

image.png

注意:连接蚁剑要将中间的字母数字都混杂内容清理掉,然后便可成功连接

image.png

Pass-13 (白名单绕过,post 00截断)

只允许上传.jpg|.png|.gif类型文件!认定为白名单验证
和PASS-12类似
image.png
本题绕过

apache版本调至5.2.17
magic_quotes_gpc=off

传参方式为POST,使用0x00进行截断,对数据进行0x00截断绕过
上传shell.php用BP抓包
上传的是一个php文件,首先要抓包更改它的后缀名来绕过白名单验证
提示:
image.png
因为源码告诉我们它的保存路径是拼接的,所以我们直接可以在可控的部分直接输入文件名,并且用%00截断来截断后面那些多余的内容

POST不会对%00进行解码
修改URL,进行解码
image.png
将其红框内容删除
image.png
访问后发现,php文件能够被浏览器解析
image.png
连接蚁剑成功
image.png

本来要做14关的,莫名其妙的弄错了,制作了个简易的图片马,然后自己还请记住了是文件包含的格式就构造了URL,不过此方法是适用于13关的

图片马,就是在图片中隐藏一句话木马。
在cmd命令行中,此操作是在随便目录下完成的,当是要参与制作的图片和一句话木马文件要处于同一个目录下。

首先love.png是一张普通的图片(随便截取一张),php.php存储的一句话木马(当然也可以写在其他类型的文件中),lovelove.png是生成的文件。

copy php.php/b + love.png lovelove.png
#其中b代表二进制文件,a代表assci

image.png
将生成的lovelove.png上传,传输成功,不过可以看到此时图片马是无法被浏览器解析的
image.png
不过构造的URL可以根据访问的页面,看到是可以被成功解析了

http://192.168.200.71/uploadlabs/include.php?file=/upload/7420230928033352.png

image.png
cmd连接
image.png

连接蚁剑
image.png

Pass-14(首次制作图片马)

image.png
在文件头部添加图片格式:
GIF的文件头为GIF89a,png的文件头为PNG。

随便截取一张图片
添加文件头
末尾写上一句话
image.png
成功上传之后,右键图片链接,然后用文件包含漏洞打开图片,被成功解析P
image.png

Pass-15(getimagesize)

image.png
getimagesize函数意思是:对目标文件的16进制去进行读取文件头的几个字符串是不是符合图片的要求
这关用第14关的图片马就可以实现,将含有一句话的木马放到图片中,然后将文件头此换成要求的三种图片的头格式
上传成功
image.png
可以被成功解析
image.png

Pass-16(exif_imagetype)

exif_imagetype()读取一个图像的第一个字节并检查其后缀名。需要在phpstudy的扩展种开启php.exif选项

做法和上一关同,不再赘述!

Pass-17(二次渲染)

提示信息
image.png
要求图片格式为JPG(后续还有代码要求格式为GIF,PNG 不在赘述)
image.png
move_uploaded_file( t m p n a m e , tmpname, tmpname,target_path)此函数附近有逻辑错误
image.png
不过本题是考察的图片马,制作图片马(理由上一几关的方式,文件包含以下)
image.png

不过webshell获取不了,从上传的目录上看,上传之后的一句话没有了
image.png

image.png

二次渲染后的一句话消失了。那么经过观察,看到从此处前后是不变的
image.png

用010Editorr打开,尝试蒋一句话插到此位置
image.png
然后蚁剑连接
image.png

Pass-18(条件竞争)

提示信息
image.png

使用move_uploaded_file()函数,将上传的文件保存到服务器,再进行判断是否是jpg、png、gif中的一种类型,如果在数组中就保存重命名,如果不在根据unlink()就直接删除

代码他是先将图片上传上去,才开始进行判断后缀名、二次渲染。如果在上传上去的一瞬间访问这个文件,那他就不能对这个文件删除、二次渲染。这就相当于我们打开了一个文件,然后再去删除这个文件,就会提示这个文件在另一程序中打开无法删除。

$is_upload = false;
$msg = null;

if(isset($_POST['submit'])){
    $ext_arr = array('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 = '上传出错!';
    }
}

抓数据包,上传,发送到Intruder模块下
image.png
clear
image.png
将payload类型设为空,意思是不断地上传空的payload
image.png

调大线程
image.png
image.png
开始实施
image.png

image.png

值得注意的是,真实环境下一般没有源码,需要自己逐个尝试,不过就此看来,是白名单限制居多。

Pass-19(条件竞争)

此关上传路径存在问题,建议修改,进入到19关修改后重启即可
image.png

源码说的是服务器将文件后缀跟白名单做对比,然后检查了文件大小以及文件是否已经存在。

文件上传之后又对其进行了重命名,这关只能上传图片马了。要让图片马能够执行还要配合文件包含或者解析析漏洞,和之前几关类似通过文件包含去访问该图片马。

image.png

然后还是使用上一关的做法,本关我废了很大劲,线程调的巨大也没反应就不附图了,我把参考的大佬链接放到后边。

Pass-20

提示信息
image.png

move_uploaded_file()有这么一个特性,会忽略掉文件末尾的 /.

image.png

修改upload-19.jpg 修改为upload-19.php/.
image.png
复制图片链接,输入连接密码
image.png

image.png

Pass-21

此关不是在我理解的范畴内,后续还需要多钻研,多总结!

最后将学习的大佬文章附上

https://blog.csdn.net/weixin_47598409/article/details/115050869

上述文章内容如有技术错误,欢迎指出!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1161863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp原生插件之安卓原生插件集

插件介绍 安卓原生插件集&#xff0c;集成了常用的插件&#xff0c;包括设备&#xff0c;语音、文件、屏幕、usb、TCP等等 插件地址 安卓原生插件集 - DCloud 插件市场 超级福利 uniapp 插件购买超级福利 详细使用文档 使用文档 插件集成内容 腾讯Bugly插件汉字转…

【C/C++】仿函数

函数调用运算符 () 也可以重载由于重载后使用的方式非常像函数的调用&#xff0c;因此称为仿函数仿函数没有固定写法&#xff0c;非常灵活 示例&#xff1a; #include <iostream> #include <string> using namespace std;class MyPrint { public://重载的运算符是…

Redis安装Linux

1、下载安装包 wget http://download.redis.io/releases/redis-3.0.0.tar.gz 2、安装 mkdir /usr/local/redis cp redis-3.0.0.tar.gz /usr/local/redis cd /usr/local/redis tar -zxvf redis-3.0.0.tar.gz cd /usr/local/redis/redis-3.0.0 make PREFIX/usr/local/red…

为什么大家更看好定制开发型CRM

相比传统CRM软件&#xff0c;定制开发型CRM受到了越来越多企业的青睐。为什么大家更看好定制开发类型而不是发挥更加稳定的传统CRM&#xff1f;选择定制型CRM软件主要有以下几个理由&#xff1a; 一、自选功能性价比更高 定制型软件可以选择性的购买功能模块&#xff0c;确保…

算法专栏 ---- trie树,并查集

trie树 #include <iostream> using namespace std; const int N 1000010; int son[N][26],cnt[N],idx; //明确前面两个数组以及idx的含义 //我们把son这个二维数组看成一个字典树 //本题要求26个字母&#xff0c;所以我们每个节点里面最多有26个儿子节点 //而我们本题要…

DL4J无法下载MNIST数据集解决 Server returned HTTP response code: 403 for URL解决方法

报错情况 报错如下&#xff1a; 16:45:41.463 [main] INFO org.nd4j.nativeblas.Nd4jBlas - Number of threads used for OpenMP BLAS: 6 16:45:41.497 [main] INFO org.nd4j.linalg.api.ops.executioner.DefaultOpExecutioner - Backend used: [CPU]; OS: [Windows 10] 16:4…

Sqlserver2012和Sqlserver2019数据库设置最大并行数解决数据库CPU高问题

请注意&#xff0c;最大并行数范围是0到CPU的实际逻辑核心数的最大值 SQL Server2019之前的版本&#xff0c;最大并行度默认值都是0&#xff0c;也就是无限制。SQL Server2019最大并行度默认值会根据CPU逻辑处理器数自动计算&#xff0c;如数值是8&#xff0c;那么也就是一个执…

时序预测 | Python实现ARIMA-CNN-LSTM差分自回归移动平均模型结合卷积长短期记忆神经网络时间序列预测

时序预测 | Python实现ARIMA-CNN-LSTM差分自回归移动平均模型结合卷积长短期记忆神经网络时间序列预测 目录 时序预测 | Python实现ARIMA-CNN-LSTM差分自回归移动平均模型结合卷积长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 …

第23期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练 Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

Django开发使用DRF框架之创建纯净版框架步骤

使用Django开发时&#xff0c;遇到前后端分离的项目&#xff0c;需要创建一个纯净版的Django框架&#xff0c;在使用restframework框架时&#xff0c;有些Django自带的功能或者说是APP用不到&#xff0c;那需要怎么设置呢&#xff0c;需要解决哪些问题&#xff0c;请见下面的详…

《研发效能(DevOps)工程师》课程简介(三)丨IDCF

在研发效能领域中&#xff0c;【开发与交付】的学习重点在于掌握高效的开发工具和框架&#xff0c;了解敏捷开发方法&#xff0c;掌握持续集成与持续交付技术&#xff0c;以及如何保证应用程序的安全性和合规性等方面。 由国家工业和信息化部教育与考试中心颁发的职业技术证书…

【虹科干货】Redis企业版给DevOps团队带来了哪些价值?

内存太贵&#xff1f;现代化转型太难&#xff1f;还在花费精力维护数据库基础设施&#xff1f;Redis Enterprise 在开源版的基础上增加了一整套包含管理、自动化、弹性以及安全等方面的功能&#xff0c;使其更适合企业级的应用场景。那么&#xff0c;Redis Enterprise 如何能成…

防近视台灯有必要买吗?分享能够预防近视的专业护眼台灯

对于护眼台灯能够预防近视这件事&#xff0c;很多家长认为这是一种智商税的。其实不然&#xff0c;护眼台灯之所以能够预防近视&#xff0c;当然不是说只要使用了这种台灯&#xff0c;就真的不会近视了。首先我们要明白&#xff0c;台灯对于孩子而言是夜晚阅读书写时必不可少的…

nacos1.1.4 持久化数据库升级到 Mysql8.0.34

1 环境要求 CentOS 7、MySQL 8.0.34 2 安装步骤 2.1 docker拉取mysql 8.0.34命令 这样写时拉取最新版本&#xff0c;可以直接写到对应的版本 docker pull mysql:8.0docker pull mysql:8.0.342.2 docker images确认 2.3 安装运行mysql8.0容器 docker run -p 3307:3306 --n…

API文档自动生成

API文档自动生成 背景smart-doc配置效果图 背景 对于API接口文档自动生成&#xff0c;可能大家&#xff0c;最新想到的是用swagger&#xff0c;但是有以下问题&#xff1a; 对代码侵入太强版本升级&#xff0c;并不兼容不能生成各种类型的文档 所以&#xff0c;今天给大家推荐…

Java算法:二分查找

一、 二分查找注意 前提是数组必须是有序的&#xff0c;否则无法正常工作。如果数组不是有序的&#xff0c;需要先对数组进行排序&#xff0c;然后才能使用二分查找算法。 二、二分查找高效算法 二分查找也称为折半查找&#xff0c;是一种在有序数组中查找目标元素的算法。它的…

华纳云:centos系统中怎么查看cpu信息?

在CentOS系统中&#xff0c;我们可以使用一些命令来查看CPU的详细信息。下面介绍几个常用的命令&#xff1a; 1. lscpu lscpu命令可以显示CPU的架构、型号、核心数、线程数、频率等信息。 # lscpu 执行以上命令后&#xff0c;会输出类似以下内容&#xff1a; 2. cat /proc/…

【JAVA学习笔记】54 - 集合 - Set类、HashSet类、TreeSet类(难点)

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter14/src/com/yinhai/set_ Set类 一、基本介绍 1.无序(添加和取出的顺序不一致) ,没有索引[后面演示] 2.不允许重复元素&#xff0c;所以最多包含一个null 3.JDK API中Set接口的实现类有: …

jvs-logic逻辑引擎功能新增:逻辑凭证、自定义权限控制等等

新增: 1.新增逻辑复制功能&#xff1b;主要用于数据的同步和复制 2.逻辑新增权限设置功能&#xff1b; 每个逻辑可以设置不同的权限&#xff0c;逻辑页的功能权限配置默认是全部赋权给应用授权的相关人员&#xff0c;也可以按照自定义配置&#xff0c;如图所示&#xff0c;选…

rhcsa-数据流和重定向

cp cp 选项 源文件 目标文件 ****-a 复制目录的所有信息&#xff08;保留文件信息&#xff09; -p保留原文件的权限&#xff0c;所有者以及时间戳的信息 -r复制目录及所有子目录的所有文件 例&#xff1a; cp -p 复制的源文件 复制的目标路径 mv 作用&#xff…