文件上传-.user.ini的妙用

2023-11-03

        小伙伴们大家好!本期为大家带来的是.user.ini在文件上传漏洞中的妙用。

目录

.user.ini

.user.ini的妙用原理

利用.user.ini的环境

实战演示

​1、先尝试直接上传webshell

2、看是否能够上传除php和png外的文件

3、上传.user.ini文件

4、再次尝试上传webshell

5、测试上传的.user.ini与webshell是否能够正常生效

6、使用连接工具连接webshell


.user.ini

自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 风格的 INI 文件。此类文件仅被 CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用 .htaccess 文件有同样效果。

.user.ini的妙用原理

.user.ini中两个中的配置就是auto_prepend_fileauto_append_file。这两个配置的意思就是:我们指定一个文件(如1.jpg),那么该文件就会被包含在要执行的php文件中(如index.php),相当于在index.php中插入一句:require(./1.jpg)。这两个设置的区别只是在于auto_prepend_file是在文件前插入,auto_append_file在文件最后插入

利用.user.ini的前提是服务器开启了CGI或者FastCGI,并且上传文件的存储路径下有index.php可执行文件。

利用.user.ini的环境

有时候我们进行文件上传的时候,站点不仅在前端做了白名单处理,还在后端做了黑名单处理以及文件类型的检验且服务器没有配置"AddType application/x-httpd-php .php .phtml",这时我们就不能通过简单的绕过前端验证修改数据包的Content-Type并将文件后缀改为phtml以此来利用文件上传漏洞。

这时我们就需要利用.user.ini进行配合,使得我们上传的图片格式的webshell也能够被解析,以此成功利用漏洞拿到shell权限。

实战演示

我这里是自己写了两段代码,使用phpstudy搭建的一个nginx+mysql的环境,然后也开启了fastCGI。

源码:

5.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>.user.ini的妙用</title>
</head>
<body>
<script type="text/javascript">
    function selectFile(file) {
        var filename = file.value;
        var mime = filename.toLowerCase().substr(filename.lastIndexOf("."));
        if (mime != ".png") {
            alert("请选择png格式的照片上传");
            file.outerHTML = file.outerHTML
        }
    }
</script>
<center>
    <form action="file05.php" method="post" enctype="multipart/form-data">
        <label for="file">请上传png格式图片:</label>
        <input type="file" name="file" id="file" onchange="selectFile(this)"/><br/>
        <input type="submit" name="submit" value="上传" />
    </form>
</center>
</body>
</html>

file05.php

<?php
header('Content-type:text/html;charset=utf-8');
if ($_FILES["file"]["error"] > 0) {
    echo "Return Code:" . $_FILES["file"]["error"] . "<br/>";
} else {
    $info = pathinfo($_FILES['file']['name']);
    $ext = $info['extension'];
    if ($_FILES['file']['type'] != "image/png" || !getimagesize($_FILES['file']['tmp_name']) || strtolower($ext) == "php") {
        echo "<center><br/>";
        exit("请上传png格式的文件");
        echo "</center>";
    }
    echo "<center><br/>";
    echo "upload: " . $_FILES["file"]["name"] . "<br/>";
    echo "type: " . $_FILES["file"]["type"] . "<br/>";
    echo "size: " . ($_FILES["file"]["size"] / 1024) . "KB<br/>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br/>";
    if (file_exists("upload/" . $_FILES["file"]["name"])) {
        echo $_FILES["file"]["name"] . " already exists. ";
    } else {
        move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
        echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
    }
    echo "</center>";
}

1、先尝试直接上传webshell

首先我们还是先上传一个带有一句话木马的webshell。

发现有前端验证,直接鼠标右键点击检查或者按F12,删除掉前端验证的代码即可。

然后直接用burpsuite抓包修改数据包中的数据,将Content-Type的值修改为image/png,再在文件内容的开头输入GIF89a来绕过getimagesize()函数。

点击forward发送,返回浏览器查看浏览器响应。

上传失败,提示我们上传png格式的文件,我们修改了Content-Type,也添加了文件头,上传还是失败,说明后端做了对文件名后缀的处理。

2、看是否能够上传除php和png外的文件

下面我们尝试一下看是否能够上传除了php和png以外的后缀名文件。

发现上传成功。

这样的话就代表我们也可以上传.user.ini文件。

3、上传.user.ini文件

我们直接将数据包修改为名为.user.ini类型为image/png内容为“GIF89a  auto_prepend_file=2.png”

点击forward发送数据包。

4、再次尝试上传webshell

这次要注意我们上传的webshell跟第一次的就有点小区别了,这次我们上传的文件名不能说php后缀的了,得是png后缀的,且文件名要与我们之前上传的.user.ini里auto_prepend_file对应的值一致,即也要是2.png。

