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

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)访问脚本

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

相关文章:

  • Python-Django系列—视图
  • 【ArcGIS微课1000例】0145:如何按照自定义形状裁剪数据框?
  • Rust与C/C++互操作实战指南
  • 软考-软件设计师中级备考 10、文件管理、设备管理
  • 《MATLAB实战训练营:从入门到工业级应用》工程实用篇-自动驾驶初体验:车道线检测算法实战(MATLAB2016b版)
  • 【Linux】日志与策略模式、线程池
  • 基于k8s系统的API网关-kong网关
  • Kubernetes(k8s)学习笔记(六)--KubeSphere前置环境安装
  • PowerShell 备份 Windows10/11 还原计算机驱动程序SOP
  • 复杂网络系列:第 5 部分 — 社区检测和子图
  • USB布局布线
  • 【iOS】 方法交换
  • C++负载均衡远程调用学习之Agent代理模块基础构建
  • 修复笔记:SkyReels-V2 项目中的 torch.load 警告
  • 使用 IDEA + Maven 搭建传统 Spring MVC 项目的详细步骤(非Spring Boot)
  • Linux中的粘滞位和开发工具和文本编辑器vim
  • 神经网络发展的时间线——积跬步至千里
  • terraform resource创建了5台阿里云ecs,如要使用terraform删除其中一台主机,如何删除?
  • 【ThinkBook 16+ 电脑重做系统type-c接口部分功能失效解决方案】
  • Ubuntu 系统上广受好评的浏览器推荐
  • 甘肃临夏州政协委员马全成涉嫌诈骗罪,被撤销政协委员资格
  • 张建华评《俄国和法国》|埃莲娜·唐科斯的俄法关系史研究
  • 产假工资是谁出?女职工生育能领多少生育津贴?解答来了
  • 案件发回重审,李在明参选韩总统之路再添波折
  • 王毅谈金砖国家反恐和网络安全合作
  • 家政阿姨如何炼成全国劳模?做饭、收纳、养老、外语样样都会