upload-labs靶场练习

news/2025/1/19 9:03:01/

01(JS前端认证)

客户端JS脚本有限制,本来想用上次笔记的方法来做(即改扩展名为.jpg,上传,抓包,改扩展名为.php,放行或者发送至repeater,改扩展名然后重发,再使用蚁剑连接),但是不知道是什么原因上传不成功,只好选择另一种方法来做

首先打开谷歌浏览器的设置,选择隐私与安全

选择网站设置

找到JavaScript然后选择“不允许网站使用JavaScript”(即关闭JS)

然后返回界面,直接上传一个php类型的一句话木马

就会自动识别为图片

右键点击图片复制图片地址

使用蚁剑连接成功,说明上传成功

也可以用hackbar构造传参,返回phpinfo界面即为传参成功

源码解读(关键部分在复制源码时已有解读):

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

02(MIME认证)

解读代码:

$is_upload = false;
$msg = null;#定义两个变量,is_upload标记文件是否上传,初始值为false,msg存储上传过程中的错误信息,初始值为null
if (isset($_POST['submit']))#检查是否点击了submit按钮,如果有就接着执行 {if (file_exists(UPLOAD_PATH))#检查上传目录UPLOAD_PATH是否存在 {if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif'))#检查文件类型是否为image/jpeg、image/png、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.'文件夹不存在,请手工创建!';}
}

通过其检查的是文件类型image/jpeg……可看出本题的基本思路是抓包修改content-type,选择一个一句话木马,上传并抓包发至重放器

将Content-Type改为 image/jpeg(只要是代码解释里面的三个都可)

发包后即可得到文件路径,使用蚁剑连接成功

03(php3、phtml绕过黑名单)

解读源码:

12行:定义两个变量,is_upload标记文件是否上传,初始值为false,msg存储上传过程中的错误信息,初始值为null

3:submit按钮是否被点击

4:检查上传目录是否存在

5-11:获取文件扩展名并将其转换为小写

13-22:检查扩展名,不允许‘.asp’、'.aspx'、'.php'、'.jsp'类型的文件上传(若没有这么多限制,只是不允许.php文件上传的话,可以通过剩下几个文件扩展名替代php),若是这些文件以外的文件上传,则正常上传,并且从第15行可以看出,路径由上传目录、当前日期时间(YmdHis格式)、4位随机数和文件扩展名组成

解题过程:

思路为可将文件扩展名改为.php3、.php4来绕过,但是新版本的phpstudy没有ts版本的php,所以就去下载了一个2018版的phpstudy

根据提示下载了运行库合集

下载完接着切换php版本(php-5.2.17+Apache)

打开设置

CTRL+f搜索addtype找到这句话

去掉#,并在后面添加内容,使其变为

保存后像第一次搭建网站一样把upload-labs放到phpstudy2018的WWW文件夹下,访问127.0.0.1即可开始做题

先上传一个一句话木马

bp抓包,修改文件后缀为.php3然后重发

复制并拼接文件路径

使用蚁剑连接即可

04(.htaccess绕过黑名单)

源码解析:
$is_upload = false;#初始化一个变量,表示文件是否上传成功
$msg = null;#初始化一个变量,用于存储上传过程中的提示信息
if (isset($_POST['submit']))#确认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 . '文件夹不存在,请手工创建!';}
}

根据源码解读,该题属于大量的文件后缀被限制,即除了php外常见的可绕过的后缀都被限制,可尝试上传.htaccess后缀文件,但是此方法仅限于aoache服务器

知识点补充:
大佬的通关wp

.htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令。
.htaccess主要的作用有:URL重写、自定义错误页面、MIME类型配置以及访问权限控制等。主要体现在伪静态的应用、图片防盗链、自定义404错误页面、阻止/允许特定IP/IP段、目录浏览与主页、禁止访问指定文件类型、文件密码保护等。
.htaccess的用途范围主要针对当前目录。

创建.htaccess文件,代码如下:

方法一:
<FilesMatch "4.png">
SetHandler application/x-httpd-php
</FilesMatch>
#如果当前目录下有4.png,就会被解析为.php
 
方法二:
AddType application/x-httpd-php .png
#如果当前目录下有以.png结尾的文件,就会被解析为.php,.png后面也可以添加其他文件形式

解题过程:

一开始做不出来,后面去搜了别人的wp,说是nst版本的phpstudy做不出来,又换成2018版的phpstudy,但还是不行

首先编辑一个.htaccess文件上传并抓包发送至重发器

将文件名改为abc.jpg,文件内容改为一句话木马,重新发包

复制,拼接路径,使用蚁剑连接


http://www.ppmy.cn/news/1564364.html

相关文章

新星杯-ESP32智能硬件开发--ESP32系统

本博文内容导读&#x1f4d5;&#x1f389;&#x1f525; 1、ESP32芯片和系统架构进行描述&#xff0c;给出ESP32系统的地址映射规则。 2、介绍ESP32复位及时钟定时具体功能&#xff0c;方便后续开发。 3、介绍基于ESP32开发板使用的底层操作系统&#xff0c;对ESP32应用程序开…

基于 STM32 连接 Mini MP3 播放器的实践探索

在嵌入式系统开发中&#xff0c;音频播放功能常常是提升项目趣味性和实用性的关键要素之一。本文将详细阐述从选用 51 单片机到最终基于 STM32 成功连接 Mini MP3 播放器并实现串口通信及音频播放的全过程&#xff0c;旨在为面临类似技术难题的开发者提供参考与借鉴。 一、51 …

关于安科瑞Acrel-1000DP分布式光伏监控系统的实际案例分析-安科瑞 蒋静

摘 要&#xff1a;常规能源以煤、石油、天然气为主&#xff0c;不仅资源有限&#xff0c;而且会造成严重的大气污染&#xff0c;开发清洁的可再生能源已经成为当今发展的重要任务&#xff0c;“节能优先&#xff0c;效率为本”的分布式发电能源符合社会发展要求。 随着“双碳”…

SparkSQL数据源与数据存储综合实践

文章目录 1. 打开项目2. 查看数据集2.1 查看JSON格式数据2.2 查看CSV格式数据2.3 查看TXT格式数据 3. 添加单元测试依赖4. 创建数据加载与保存对象4.1 创建Spark会话对象4.2 创建加载JSON数据方法4.3 创建加载CSV数据方法4.4 创建加载Text数据方法4.5 创建加载JSON数据扩展方法…

第五章:VRRP和HSRP的网关冗余配置与管理

一、HRSP 1、简介 在骨干网的设备连接中&#xff0c;单一的设备容易出现故障造成网络的中断&#xff0c;可靠性较差&#xff0c;如图所示&#xff0c;如果核心交换机出现问题&#xff0c;不能正常工作&#xff0c;会影响整个网络的通信&#xff0c;因为整个网络的数据转发是通…

软件测试 —— Selenium(等待)

软件测试 —— Selenium&#xff08;等待&#xff09; 一个例子强制等待使用示例&#xff1a;为什么不推荐使用强制等待&#xff1f;更好的选择 隐式等待 implicitly_wait&#xff08;&#xff09;隐式等待和强制等待的区别隐式等待&#xff08;Implicit Wait&#xff09;强制等…

Jenkins-基于Role的鉴权机制

jenkins自带了一些全局性的安全配置。 但无法通过job等相对细粒度的来控制使用者的权限。但它可以借助相关的插件实现细颗粒的权限控制。 插件&#xff1a; Role-based Authorization Strategy 需要在configure global security中配置授权策略如下&#xff1a; 保存后&#x…

游戏引擎学习第81天

仓库:https://gitee.com/mrxiao_com/2d_game 或许我们应该尝试在地面上添加一些绘图 在这段时间的工作中&#xff0c;讨论了如何改进地面渲染的问题。虽然之前并没有专注于渲染部分&#xff0c;因为当时主要的工作重心不在这里&#xff0c;但在实现过程中&#xff0c;发现地面…