点击forward发送。

 2.png的webshell也成功上传。

5、测试上传的.user.ini与webshell是否能够正常生效

从页面的响应,我们可以了解到,我们上传的文件都存放在upload文件夹下。我们直接访问upload文件夹,注意是访问文件夹不是文件。

因为我们的webshell是POST传参,这里我是用hackbar来使用POST传参。

注意这里能够成功的前提是upload文件夹中还有一个index.php文件,这样我们指定2.png才能以require(./2.png) 被可执行文件包含进去,从而触发我们的后门代码。

这样,我们上传的webshell就成功了。

6、使用连接工具连接webshell

为了方便,我们这里还是使用连接工具对我们上传的webshell进行连接。

我这里使用的是中国蚁剑,小伙伴们使用其他的冰蝎菜刀效果都是一样的。

测试连接成功添加数据即可

这样我们就顺利拿下了站点。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件上传-.user.ini的妙用 的相关文章

  • 软件开发和网络安全哪个更好找工作?

    为什么今年应届毕业生找工作这么难 有时间去看看张雪峰今年为什么这么火就明白了 这么多年人才供给和需求错配的问题 在经济下行的今年 集中爆发 供给端 大学生越来越多 需求端 低端工作大家不愿去 高端岗位又太少 很多基础行业 比如机械 土木 所
  • The Planets:Venus

    靶场下载 The Planets Venus VulnHub 信息收集 arp scan l Interface eth0 type EN10MB MAC 00 0c 29 43 7c b1 IPv4 192 168 1 60 Starti
  • 【网络安全】Web缓存欺骗攻击原理及攻防实战

    Web缓存欺骗是一种新的攻击方式 危害范围可扩大至各种技术及框架 本文仅分享Web缓存攻击知识 不承担任何由于传播 利用本文所发布内容而造成的任何后果及法律责任 文章目录 前言 攻击前提及原理 实例一 ChatGPT帐户接管漏洞 实例二 P
  • 【CTF必看】从零开始的CTF学习路线(超详细),让你从小白进阶成大神!

    最近很多朋友在后台私信我 问应该怎么入门CTF 个人认为入门CTF之前大家应该先了解到底 什么是CTF 而你 学CTF的目的又到底是什么 其次便是最好具备相应的编程能力 若是完全不具备这些能力极有可能直接被劝退 毕竟比赛的时候动不动写个脚本
  • SRC漏洞挖掘经验+技巧篇

    一 漏洞挖掘的前期 信息收集 虽然是前期 但是却是我认为最重要的一部分 很多人挖洞的时候说不知道如何入手 其实挖洞就是信息收集 常规owasp top 10 逻辑漏洞 重要的可能就是思路猥琐一点 这些漏洞的测试方法本身不是特别复杂 一般混迹
  • WEB前端常见受攻击方式及解决办法总结

    一个网址建立后 如果不注意安全问题 就很容易被人攻击 下面讨论一下集中漏洞情况和放置攻击的方法 一 SQL注入 所谓的SQL注入 就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命
  • 用户数据中的幸存者偏差

    幸存者偏差 Survivorship bias 是一种常见的逻辑谬误 意思是没有考虑到筛选的过程 忽略了被筛选掉的关键信息 只看到经过筛选后而产生的结果 先讲个故事 二战时 无奈德国空防强大 盟军战机损毁严重 于是军方便找来科学家统计飞机受
  • 白帽子如何快速挖到人生的第一个漏洞 | 购物站点挖掘商城漏洞

    本文针对人群 很多朋友们接触安全都是通过书籍 网上流传的PDF 亦或是通过论坛里的文章 但可能经过了这样一段时间的学习 了解了一些常见漏洞的原理之后 对于漏洞挖掘还不是很清楚 甚至不明白如何下手 可能你通过 sql labs 初步掌握了sq
  • Android SDK开发艺术探索(五)安全与校验

    一 前言 本篇是Android SDK开发艺术探索系列的第五篇文章 介绍了一些SDK开发中安全方面的知识 包括资源完整性 存储安全 权限校验 传输安全 代码混淆等知识 通过基础的安全配置为SDK保驾护航 探索SDK开发在安全方面的最佳实践
  • 200道网络安全常见面试题合集(附答案解析+配套资料)

    有不少小伙伴面临跳槽或者找工作 本文总结了常见的安全岗位面试题 方便各位复习 祝各位事业顺利 财运亨通 在网络安全的道路上越走越远 所有的资料都整理成了PDF 面试题和答案将会持续更新 因为无论如何也不可能覆盖所有的面试题 php爆绝对路径
  • 【网安神器篇】——WPScan漏洞扫描工具

    目录 一 Wordpress简介 二 WPScan介绍 三 安装 四 获取token 1 注册账号 2 拿到token 五 使用教程 1 常用选项 2 组合命令 1 模糊扫描 2 指定扫描用户 3 插件漏洞扫描 4 主题漏洞扫描 5 Tim
  • 网络安全基础知识面试题库

    1 基于路由器的攻击手段 1 1 源IP地址欺骗式攻击 入侵者从外部传输一个伪装成来自内部主机的数据包 数据包的IP是 内网的合法IP 对策 丢弃所有来自路由器外端口 却使用内部源地址的数据包 1 2 源路由攻击 入侵者让数据包循着一个不可
  • 网络安全:绕过 MSF 的一次渗透测试

    这次渗透的主站是 一个 Discuz 3 4 的搭建 违法招 piao 网站 配置有宝塔 WAF 用 Discuz ML 3 X 的漏洞进行攻击 但是没有成功 发现主站外链会有一个发卡网 引导人们来这充值 是 某某发卡网 而且域名指向也是主
  • 你的服务器还安全吗?用户数据是否面临泄露风险?

    一系列严重的网络安全事件引起了广泛关注 多家知名公司的服务器遭到黑客挟持 用户的个人数据和敏感信息面临泄露的风险 这些事件揭示了网络安全的脆弱性和黑客攻击的威胁性 提醒着企业和个人加强对网络安全的重视 一 入侵案例 1 1 蔚来数据泄露 1
  • 静态综合实验

    1 IP地址划分 192 168 1 0 27 用于主干拆分 192 168 1 32 27 用于用户拆分 192 168 1 64 27 用于用户拆分 192 168 1 96 27 用于用户拆分 192 168 1 128 27 用于用
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • 【安全】Java幂等性校验解决重复点击(6种实现方式)

    目录 一 简介 1 1 什么是幂等 1 2 为什么需要幂等性 1 3 接口超时 应该如何处理 1 4 幂等性对系统的影响 二 Restful API 接口的幂等性 三 实现方式 3 1 数据库层面 主键 唯一索引冲突 3 2 数据库层面 乐
  • 【安全】使用docker安装Nessus

    目录 一 准备docker环境服务器 略 二 安装 2 1 搜索镜像 2 2 拉取镜像 2 3 启动镜像 三 离线更新插件 3 1 获取challenge 3 2 官方注册获取激活码 3 3 使用challenge码和激活码获取插件下载地址
  • 【安全-SSH】SSH安全设置

    今天发现自己的公有云服务器被攻击了 在这里插入图片描述 https img blog csdnimg cn direct cafdca04646f4b8b838400ec79ac282f png 然后查看了登录日志 如上图 ls sh va
  • 【安全】网络安全态势感知

    文章目录 一 态势感知简介 1 概念 2 形象举例 3 应具备的能力 二 为什么要态势感知 为什么网络安全态势感知很重要 三 态势感知系统的功能 四 如何评估态势感知的建设结果 五 什么是态势感知的三个层级 四 业界的态势感知产品 1 安全

