Webug4.0靶场通关笔记14- 第18关 文件上传之Nginx解析缺陷

目录

第18关 渗透实战

1.打开靶场

2.构造php脚本

3.源码分析

(1)客户端源码

(2)服务的源码

4.Nginx解析法渗透

(1)缺陷原因

(2)缺陷条件

(3)构造脚本

(4)上传脚本

(5)访问脚本

5.生僻字绕过渗透实战

(1)制作脚本

(2)上传图片并bp抓包

(3)生僻字绕过

(4)访问脚本


本文通过《webug4.0靶场第18文件上传之前端拦截》来进行渗透实战。Nginx解析缺陷是指在 Nginx 服务器配置或解析过程中存在的一些安全缺陷,可能导致服务器受到攻击,本文通过2种不同的方法实现渗透测试。

第18关 渗透实战

1.打开靶场

打开webug4.0靶场的第18关卡文件上传之解析关卡,具体如下所示。

http://192.168.71.1/webug4/control/upload_file/upload_file_2.php

2.构造php脚本

构造info.php目的是获取服务器的php信息,具体如下所示。

<?php phpinfo();?>

随手上传php脚本,提示不允许上传该格式类型,说明第18关卡同样有文件类型检查。

3.源码分析

(1)客户端源码

如下客户端存在js前端验证的问题,而且使用的白名单绕过要求文件的格式属于图片,具体如下所示。

(2)服务的源码

接下来我们来查看服务端是否进行文件格式过滤,打开upload_file_2.php文件,分析可知存在后缀的白名单过滤,仅允许上传jpg和png以及gif的文件,注释后的源代码如下所示。

<?php
// 引入公共配置文件,通常这里面包含一些全局的函数、常量、配置信息等
// 路径是相对于当前文件上两级目录下的 common 文件夹中的 common.php 文件
require_once "../../common/common.php";// 检查会话中是否存在 'user' 变量,如果不存在,意味着用户未登录
// 使用 header 函数将用户重定向到登录页面
if (!isset($_SESSION['user'])) {header("Location:../login.php");
}// 定义一个允许上传的文件扩展名数组,这里只允许上传 .jpg、.png 和 .gif 格式的图片文件
$filter = array(".jpg", '.png', '.gif');// 检查上传文件是否出现错误,$_FILES['file']['error'] 会返回上传文件的错误码
// 如果存在错误,直接终止脚本执行
if ($_FILES['file']['error']) {die();
}// 检查是否有文件被上传
if ($_FILES['file']) {// 将上传文件的相关信息(如文件名、临时文件路径、错误码等)赋值给变量 $arr$arr = $_FILES['file'];// 获取上传文件的扩展名,步骤如下:// strrchr($arr['name'], ".") 从文件名中找到最后一个 '.' 及其后面的部分,即扩展名// strtolower() 将扩展名转换为小写,以忽略大小写的影响// trim() 去除扩展名前后可能存在的空格$file_ext = trim(strtolower(strrchr($arr['name'], ".")));// 检查获取到的文件扩展名是否不在允许的扩展名数组 $filter 中// 如果不在,意味着文件类型不被允许if (!in_array($file_ext, $filter)){// 弹出一个警告框提示用户 "error"echo "<script>alert('error')</script>";// 终止脚本执行die();}// 检查目标上传目录中是否已经存在同名文件// TPMELATE 应该是一个预先定义好的常量,表示上传目录的路径if (file_exists(TPMELATE."/upload/".$arr['name'])){// 如果文件已存在,弹出警告框提示用户echo "<script>alert('该文件已经存在')</script>";} else {// 将文件名从 UTF - 8 编码转换为 gb2312 编码,可能是为了适应服务器文件系统的编码要求$filename = iconv("UTF-8","gb2312",TPMELATE."/upload/".$arr['name']);// 将临时上传的文件从临时目录移动到目标上传目录move_uploaded_file($arr["tmp_name"],$filename);// 输出文件的完整路径,并终止脚本执行echo $filename;die();}
}// 引入上传文件页面的 HTML 文件,通常该文件包含文件上传表单
require_once TPMELATE."/upload_file_1.html";

