upload-labs通关笔记-第4关 文件上传之.htacess绕过

目录

一、.htacess

二、代码审计

三、php ts版本安装

1、下载ts版本php

2、放入到phpstudy指定文件夹中

3、修改php配置文件

4、修改php.ini文件

5、修改httpd.conf文件

(1)定位文件

(2)修改文件

6、重启小皮

7、切换ts版本php 

四、渗透实战

1、构造.htacess文件

2、构造图片文件

3、上传.htacess和图片文件

4、获取图片地址

5、访问脚本


本文通过《upload-labs靶场通关笔记系列》来进行upload-labs靶场的渗透实战,本文讲解upload-labs靶场第四关文件.htacess渗透实战。

一、.htacess

.htaccess 是 Apache 服务器的分布式配置文件,全称是Hypertext Access(超文本入口)。.htaccess 是 Apache 服务器的分布式配置文件,全称是Hypertext Access(超文本入口)。.htaccess 文件提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。

.htaccess 文件能够对 Apache 服务器的特定目录进行配置,借助它可以修改文件类型的解析规则。所以,若成功上传一个恶意的 .htaccess 文件,就可以让服务器把其他后缀的文件当作 PHP 文件来解析,进而实现文件上传htacess绕过。

二、代码审计

打开文件上传靶场的第4关,查看源码并分析,如下所示代码使用黑名单方法检测脚本,虽然包含多种变体(".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"),但可能遗漏新的危险扩展名(如.htacess等)。

