当前位置: 首页 > news >正文

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目录下了

相关文章:

  • FFmpeg3.4 libavcodec协议框架增加新的decode协议
  • HarmonyOS 【诗韵悠然】AI古诗词赏析APP开发实战从零到一系列(一、开篇,项目介绍)
  • 物理:由基本粒子组成的个体能否提炼和重组?
  • Realman RM65-B 六自由度超轻量仿人机械臂
  • openjdk底层汇编指令调用(三)——编码
  • CSS可以继承的样式汇总
  • 【fastadmin开发实战】在前端页面中使用bootstraptable以及表格中实现文件上传
  • 使用全局状态管理(Vuex)实现数据共享​
  • “新五强”争锋,基础大模型玩家再洗牌
  • RTSP有两套格式吗?
  • 从数据中台到数据飞轮:实现数据驱动的升级之路
  • 【C++进阶篇】二叉搜索树的实现(赋源码)
  • 量化感知训练与 PyTorch 的哪些事
  • rocketMq实例
  • 高防服务器部署实战:从IP隐匿到协议混淆
  • 可视化+智能补全:用Database Tool重塑数据库工作流
  • 星云智控自定义物联网实时监控模板-为何成为痛点?物联网设备的多样化-优雅草卓伊凡
  • 视频编辑软件无限音频、视频、图文轨
  • 【HarmonyOs鸿蒙】七种传参方式
  • Python 基础语法与数据类型(八) - 函数参数:位置参数、关键字参数、默认参数、可变参数 (*args, **kwargs)
  • 加拿大总理宣布新内阁名单
  • 中共中央、国务院印发《生态环境保护督察工作条例》
  • 李公明 | 一周画记:印巴交火会否升级为第四次印巴战争?
  • 多地再发网约车从业及投资风险提示:避免盲目花费大笔资金“购车”入行
  • 现场丨“影像上海”启幕:串联摄影、电影与当代艺术
  • 国家主席习近平同普京总统举行小范围会谈