这段 PHP 代码实现了一个带有登录验证和文件类型过滤的文件上传功能。首先检查用户是否登录,若未登录则重定向到登录页面。接着定义了允许上传的文件扩展名数组,当有文件上传时,会检查文件是否有上传错误,若有则终止脚本。然后获取文件扩展名,检查其是否在允许的扩展名列表中,若不在则提示错误并终止。之后检查目标目录是否已存在同名文件,若不存在则将文件从临时目录移动到目标上传目录,并输出文件完整路径;若存在则提示用户。最后引入文件上传页面的 HTML 文件。 

4.Nginx解析法渗透

(1)Nginx解析缺陷原理

本文利用Nginx文件扩展名解析缺陷来进行渗透,原理是Nginx 在处理文件请求时,可能会根据文件扩展名来确定如何解析和处理该文件。如果配置不当,可能会导致 Nginx 将某些本应被视为静态文件的文件,按照脚本文件的方式进行解析,从而执行恶意代码。

当php.ini中 cgi.fix_pathinfo = 1配置开启时,会产生解析缺陷。

当访问http://x.x.x.x:8000/parse/index.jpg/x.php时,如果x.php不存在,PHP会递归向前解析,如果index.jpg存在就会把index.jpg当做PHP解析,造成了解析缺陷。

(2)缺陷条件

1) cgi.fix_pathinfo = 1

2)IIS 7.0/IIS 7.5/Nginx <0.8.03

3) phpStudy <= 8.1.0.7 (Windows版)

这里要强调,渗透环境要使用较低版本的phpstudy才可以复现此bug,其他版本的未必有此缺陷。

(3)构造脚本

 将info.php复制一份,并重命名为info18.jpg。

(4)上传脚本

搭建好Nginx渗透环境后,上传info18.jpg,如下所示。

如上所示点击上传按钮后,可知图片上传成功,上传后的脚本路径如下所示。

http://192.168.71.1/webug4/template/upload/info18.jpg

(5)访问脚本

接下来利用Nginx解析法构造脚本的访问路径,具体如下所示。

http://192.168.71.1/webug4/template/upload/info18.jpg/x.php

由于x.php不存在,PHP会递归向前解析,如果info18.jpg存在就会把info18.jpg当做PHP解析,造成了解析缺陷,从而成功获取到服务器的php相关信息,具体如下所示。

5.生僻字绕过渗透实战

(1)制作脚本

将info.php复制一份,并重命名为info18.jpg。

(2)上传图片并bp抓包

将info18.jpg上传,并使用bp抓包,同时将报文发送给repeater。

(3)生僻字绕过

使用生僻字来绕过,具体如下所示。

将文件名进行修改,添加生僻字后文件名如下所示。

info18.php龘.jpg

 修改完毕后点击发送,如下所示,渗透成功。

(4)访问脚本

根据上一步中的脚本上传地址来访问脚本地址,如下所示渗透成功。

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

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

相关文章

【QT】QT中的网络编程(TCP 和 UDP通信)

QT中的网络编程&#xff08;TCP 和 UDP通信&#xff09; 1.tcp1.1 tcp通信1.1.1 相比linux中tcp通信:1.1.2 QT中的tcp通信: 1.2 tcp通信流程1.2.1 服务器流程&#xff1a;1.2.1.1 示例代码1.2.1.2 现象 1.2.2 客户端流程&#xff1a;1.2.2.1 示例代码1.2.2.2 现象&#xff1a; …

架构思维:使用懒加载架构实现高性能读服务