<?php
// 初始化上传状态和消息变量
$is_upload = false;  // 标记文件是否上传成功
$msg = null;         // 存储上传过程中的错误信息// 检查用户是否提交了表单(点击了上传按钮)
if (isset($_POST['submit'])) {// 检查上传目录是否存在if (file_exists(UPLOAD_PATH)) {// 定义禁止上传的文件扩展名黑名单(包含各种大小写变体)$deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",  // PHP相关扩展".html",".htm",".phtml",".pht",                   // HTML相关".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",   // PHP大小写变体".Html",".Htm",".pHtml",                          // HTML大小写变体".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",  // JSP相关".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml", // JSP大小写变体".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer", // ASP相关".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr", // ASP大小写变体".sWf",".swf",                                    // Flash文件".ini"                                            // 配置文件);// 获取上传文件名并处理$file_name = trim($_FILES['upload_file']['name']);  // 去除首尾空格$file_name = deldot($file_name);    // 删除文件名末尾的点(防止file.php.绕过)$file_ext = strrchr($file_name, '.');  // 获取文件扩展名(从最后一个点开始)$file_ext = strtolower($file_ext);     // 转换为小写统一比较$file_ext = str_ireplace('::$DATA', '', $file_ext); // 去除NTFS备用数据流::$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后缀的文件本关卡没有在黑名单种,故而可以通过上传.htacess文件利用文件解析规则绕过,举个例子,.htaccess文件内容如下所示。

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

在将.htaccess文件上传到服务器后,再上传一个test4.jpg文件(文件内容为php脚本),服务器会将test.jpg当作test4.php文件解析再进行访问。总之,虽然在本关卡中不能上传.php后缀的文件,但是可以通过先上传.htacess文件,再上传满足.htacess的图片文件,这样即可通过上传此2个类型文件达到绕过服务器的过滤规则的目的。 

三、php ts版本安装

详细很多使用phpstudy搭建靶场的网安人参考upload-labs靶场攻略却无法复现成功,为何PHPStudy中AddType application/x-httpd-php,以及.htacesss渗透方法等Apache命令之所以在Apache的设置文件中设置后未实现目标效果呢,这是由于PHP的版本不符导致的,但注意这里的PHP版本并不是指PHP7.3.0、PHP7.4.0这种版本号,也不是适用于32位的PHP、适用于64位的PHP这种不同机型的版本,而是PHP的NTS(Non Thread Safe)与TS(Thread Safe)的这种不同版本导致的。如下所示,当前phpstudy中点击软件管理,我们查看php软件都是nts版本,故而如果像渗透成功,需要安装TS版本的PHP,并在Apache中配置好相关设置。

将ts版本的php软件集成到phpstudy,步骤如下所示。 

1、下载ts版本php

在php官网下载ts版本的php软件,官网地址如下所示。

https://windows.php.net/download

以php7.30为例,下载过程要选择ts版本(即thread safe),具体如下图黑框所示。 

2、放入到phpstudy指定文件夹中

将下载解压后的ts版本php放到小皮的指定目录中,即“Extensions\php”子目录中,具体如下所示。

3、修改php配置文件

进入到php_7.3.30_t文件夹内,找到php.ini-development文件,复制黏贴一份并改名为php.ini。

4、修改php.ini文件

打开php.ini,找到extension_dir,并把前面的";"符号删掉(在php.ini相当于注释符),其值改为"PHP文件的路径/ext"。

;extension_dir = "D:/phpstudy_pro/Extensions/php/php-7.3.30ts/ext"

修改后如下所示,记得修改后保存文件。

5、修改httpd.conf文件

(1)定位文件

接下来在PHPStudy安装Apache的目录下,打开Apache的配置文件httpd.conf,以我的安装目录为例,httpd.conf的位置如下所示。

D:\phpstudy_pro, httpd.conf在D:\phpstudy_pro\Extensions\Apache2.4.39\conf

 也可以通过phpstudy-设置-httpd.conf找到该文件,具体方法如下所示。

(2)修改文件

为例防止将httpd.cofn改坏了,建议先把httpd.conf备份一份,以后更换时直接替换就好。搜索LoadModule,找到有很多LoadModule语句的地方。

.在末尾加上LoadModule php7_module "PHP文件的路径/php7apache2_4.dll"和PHPIniDir "PHP文件的路径"。

LoadModule php7_module "D:/phpstudy_pro/Extensions/php/php-7.3.30ts/php7apache2_4.dll"
PHPIniDir "D:/phpstudy_pro/Extensions/php/php-7.3.30ts"

修改后效果如下所示,注意需要保存文件。

6、重启小皮

完成修改配置文件后,需要重启服务生效,如下所示。

7、切换ts版本php 

通过首页-网站-管理-php版本-切换到php-7.3.30ts,将php切换为ts版本的php服务。

四、渗透实战

1、构造.htacess文件

2、构造图片文件

构造图片文件test4.jpg,内容为显示phpinfo的信息,具体如下所示,后缀为。

<?php
phpinfo();
?>

3、上传.htacess和图片文件

打开upload靶场的第四关,将.htacess和test4.jpg文件,如下所示两个文件都上传成功。

http://127.0.0.1/upload-labs/Pass-04/index.php

4、获取图片地址

鼠标右键点击上传成功的反馈框,获取到图片的URL地址,具体如下所示。

http://127.0.0.1/upload-labs/upload/test4.jpg

5、访问脚本

复制图片地址到URL地址栏并访问,显示php版本号就是上传成功,.hatcess绕过成功,文件成功上传到upload目录下了

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

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

相关文章

LeetCode 88. 合并两个有序数组 | Python 最简写法 + 实战注释

在日常刷题和面试中,「合并两个有序数组」是一个经典基础题。虽然属于简单难度,但它非常考察你的数组操作技巧和代码优化能力。本篇文章将带你从基础解法入手,进阶到最简洁的三元表达式写法,理解每一行代码背后的逻辑。 📌 题目描述 给你两个按 非递减顺序 排列的整数数组…

Kafka进阶指南:从原理到实战

目录 一、Kafka 基础回顾 二、生产者进阶 2.1 数据生产流程深度解析 2.2 关键配置参数详解 2.3 序列化与自定义序列化器 三、消费者进阶 3.1 消费方式与原理 3.2 分区分配策略 3.2.1 Range&#xff08;范围&#xff09;策略 3.2.2 Round - Robin&#xff08;轮询&…

Lightpanda开源浏览器:专为 AI 和自动化而设计的无界面浏览器

​一、软件介绍 文末提供程序和源码下载 Lightpanda开源浏览器&#xff1a;专为 AI 和自动化而设计的无界面浏览器&#xff1b; Javascript execution Javascript 执行Support of Web APIs (partial, WIP)支持 Web API&#xff08;部分、WIP&#xff09;Compatible with Pla…

团结引擎开源车模 Sample 发布:光照渲染优化 动态交互全面体验升级

光照、材质与交互效果的精细控制&#xff0c;通常意味着复杂的技术挑战&#xff0c;但借助 Shader Graph 14.1.0(已内置在团结引擎官方 1.5.0 版本中)&#xff0c;这一切都变得简单易用。通过最新团结引擎官方车模 Sample&#xff0c;开发者能切身感受到全新光照优化与编辑功能…

SpringCloud之Ribbon基础认识-服务负载均衡

0、Ribbon基本认识 Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端 负载均衡的工具。 Ribbon 主要功能是提供客户端负载均衡算法和服务调用 Ribbon 客户端组件提供一系列完善的配置项如连接超时&#xff0c;重试等。 Ribbon 会基于某种规则&#xff08;如简单…

当 DeepSeek 遇见区块链:一场颠覆式的应用革命

目录 一、DeepSeek 与区块链的初印象二、技术融合&#xff1a;创新的基石2.1 强化学习优化智能合约2.2 混合专家系统适配多链2.3 语义理解增强合规性 三、应用实践&#xff1a;重塑行业格局3.1 DeFi 协议智能化跃迁3.2 GameFi 经济深度进化3.3 供应链金融信任增强 四、面临挑战…

vue3项目中使用CodeMirror组件的详细教程,中文帮助文档,使用手册

简介 这是基于 Vue 3 开发的 CodeMirror 组件。该组件基于 CodeMirror 5 开发&#xff0c;仅支持 Vue 3。 除了支持官方提供的各种语法模式外&#xff0c;还额外添加了日志输出展示模式&#xff0c;开箱即用&#xff0c;但不一定适用于所有场景。 如需完整文档和更多使用案例…

LeetCode热题100--240.搜索二维矩阵--中等

1. 题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[1…

2025爬虫实战技巧:高效数据采集方案

2025爬虫实战技巧:高效数据采集方案 🔥 本文核心价值 HTTPS请求链路加密逆向解析动态Cookie生成机制破解Cloudflare等高级防护绕过方案分布式爬虫架构设计要点目录 2025爬虫实战技巧:高效数据采集方案🔥 本文核心价值一、现代反爬机制技术解析1.1 主流平台防护体系1.2 反…

绑定 SSH key(macos)

在 macOS 上绑定 Gitee 或 GitHub 的 SSH Key&#xff0c;通常分为以下几步操作&#xff0c;包括生成 SSH key、添加到 ssh-agent&#xff0c;并配置到 Gitee 或 GitHub 平台。 1. 检查是否已有 SSH Key ls -al ~/.ssh 看看是否已有 id_rsa 或 id_ed25519 等文件。如果没有就…

Tailwind CSS v4 主题化实践入门(自定义 Theme + 主题模式切换)✨

ok&#xff0c;经过学习Tailwindcss我决定将此专栏建设成为一个Tailwindcss实战专栏&#xff0c;我将在专栏内完成5050挑战&#xff1a;50天50个Tailwindcss练习项目&#xff0c;欢迎大家订阅&#xff01;&#xff01;&#xff01; Tailwind CSS v4 带来了更强大的主题定制能力…

SAF利用由Varjo和AFormX开发的VR/XR模拟器推动作战训练

通过将AFormX的先进军用飞行模拟器与Varjo的行业领先的VR/XR硬件相结合&#xff0c;斯洛文尼亚武装部队正以经济高效、沉浸式的训练方式培训战斗机飞行员&#xff0c;以提高其战术准备和作战效率。 挑战&#xff1a;获得战术军事航空训练的机会有限 军事航空训练长期以来一直…

VUE中通过DOM导出PDF

最终效果 前端导出PDF的核心在于样式的绘制上&#xff0c;这里其实直接使用CSS进行绘制和布局就行&#xff0c;只不过需要计算好每页DIV盒子的大小&#xff0c;防止一页放不下造成样式错乱。 项目依赖 项目是Vue3 TS npm i html2canvas1.4.1 npm i jspdf3.0.1工具类(htmlToPdf…

SpringAI框架中的RAG模块详解及应用示例

SpringAI框架中的RAG模块详解及应用示例 RAG&#xff08;Retrieval-Augmented Generation&#xff09;可以通过检索知识库&#xff0c;克服大模型训练完成后参数冻结的局限性&#xff0c;携带知识让大模型根据知识进行回答。SpringAI框架提供了模块化的API来支持RAG&#xff0…

MySQL-数据查询(测试)-05-(12-1)

1-数据准备&#xff1a; CREATE TABLE 员工信息表 (员工编号 VARCHAR(10) PRIMARY KEY,姓名 VARCHAR(20),学历 VARCHAR(20),出生日期 DATE,性别 INT,工作年限 INT,地址 VARCHAR(100),电话号码 VARCHAR(20),员工部门号 INT ); INSERT INTO 员工信息表 (员工编号, 姓名, 学历, 出…

5G网络:能源管理的“智能电网“革命,Python如何成为关键推手?

5G网络:能源管理的"智能电网"革命,Python如何成为关键推手? 大家好,我是Echo_Wish。今天咱们聊一个既硬核又接地气的话题——5G网络如何用Python代码重构全球能源管理。 不知道你们有没有注意过: • 家里装了智能电表后,电费突然变"聪明"了,谷时充…

AI背景下,如何重构你的产品?

当AI敲门时&#xff0c;你的产品准备好开门了吗&#xff1f; 最近和做产品的老张聊天&#xff0c;他愁眉苦脸地说&#xff1a;"现在AI这么火&#xff0c;我们的产品就像个老古董&#xff0c;用户都跑隔壁用AI产品去了。“这话让我想起三年前另一个朋友&#xff0c;当时区…

互联网大厂Java面试实战:从Spring Boot到微服务的技术问答与解析

&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通 &#x1f601; 2. 毕业设计专栏&#xff0c;毕业季咱们不慌忙&#xff0c;几百款毕业设计等你选。 ❤️ 3. Python爬虫专栏…

Apollo学习——aem问题

执行aem指令出现一下问题 lxflxf:~/MYFile/apollo_v10.0 $aem enter permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.49/containers/json?filters%7B%22name%22%…

数字IC后端零基础入门基础理论(Day2)

数字IC后端零基础入门基础理论&#xff08;Day1&#xff09; Placement Blockage: cell摆放阻挡层。它是用来引导工具做placement的一种物理约束或手段&#xff0c;目的是希望工具按照我们的要求来做标准单元的摆放。 它主要有三种类型&#xff0c;分别是hard placement bloc…