随机推荐

  • Java 输出数组中指定元素的下标

    输出数组指定元素的下标 public static void main String args 定义一个数组 int array new int 123 456 789 321 654 987 int index printArray ar
  • Chisel入门(三)------Chisel的基本语法2

    概述 继续介绍Chisel的基本语法 3 组件 3 1 Chisel中的组件是模块 Chisel中的每个模块都拓展了class 并包含了接口的io字段 接口是由封装为IO 的Bundle所定义的 Bundle包含的字段表示模块的输入输出端口
  • 用Python3实现文本转语音

    本文首次在公众号 零妖阁 上发表 为了方便阅读和分享 我们将在其他平台进行自动同步 由于不同平台的排版格式可能存在差异 为了避免影响阅读体验 建议如有排版问题 可前往公众号查看原文 感谢您的阅读和支持 利用文本朗读库pyttsx3实现文字转
  • Linux环境rpm yum与dnf详解

    目录 一 rpm工具 1 1 简介 1 2 参数介绍 1 3 常用情景命令 二 yum工具 2 1简介 2 2 常用命令 三 dnf工具 3 1简介 3 2常用命令 本篇文章主要从使用的角度来介绍Linux下rpm yum与dnf三种工具
  • 搭建docker+sonarqube并使用scanner、maven分析项目

    一 搭建docker sonarqube 步骤1 进入服务器 创建一个文件夹sonarqube ssh root ip mkdir sonarqube cd sonarqube 可以选用临时或者正式部署方案 临时部署方案 通用部署 dock
  • 厂房效果图制作

    关于厂房 工厂园区规划 及钢结构类项目效果图制作过程中所经常遇到的一些问题 在这里予以汇总整理 并对场景搭建的流程给予简述 三维场景创建 首先需要把CAD平面规划图纸 或是PDF电子版文档 或是手绘稿等弄清楚 场地占地多少亩 有多少厂房 办
  • 1.1 初识基准测试(Benchmark)

    基准测试 Benchmark 是Go语言中用于衡量代码性能的重要工具 通过编写基准测试函数 并使用testing B提供的方法来记录执行时间和其他指标 我们可以准确地评估代码的性能表现 在开发过程中 合理使用基准测试可以帮助我们优化代码 提
  • 面试系列之基础篇

    强引用 软引用 弱引用 虚引用 一般面试官会这样问 你知道Java中对象的引用类型有哪几种吗 分别讲讲这几种之间的区别 强引用 只要强引用还存在 垃圾收集器永远不会回收被引用的对象 软引用 描述一些还有用但是并非必需的对象 将要发生内存溢出
  • 深度学习与人脸识别系列(3)__基于VGGNet的人脸识别系统

    作者 wjmishuai 出处 http blog csdn net wjmishuai article details 50854155 声明 版权所有 转载请联系作者并注明出处 1 引言 本文中介绍的人脸识别系统是基于这两篇论文 Ver
  • java高qps接口设计_高并发后端设计-限流篇

    系统在设计之初就会有一个预估容量 长时间超过系统能承受的TPS QPS阈值 系统可能会被压垮 最终导致整个服务不够用 为了避免这种情况 我们就需要对接口请求进行限流 限流的目的是通过对并发访问请求进行限速或者一个时间窗口内的的请求数量进行限
  • leetcode刷题:最大子序积

    1 题目 题解 实现上面的过程 class Solution public int maxProduct vector
  • 删除gitlab上的分支

    好久没有更新了 今天记录一下删除gitlab上的分支的操作 登录仓库后 依次点击 project gt home gt Readme gt repository gt branches 会看到所有master和所有分支 点击右侧删除即可 看
  • 剑指Offer(一):二维数组中查找最大值

    题目 这个题目说的是 给你一个二维数组 matrix 和一个目标值 target 你要在数组里找到这个目标值 然后返回它的行 列下标 如果找不到 则返回 1 1 这个数组的每一行都是从左向右递增 每一列都是从上到下递增 和 二维数组的二分搜
  • 首届《产业数字化金铲奖》榜单来袭

    出品 产业家 2021年 产业数字化是绝对的主题 在这个变幻莫测的一年里 越来越多的企业开始寻求数字化转型方向 它们在工业 农业 医疗 教育等等方向都在努力作出自己的数字化尝试 个体寻找数字进化之路 企业构建新的技术底层 产业定义互联网下半
  • 相机的坐标系转换(1)

    前言 常言道 工欲善其事 必先利其器 如欲明其理 必先定其义 后一句是我编的 不过 这句话还是有道理的 如果要想明白相机的坐标系之间的转换 那么必须明白相机有哪几个坐标系 并对它们下一个明确的定义 只有这样 我们接下来的工作才好开展 正文
  • Rose(双机热备)服务配置

    安装步骤省略 下面只讲配置 1 一般会设置两个job iis 及 sql 此次选择的是SqlServer 版本没有要求 大概流程是 两台服务器 都有不同的ip 内网或者外网 然后虚拟一个ip出来 比如 服务器A 192 168 100 1
  • Leetcode每日一题:面试题02.02.kth-node-from-end-of-list-lcci(返回倒数第k个节点)

    思路 典型得快慢指针问题 快指针与慢指针中间隔着k 2个节点 那么同时 快慢指针 当快指针指向链表结尾节点时 慢指针指向倒数第k个节点 struct ListNode int val ListNode next ListNode int x
  • Java:基于注解对类实例字段进行通用校验

    前言 后台服务处理前端的请求时 会有这样的一种需求 即校验请求中的参数是否符合校验规则 校验参数是否符合的一种方法是 罗列请求参数 基于校验规则一个一个的校验参数 如果存在不符合的 就返回字段值不符合规则的提示 通过就向下执行 这种方法是可
  • CSS线性渐变linear-gradient

    线性渐变是多种颜色沿着一条直线即渐变线过渡 发生渐变依靠渐变线和色标 其中渐变线来控制发生渐变的方向 色标包括颜色值和位置来控制渐变的色彩变化 创建一个线性渐变 需要指定两种颜色 还可以实现不同方向 指定为一个角度 的渐变效果 如果不指定方
  • 文件上传-.user.ini的妙用

    小伙伴们大家好 本期为大家带来的是 user ini在文件上传漏洞中的妙用 目录 user ini user ini的妙用原理 利用 user ini的环境 实战演示 1 先尝试直接上传webshell 2 看是否能够上传除php和png外