文章目录 一、引言二、读服务的功能性需求三、两大基本设计原则1. 架构尽量不要分层2. 代码尽可能简单 四、实战方案&#xff1a;懒加载架构及其四大挑战五、改进思路六、总结与思考题 一、引言 在任何后台系统设计中&#xff0c;「读多写少」的业务场景占据主流&#xff1a;浏…

永磁同步电机控制算法--基于PI的位置伺服控制

一、原理介绍 永磁同步伺服系统是包含了电流环、速度环和位置环的三环控制系统。 伺服系统通过电流检测电路和光电编码器检测电动机三相绕组电流和转子位置θ&#xff0c;通过坐标变换&#xff0c;计算出转矩电流分量iq和励磁电流分量id。 位置信号指令与实际转子位置信号的差…

linux系统线程实现原理浅析

背景 对进程和线程的理解&#xff0c;之前一直都是凭一些零碎不完整的信息在理解&#xff1b; linux的进程和线程基本上一样&#xff0c;线程是轻量级进程&#xff0c;彼此有关联又独立。 得亏内核支持的好&#xff0c;写用户态程序可以不依赖于实现的理解&#xff0c;只需要…

MySQL连接报错处理:1130-host ... is not allowed to connect to this MySql server

在MySQL安装完成后&#xff0c;很多开发者会遇到这样一个问题&#xff1a; 错误代码 1130&#xff1a;host xxx.xxx.xxx.xxx is not allowed to connect to this MySql server 这个错误通常出现在你尝试通过远程工具&#xff08;如 Navicat、DBeaver 等&#xff09;连接 MySQL …

Linux系统之----进程控制

1.进程创建 进程创建部分由于就是fork函数&#xff0c;还有写时拷贝&#xff0c;在上一篇已经讲述过了&#xff0c;这里不在进行赘述&#xff0c;有疑问的读者可以前往上一篇博文《Linux系统--程序地址空间》中阅读&#xff01; 这里在多说一嘴写时拷贝吧 我们可以对比一下写…

Spring框架的设计目标,设计理念,和核心是什么 ?

Spring框架是一个为简化企业级应用开发而设计的开源框架&#xff0c;它提供了全面的基础设施支持&#xff0c;使得Java应用开发更加简单、快速和可维护。下面我将详细解释Spring框架的设计目标、设计理念以及核心组件。 设计目标 简化Java企业级应用开发&#xff1a;通过提供…

Red Hat6.4环境下搭建DNS服务器

DNS服务器&#xff08;Domain Name System Server&#xff09;是互联网中用于将域名&#xff08;如 www.example.com&#xff09;解析为IP地址&#xff08;如 192.0.2.1&#xff09;的服务器。它是互联网基础设施的重要组成部分&#xff0c;帮助用户通过易于记忆的域名访问网站…

Nginx核心功能 02

目录 Nginx代理技术核心概念 &#xff08;一&#xff09;正向代理&#xff08;Forward Proxy&#xff09; 1. 基本定义 2. 技术原理 3. 应用场景 &#xff08;二&#xff09;反向代理&#xff08;Reverse Proxy&#xff09; 1. 基本定义 2. 技术原理 3. 应用场景 一、…

关于Python:3. Python标准库和常用模块

1. os 和 sys&#xff08;系统编程基础&#xff09; 这两个模块是进行系统层面操作&#xff08;如文件管理、路径处理、环境变量访问等&#xff09;必不可少的工具。 os 模块 os 主要是用于与操作系统交互的&#xff0c;比如&#xff1a; 文件和目录操作 获取系统信息 运行…

Java基于SaaS模式多租户ERP系统源码

目录 一、系统概述 二、开发环境 三、系统功能介绍 一、系统概述 ERP&#xff0c;全称 Enterprise Resource Planning 即企业资源计划。是一种集成化的管理软件系统&#xff0c;它通过信息技术手段&#xff0c;将企业的各个业务流程和资源管理进行整合&#xff0c;以提高企业…

个人健康中枢的多元化AI网络革新与精准健康路径探析

