upload-labs通关笔记-第5关 文件上传之.ini绕过
目录
一、ini文件绕过原理
二、源码审计
三、渗透实战
1、查看提示
2、制作.user.ini文件
(1)首先创建一个文本文件
(2)保存文件名为.user.ini
2、制作jpg后缀脚本
(1)创建一个文本文件
(2)保存为文件名pass5.jpg
3、上传ini与jpg文件
(1)准备好待上传文件
(2)打开upload靶场第五关
(3)上传ini与jpg文件
4、访问readme.php
本文通过《upload-labs靶场通关笔记系列》来进行upload-labs靶场的渗透实战,本文讲解upload-labs靶场第四关文件.ini渗透实战。
一、ini文件绕过原理
在 PHP 环境中,ini文件可以用于配置 PHP 的运行环境。.user.ini 是 PHP 中用于特定目录配置的特殊文件 ,类似 Apache 的.htaccess 文件,主要作用如下所示。
- 自定义配置:允许非管理员用户为特定目录定义 PHP 配置指令,这些指令在该目录及其子目录中的 PHP 脚本执行时生效。比如可修改 upload_max_filesize 调整上传文件大小限制、修改 memory_limit 改变脚本可用内存 ,而不影响整个服务器配置。
- 文件包含:借助配置项 auto_prepend_file(在执行 PHP 文件前自动包含指定文件)和 auto_append_file(在执行 PHP 文件后自动包含指定文件) ,可实现恶意代码注入或后门构造。攻击者上传恶意.user.ini 文件,指定包含恶意 PHP 代码文件,就能在用户访问目录下 PHP 文件时执行恶意代码。
在文件上传关卡,具体利用方法如下所示。
- 编写.user.ini 文件:创建.user.ini,写入如下内容,意思是让服务器在每个 PHP 请求前自动包含名为pass5.jpg的文件。
auto_prepend_file = "pass5.jpg"
- 准备pass5.jpg的shell文件:创建pass5.jpg,内容为获取服务器php信息的PHP 代码,具体如下所示。
<?php
phpinfo();
?>
- 上传文件:当该关卡允许.ini和jpg后缀上传时,尝试将.user.ini 和pass5.jpg上传到服务器指定目录。
- 触发执行:上传成功后,访问目录下可执行的 PHP 文件(如关卡中提示的 readme.php ),服务器会根据.user.ini 配置,自动包含并执行pass5.jpg中的恶意代码。
二、源码审计
接下来对upload-labs 第 5 关的源码进行审计,如下为已经进行详细注释版的代码,很明显这段代码也是黑名单过滤来实现进行安全检查的。虽然包含多种变体(".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", ".htaccess"),与第四关的区别是将“ini”变为了“htaccess”,所以很明显这一关卡遗漏新的危险扩展名(如.ini等),这也是我们渗透这一关卡的关键。
<?php
// 初始化上传状态变量
$is_upload = false; // 布尔值,标记文件是否上传成功
$msg = null; // 字符串,用于存储上传过程中的错误信息// 检查是否通过POST方法提交了表单(submit按钮被点击)
if (isset($_POST['submit'])) {// 检查上传目录是否存在if (file_exists(UPLOAD_PATH)) {// 定义禁止上传的文件扩展名黑名单(包含各种变体)$deny_ext = array(// PHP相关扩展名及变体".php", ".php5", ".php4", ".php3", ".php2", ".pHp", ".pHp5", ".pHp4", ".pHp3", ".pHp2",// HTML相关扩展名及变体".html", ".htm", ".phtml", ".pht",".Html", ".Htm", ".pHtml",// JSP相关扩展名及变体".jsp", ".jspa", ".jspx", ".jsw", ".jsv", ".jspf", ".jtml",".jSp", ".jSpx", ".jSpa", ".jSw", ".jSv", ".jSpf", ".jHtml",// ASP相关扩展名及变体".asp", ".aspx", ".asa", ".asax", ".ascx", ".ashx", ".asmx", ".cer",".aSp", ".aSpx", ".aSa", ".aSax", ".aScx", ".aShx", ".aSmx", ".cEr",// 其他危险文件类型".sWf", ".swf", // Flash文件".htaccess" // Apache配置文件);// 获取并处理上传文件名$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备用数据流$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 . '文件夹不存在,请手工创建!'; // 上传目录不存在}
}
?>
三、渗透实战
1、查看提示
进入靶场pass5,点击右上角的提示,得知上传目录存在readme.php文件,如下图所示。
2、制作.user.ini文件
(1)首先创建一个文本文件
创建文件并里面写入,该配置文件的效果是在.user.ini相同的目录下,所有的php文件都包含pass5.jpg这个文件。
auto_prepend_file=pass5.jpg
(2)保存文件名为.user.ini
将文件保存为.user.ini并将保存类型配置为所有文件
2、制作jpg后缀脚本
(1)创建一个文本文件
代码内容如下所示:
<?php
phpinfo();
?>
(2)保存为文件名pass5.jpg
点击文件另存为pass5.jpg,保存类型设置为所有文件。
3、上传ini与jpg文件
(1)准备好待上传文件
两个所需要的文件就创建完毕,图示如下。
(2)打开upload靶场第五关
http://127.0.0.1/upload-labs/Pass-05/index.php
(3)上传ini与jpg文件
如下所示,上传user.ini与jpg文件,两者均上传成功。
4、访问readme.php
根据本关提示,在上传目录下是有一个readme.php
文件的,所以直接访问url:http://127.0.0.1/upload-labs/upload/readme.php,如下所示,php版本号成功显示,证明文件上传成功。
相关文章:

upload-labs通关笔记-第5关 文件上传之.ini绕过
目录 一、ini文件绕过原理 二、源码审计 三、渗透实战 1、查看提示 2、制作.user.ini文件 (1)首先创建一个文本文件 (2)保存文件名为.user.ini 2、制作jpg后缀脚本 (1)创建一个文本文件 …...

ssti模板注入学习
ssti模板注入原理 ssti模板注入是一种基于服务器的模板引擎的特性和漏洞产生的一种漏洞,通过将而已代码注入模板中实现的服务器的攻击 模板引擎 为什么要有模板引擎 在web开发中,为了使用户界面与业务数据(内容)分离而产生的&…...

填涂颜色(bfs)
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言📝 含泪播种的人一定能含笑收获! 题目描述 由数字 0 0 0 组成的方阵中,有一任意形状的由数字 1 1 1 构成的闭合圈。现…...

ros1+docker环境快速搭建
快速使用python 解析ros1的bag消息ros这个东西可以说安装起来非常麻烦的,费时费力,很可能还安装不成功,特别是我的环境是ubuntu22.04 ,官方都不支持安装ros1。因此一个可行且快速的方法是使用别人配置好的ros的docker环境 一、下…...
vscode extention踩坑记
# npx vsce package --allow-missing-repository --no-dependencies #耗时且不稳定 npx vsce package --allow-missing-repository #用这行 code --install-extension $vsixFileName --force我问ai:为什么我的.vsix文件大了那么多 ai答:因为你没有用 --n…...

GpuGeek全栈AI开发实战:从零构建企业级大模型生产管线(附完整案例)
目录 背景一、算力困境:AI开发者的「三重诅咒」1.1 硬件成本黑洞1.2 资源调度失衡1.3 环境部署陷阱 二、三大核心技术突破GpuGeek的破局方案2.1 分时切片调度引擎(Time-Slicing Scheduler)2.2 异构计算融合架构2.3 AI资产自动化…...
【TroubleShoot】禁用Unity Render Graph API 兼容模式
使用Unity 6时新建了项目,有一个警告提示: The project currently uses the compatibility mode where the Render Graph API is disabled. Support for this mode will be removed in future Unity versions. Migrate existing ScriptableRenderPasses…...
数据库字段唯一性修复指南:从设计缺陷到规范实现
数据库字段唯一性修复指南:从设计缺陷到规范实现 一、问题背景 表结构设计缺陷: sys_user 表未对 dingtalk_user_id(钉钉用户ID)字段设置唯一性约束,导致数据重复,引发以下问题: 系统稳定性风…...

DataX从Mysql导数据到Hive分区表案例
0、下载DataX并解压到对应目录 DataX安装包,开箱即用,无需配置。 https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz 相关参考文档 https://github.com/alibaba/DataX/blob/master/hdfswriter/doc/hdfswriter.md 1、Hive分区…...
高性能编程相关
常见高性能编程技巧: 一,系统级性能优化:从系统架构设计考虑,例如消息队列,模块分成分级,IO读写带宽等 二,算法级性能优化:时间和空间优化 三,代码级性能优…...

vulnhub靶场——secarmy
靶机:secarmy靶机,IP地址为192.168.230.18 攻击:kali,IP地址为192.168.230.134 靶机和攻击机都采用VMware虚拟机,都采用NAT模式 端口扫描: nmap 192.168.230.18 -O -A -p- --reason -sV 21/tcp (ftp): 开…...

labview硬件采集
(1)硬件的描述 (2)实验步骤1: (3)实验步骤2 库名/路径的选择要使用32位的开发资料 (4)实验步骤3 (5)实验步骤4 找到DoSetV12() 设置返回类型 设置chan 设置state labv…...

openfeign与dubbo调用下载excel实践
一、前言 openfeign和dubbo均是rpc框架 RPC(Remote Procedure Call,远程过程调用)框架 是一种允许程序像调用本地方法一样调用远程服务器上函数的技术。它隐藏了底层网络通信的复杂性,让开发者可以专注于业务逻辑,实现…...

ISP有感自发
一、黑电平 由于传感器,即便在无光的情况下,依然会产生微小的暗电流,这些暗电流可能是噪点会影响后期的调试。因此,我们便将这些电流处理为0,成为纯黑的颜色。可以在源头消除这些误差。 如何矫正黑电平: …...

web 自动化之 PO 设计模式详解
文章目录 一、什么是 POM二、如何基于 POM 进行自动化框架架构?1、base 层封装2、pageobjects 层封装3、TestCases 层封装 三、元素和方法分离&数据分离1、哪些部分可以进行分离2、示例代码 四、总结 一、什么是 POM POM page object model 页面对象模型 WEB 自…...

