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

news2025/5/17 7:00:49

目录

一、.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.coloradmin.cn/o/2377435.html

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

相关文章

DeepSearch代表工作

介绍下今年以来深度搜索相关的一些论文~ 文章目录 Search-o1简述方法实验Search-R1简介方法带搜索引擎的强化学习多轮搜索调用的生成训练模板奖励建模实验R1-Searcher简介方法数据选择两阶段的强化学习训练算法ReSearch: Learning to Reason with Search for LLMs via Reinforc…

记录一次服务器卡顿

一、服务器卡顿现象 服务用了一段时间后&#xff0c;突然很卡&#xff0c;发现在服务器上新建excel也很卡&#xff0c;发现服务器中病毒了&#xff0c;然后重新安装了操作系统。重新安装服务环境时&#xff0c;发现同时安装pdf、tomcat时都很慢&#xff0c;只能一个安装好了&am…

leetcode2749. 得到整数零需要执行的最少操作数-medium

1 题目&#xff1a;得到整数零需要执行的最少操作数 官方标定难度&#xff1a;中 给你两个整数&#xff1a;num1 和 num2 。 在一步操作中&#xff0c;你需要从范围 [0, 60] 中选出一个整数 i &#xff0c;并从 num1 减去 2i num2 。 请你计算&#xff0c;要想使 num1 等于…

14 C 语言浮点类型详解:类型精度、表示形式、字面量后缀、格式化输出、容差判断、存储机制

1 浮点类型 1.1 浮点类型概述 浮点类型用于表示小数&#xff08;如 123.4、3.1415、0.99&#xff09;&#xff0c;支持正数、负数和零&#xff0c;是科学计算和工程应用的核心数据类型。 1.2 浮点数的类型与规格 浮点类型存储大小值范围&#xff08;近似&#xff09;实际有效…

Vue3:脚手架

工程环境配置 1.安装nodejs 这里我已经安装过了&#xff0c;只需要打开链接Node.js — Run JavaScript Everywhere直接下载nodejs&#xff0c;安装直接一直下一步下一步 安装完成之后我们来使用电脑的命令行窗口检查一下版本 查看npm源 这里npm源的地址是淘宝的源&#xff0…

显性知识的主要特征

有4个主要特征&#xff1a; 客观存在性静态存在性可共享性认知元能性

自定义快捷键软件:AutoHotkey 高效的快捷键执行脚本软件

AutoHotkey 是一种适用于 Windows 的免费开源脚本语言&#xff0c;它允许用户轻松创建从小型到复杂的脚本&#xff0c;用于各种任务&#xff0c;例如&#xff1a;表单填充、自动点击、宏等。 定义鼠标和键盘的热键&#xff0c;重新映射按键或按钮&#xff0c;并进行类似自动更…

【C++】 —— 笔试刷题day_30

一、爱吃素 题目解析 这道题&#xff0c;简单来说就是给定两个数a和b&#xff0c;然后让我们判断a*b是否是素数。 算法思路 这道题还是比较简单的 首先&#xff0c;输入两个数a和b&#xff0c;这两个数的数据范围都是[1, 10^11]&#xff1b;10的11次方&#xff0c;那a*b不就是…

项目版本管理和Git分支管理方案

文章目录 一、团队协作1.项目团队与职责2.项目时间线与里程碑3.风险评估与应对措施4.跨团队同步会议&#xff08;定期&#xff09;跨团队同步会议&#xff08;双周) 5.版本升级决策树6.边界明确与路标制定a.功能边界划分b.项目路标制定b1、项目路标制定核心要素b2. 路标表格模板…

蓝牙AVRCP协议概述

AVRCP(Audio/Video Remote Control Profile)定义了蓝牙设备和 audio/video 控制功能通信的特 点和过程&#xff0c;另用于远程控制音视频设备&#xff0c;底层传输基于 AVCTP 传输协议。该 Profile 定义了AV/C 数字命令控制集。命令和信息通过 AVCTP(Audio/Video Control Trans…