引言 随着数字化转型的深入推进,个人健康中枢作为集成化健康管理系统,正在从传统的单一功能向多元化的AI驱动方向快速发展。在这一背景下,新兴网络硬件技术,特别是DPU(数据处理单元)和全光网络的出现,为个人健康中枢的革新提供了前所未有的机遇。本研究将深入探讨这些技…

AI跑得快,MCP来加速——模型计算平台在训练与推理中的硬核作用

AI跑得快,MCP来加速——模型计算平台在训练与推理中的硬核作用 一、引言:AI是“铁人三项”,但训练+推理常常“掉链子” 如今的人工智能系统越来越强,像ChatGPT、Stable Diffusion、Segment Anything等模型不断刷新技术天花板。但你是否也注意到: 明明模型设计得挺好,训练…

《MATLAB实战训练营:从入门到工业级应用》工程实用篇-自动驾驶初体验:车道线检测算法实战(MATLAB2016b版)

《MATLAB实战训练营&#xff1a;从入门到工业级应用》工程实用篇-&#x1f697; 自动驾驶初体验&#xff1a;车道线检测算法实战&#xff08;MATLAB2016b版&#xff09; 大家好&#xff01;今天我要带大家一起探索自动驾驶中一个非常基础但又至关重要的技术——车道线检测。我…

模型部署——cuda编程入门

CUDA中的线程与线程束 kernel是在device上线程中并行执行的函数&#xff0c;核函数用__global__符号声明&#xff0c;在调用时需要用<<<grid_size, block_size>>>来指定kernel要执行的线程数量。在CUDA中&#xff0c;每一个线程都要执行核函数&#xff0c;并…

WordPress不支持中文TAG标签出现404的解决方法

我们在后台编辑文章时输入中文标签会发现出现404的情况&#xff0c;其实中文TAG标签链接无法打开的原因是WordPress不支持中文的编码。那么解决的方法也很容易&#xff0c;只要改代码让WordPress能支持中文的编码形式&#xff0c;也就是UTF-8和GBK编码即可&#xff0c;无需用到…

金融信贷公司所需的技术和风控体系及其带来的价值

金融信贷公司的技术架构通过集成传统大型机系统与现代数据平台&#xff0c;能够有效支持金融信贷业务的运作&#xff0c;同时通过大数据、ETL、报表开发、数据仓库等技术为公司带来更高效的数据驱动决策、精准的风控分析和更灵活的业务支持。 一、公司技术架构 数据仓库架构&…

《AI大模型应知应会100篇》第43篇:大模型幻觉问题的识别与缓解方法

第43篇&#xff1a;大模型幻觉问题的识别与缓解方法 摘要 当AI系统自信满满地编造"量子计算机使用香蕉皮作为能源"这类荒谬结论时&#xff0c;我们不得不正视大模型的幻觉问题。本文通过15个真实案例解析、6种检测算法实现和3套工业级解决方案&#xff0c;带您掌握…

计算方法实验五 插值多项式的求法

【实验性质】 综合性验 【实验目的】 掌握Lagrange插值算法、Newton插值算法&#xff1b;理解Newton插值算法相对于Lagrange插值算法的优点。 【实验内容】 先用C语言自带的系统函数sin x求出 的值&#xff0c;然后分别用Lagrange、Newton方法求出的值&#xff0c;并与用…

文献总结:TPAMI端到端自动驾驶综述——End-to-End Autonomous Driving: Challenges and Frontiers

端到端自动驾驶综述 1. 文章基本信息2. 背景介绍3. 端到端自动驾驶主要使用方法3. 1 模仿学习3.2 强化学习 4. 测试基准4.1 真实世界评估4.2 在线/闭环仿真测试4.3 离线/开环测试评价 5. 端到端自动驾驶面临的挑战5.1 多模态输入5.2 对视觉表征的依赖5.3 基于模型的强化学习的世…