NVMe简介1
它分为两部分,这里是第一部分。 NVM Express(NVMe)是一种高性能、可扩展的接口协议,用于通过PCI express(PCIe)总线,实现主机软件与NVM设备之间的通信。目前,由于NVMe SSD相比于SATA…...

【python机器学习】Day 25 异常处理
知识点: 异常处理机制debug过程中的各类报错try-except机制try-except-else-finally机制 在即将进入深度学习专题学习前,我们最后差缺补漏,把一些常见且重要的知识点给他们补上,加深对代码和流程的理解。 借助ai写代码的时候&…...

数学建模初等模型应用
一、目的 掌握初等模型的建模方法,对简单的初等模型能借助Matlab工具软件进行辅助建模、求解和检验。 二、实验内容与设计思想(设计思路、主要代码分析) 1、预测鱼的质量 (1)设计思路:使用线性回归模型预测鱼的质量…...
占位符读取标准输入缓冲区规则
1、如果标准输入缓冲区中的前若干个字符都是空白字符,%s,%d,%f都能直接跳过并且从第一个非空白字符开始读取,但%c不能,而是直接读取。 2、%s遇到空白字符时停止,不会读取遇到的空白字符。 3、%d遇到非数字…...

【MCP教程系列】SpringBoot 搭建基于 Spring AI 的 SSE 模式 MCP 服务
原文地址:https://developer.aliyun.com/article/1662946 在当今快速发展的AI技术背景下,如何高效地集成模型能力成为开发者关注的重点。本文将手把手教你如何基于 Spring AI 搭建支持 SSE(Server-Sent Events)模式的 MCP 服务 相…...
【kafka】kafka概念,使用技巧go示例
1. Kafka基础概念 1.1 什么是Kafka? Kafka是一个分布式流处理平台,用于构建实时数据管道和流式应用。核心特点: 高吞吐量:每秒可处理百万级消息持久化存储:消息按Topic分区存储在磁盘分布式架构:支持水平…...

利用散点图探索宇航员特征与太空任务之间的关系
利用散点图探索宇航员特征与太空任务之间的关系 import matplotlib.pyplot as plt import numpy as np import pandas as pdfrom flexitext import flexitext from matplotlib.patches import FancyArrowPatchplt.rcParams.update({"font.family": "Corbel&quo…...
Ubuntu 命令行显示中文输出信息
Ctrl Alt T 打开终端命令行, 输入命令: sudo apt-get install language-pack-zh-hans安装中文语言支持包 sudo apt-get install language-pack-zh-hans-base配置环境变量 sudo vim /etc/profile进入文件后,按下 a 进入编辑模式,shift ↓ \downarr…...
Linux文件编程——read函数与lseek函数
一、read函数 在 Linux 文件编程中,read 函数是一个系统调用,用于从文件描述符(File Descriptor)指向的文件或设备中读取数据到缓冲区。它是 Unix/Linux 系统编程中实现底层 I/O 操作的核心函数之一。以下是 read 函数的详细使用…...
[思维模式-38]:看透事物的关系:什么是事物的关系?事物之间的关系的种类?什么是因果关系?如何通过数学的方式表达因果关系?
一、什么是事物的关系? 事物的关系是指不同事物之间存在的各种联系和相互作用,它反映了事物之间的相互依存、相互影响、相互制约等特性。以下从不同维度为你详细阐述: 1、关系的类型 因果关系 定义:一个事件(原因&a…...
【2025.5.12】视觉语言模型 (更好、更快、更强)
【2025.5.12】Vision Language Models (Better, Faster, Stronger): https://huggingface.co/blog/vlms-2025 【2024.4.11】Vision Language Models Explained【先了解视觉语言模型是什么】: https://huggingface.co/blog/vlms nanoVLM: https://github.…...
Spring的bean的生命周期?
Spring中bean的生命周期包括以下步骤: 通过BeanDefinition获取bean的定义信息。 调用构造函数实例化bean。 进行bean的依赖注入,例如通过setter方法或Autowired注解。 处理实现了Aware接口的bean。 执行BeanPostProcessor的前置处理器。 调用初始化…...

Qwen集成clickhouse实现RAG
一、RAG概要 RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合了信息检索技术与语言生成模型的人工智能技术。旨在通过检索相关文档来增强大模型的生成能力,从而提高预测的质量和准确性。RAG模型在生成文本或回答…...

Excel分组计算求和的两种实现方案
文章目录 背景样例数据方案一、函数求和实现步骤缺点 方案二、数据透视表实现步骤优点 背景 在Excel文档中,经常会进行数据的求和计算,可使用不同的方式实现,记录下来,方便备查。 样例数据 已有商品销量信息,包含销…...
深入理解卷积神经网络:从基础原理到实战应用
在人工智能领域,卷积神经网络(Convolutional Neural Network,简称 CNN)凭借其强大的图像识别、处理能力,成为深度学习中不可或缺的技术。无论是自动驾驶汽车识别道路标志,还是医学影像分析辅助疾病诊断&…...