2025长三角杯数学建模B题思路模型代码:空气源热泵供暖的温度预测,赛题分析与思路

2025长三角杯数学建模B题思路模型代码&#xff0c;详细内容见文末名片 空气源热泵是一种与中央空调类似的设备&#xff0c;其结构主要由压缩主机、热交换 器以及末端构成&#xff0c;依靠水泵对末端房屋提供热量来实现制热。空气源热泵作为热 惯性负载&#xff0c;调节潜力巨…

基于大数据的租房信息可视化系统的设计与实现【源码+文档+部署】

课题名称 基于大数据的租房信息可视化系统的设计与实现 学 院 专 业 计算机科学与技术 学生姓名 指导教师 一、课题来源及意义 租房市场一直是社会关注的热点问题。随着城市化进程的加速&#xff0c;大量人口涌入城市&#xff0c;导致租房需求激增。传统的租…

下周,Coinbase将被纳入标普500指数

Coinbase加入标普500指数紧随比特币突破10万美元大关之后。加密资产正在日益成为美国金融体系的一部分。大型机构已获得监管批准创建现货比特币交易所交易基金&#xff0c;进一步推动了加密货币的主流化进程。 加密货币行业迎来里程碑时刻&#xff0c;Coinbase即将加入标普500…

一发入魂:极简解决 SwiftUI 复杂视图未能正确刷新的问题(中)

概述 各位似秃非秃小码农们都知道,在 SwiftUI 中视图是状态的函数,这意味着状态的改变会导致界面被刷新。 但是,对于有些复杂布局的 SwiftUI 视图来说,它们的界面并不能直接映射到对应的状态上去。这就会造成一个问题:状态的改变并没有及时的引起 UI 的变化。 如上图所示…

基于Scrapy-Redis的分布式景点数据爬取与热力图生成

1. 引言 在旅游行业和城市规划中&#xff0c;热门景点的数据分析具有重要意义。通过爬取景点数据并生成热力图&#xff0c;可以直观展示游客分布、热门区域及人流趋势&#xff0c;为商业决策、景区管理及智慧城市建设提供数据支持。 然而&#xff0c;单机爬虫在面对大规模数据…

Java 使用 PDFBox 提取 PDF 文本并统计关键词出现次数(附Demo)

目录 前言1. 基本知识2. 在线URL2.1 英文2.2 混合 3. 实战 前言 爬虫神器&#xff0c;无代码爬取&#xff0c;就来&#xff1a;bright.cn Java基本知识&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD…

将 Element UI 表格元素导出为 Excel 文件(处理了多级表头和固定列导出的问题)

import { saveAs } from file-saver import XLSX from xlsx /*** 将 Element UI 表格元素导出为 Excel 文件* param {HTMLElement} el - 要导出的 Element UI 表格的 DOM 元素* param {string} filename - 导出的 Excel 文件的文件名&#xff08;不包含扩展名&#xff09;*/ ex…

【Linux网络】 HTTP cookie与session

HTTP cookie与session 引入HTTP Cookie 定义 HTTP Cookie&#xff08;也称为Web Cookie、浏览器Cookie或简称Cookie&#xff09;是服务器发送到用户浏览器并保存在浏览器上的一小块数据&#xff0c;它会在浏览器之后向同一服务器再次发起请求时被携带并发送到服务器上。通常&…

OrangePi Zero 3学习笔记(Android篇)11 - IR遥控器

目录 1. 查询IR信息 1.1.1 sunxi-ir-uinput 1.1.2 sunxi-ir 2. 调试键值 3. 匹配遥控器 4. Power键的特殊处理 5. 验证 ir的接口在13pin接口上&#xff0c;需要使用到扩展板。 1. 查询IR信息 在shell的界面输入命令&#xff1a; dumpsys input 分析返回信息&#xf…

【蓝桥杯省赛真题49】python偶数 第十五届蓝桥杯青少组Python编程省赛真题解析

python偶数 第十五届蓝桥杯青少组python比赛省赛真题详细解析 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解