首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏h0cksr的小屋

    Phar:的绕过

    =phar://phar.phar 大佬的总结: .tar phar =phar->convertToExecutable(Phar::TAR) phar://phar.phar.tar compress.zlib //phar://phar.phar.tar.gz compress.bzip2://phar://phar.phar.tar.gz .tar.bz2 phar =phar->convertToExecutable (Phar::TAR,Phar::BZ2) phar://phar.phar.tar.bz2 compress.zlib://phar://phar.phar.tar.bz2 compress.bzip2 ://phar://phar.phar.tar.bz2 .zip Phar::SHA256 phar =phar->convertToExecutable(Phar::ZIP,) phar://phar.phar.zip compress.zlib://phar://phar.phar.zip compress.bzip2://phar://phar.phar.zip <?

    65740编辑于 2023-05-17
  • 来自专栏字节脉搏实验室

    phar反序列化

    >来结尾,否则phar扩展将无法识别这个文件为phar文件。(识别phar文件主要根据__HALT_COMPILER();?>这部分) ? 将phar伪造成其他格式的文件(重点) ? 下面运行一个Demo,深入理解 class TestObject { } $phar = new Phar("phar.phar"); //后缀名必须为phar $phar 可以看到生成如图所示的phar文件,接下来我们从winhex中看一下 ? ? ? 方式即:phar://加phar文件 ? ? ? 同时题目还是一个文件上传,那么就可以联想到通过phar文件进行反序列化重构cmd变量的值,上传phar文件,最后通过show或者delete传参利用phar协议触发phar文件,使构造的序列化代码进行反序列化 ");//删除原有存在的 $phar = new Phar("phar.phar");//生成 $phar->startBuffering(); $phar->setStub

    1.2K30发布于 2020-06-16
  • 来自专栏ly0n

    Phar反序列化学习

    漏洞原理 ​ phar文件本质上是一种压缩文件,在使用phar协议文件包含时,也是可以直接读取zip文件的。 使用phar://协议读取文件时,文件会被解析成phar对象,phar对象内的以序列化形式存储的用户自定义元数据(metadata)信息会被反序列化。这就引出了我们攻击手法最核心的流程。 文件 前提:生成phar文件需要修改php.ini中的配置,将phar.readonly设置为Off <? php class Boy{ var $name; } @unlink("ly0n.phar"); $phar = new Phar("ly0n.phar"); $phar->startBuffering = new Phar('phar.phar'); $phar -> startBuffering(); $phar -> setStub('GIF89a'

    98100发布于 2020-11-04
  • 来自专栏wywwzjj 的技术博客

    phar 与反序列化学习

    再看一下 phar 的文件结构。 php Phar::mapPhar(); include 'phar://myphar.phar/index.php'; __HALT_COMPILER(); 可以当做一个标志来理解,正如上面写的这样 ; } } ini_set('phar.readonly',"Off"); @unlink("test.phar"); $p = new Phar("test.phar > 可以看到 meta-data 在 phar 中的存在形式 // dese_phar.php <? ://phar.phar 原理分析 来看一下源码 php-src/ext/phar/phar.c:618,调用了 php_var_unserialize。

    41420编辑于 2023-05-09
  • 来自专栏网络攻防实战知识交流

    phar相关安全知识总结

    背景知识 phar文件结构 在php>=5.3的时候,默认开启支持Phar,文件状态为只读,而且使用phar文件不需要任何配置。php使用phar://伪协议来解析phar文件的内容。 contents 压缩文件的内容 signature 文件的签名内容 phar使用方式 如下是一个使用phar的一个例子: <? "); $phar = new Phar("test.phar"); $phar->startBuffering(); $phar->setStub("<? = new Phar("phar.phar");不能识别此Latex公式:phar->startBuffering();phar->addFromString("test.txt","test");不能识别此 $post_string,"uri" => "aaab")); $phar = new Phar("1.phar"); //后缀名必须为phar $phar->startBuffering(

    66040发布于 2019-09-17
  • 来自专栏仙士可博客

    PHP:Phar的打包和使用

    什么是Phar? Phar是PHP里类似于 Jar 的一种打包文件,可以将整个应用打包,便于部署等。 中取消设置 phar.extract_list 从phar 2.0.0开始,此INI设置已被删除,加载路径映射 phar.cache_list 允许在Web服务器启动时预先解析映射phar存档,从而提供性能改进 php //产生一个siam.phar文件 $phar = new Phar('siam.phar', 0, 'siam.phar'); // 添加src里面的所有文件到siam.phar归档文件 $phar php /**  * 测试siam.phar  */ # 测试入口文件 require 'phar://siam.phar'; echo "
    "; # 测试类文件 require 'phar:// /siam.phar  php ./siam.phar -v php ./siam.phar -v -m  php .

    3.6K21发布于 2019-12-18
  • 来自专栏宣言(Siam)博客

    PHP:Phar的打包和使用

    什么是Phar? Phar是PHP里类似于Jar的一种打包文件,可以将整个应用打包,便于部署等。 中取消设置 phar.extract_list 从phar 2.0.0开始,此INI设置已被删除,加载路径映射 phar.cache_list 允许在Web服务器启动时预先解析映射phar存档,从而提供性能改进 php //产生一个siam.phar文件 $phar = new Phar('siam.phar', 0, 'siam.phar'); // 添加src里面的所有文件到siam.phar归档文件 $ php /** * 测试siam.phar */ # 测试入口文件 require 'phar://siam.phar'; echo "
    "; # 测试类文件 require 'phar /siam.phar php ./siam.phar -v php ./siam.phar -v -m php .

    2.5K10发布于 2019-12-18
  • 来自专栏ly0n

    Unknown PHP deserialization vulnerability--phar

    php://filter/read=convert.base64-encode/resource=xxxx.php data://text/plain;base64,xxxxxxxxxxxx 今天所谈到的phar 也是流包装的一种 phar:// 原理 ​ phar本质是一种压缩文件,其中每个被压缩文件的权限、属性等信息都放在这部分。 >来结尾,否则phar扩展将无法识别这个文件为phar文件。

    39810发布于 2020-11-04
  • 来自专栏quan9i的安全笔记

    PHP Phar反序列化浅析

    了解Phar Phar含义 可以认为Phar是PHP的压缩文档,是PHP中类似于JAR的一种打包文件。 3、文件操作函数的参数可控,且:、/、phar等特殊字符没有被过滤 //一般利用姿势是上传Phar文件后通过伪协议Phar来实现反序列化,伪协议Phar格式是`Phar://`这种,如果这几个特殊字符被过滤就无法实现反序列化 绕过Phar关键字检测 Phar反序列化中,我们一般思路是上传Phar文件后,通过给参数赋值为Phar://xxx来实现反序列化,而一些防护可能会采取禁止参数开头为Phar等关键字的方式来防止Phar反序列化 = new Phar('quan9i.phar'); $phar->startBuffering(); $phar->addFromString('test.txt', 'test'); $phar- = new Phar('quan9i.phar'); $phar->startBuffering(); $phar->setStub('GIF89a'

    1.6K80编辑于 2023-05-18
  • 来自专栏安恒网络空间安全讲武堂

    phar反序列化rce

    原理 在使用phar://协议读取文件时,文件会被解析成phar( http://php.net/manual/zh/intro.phar.php ) 解析过程中会触发php_var_unserialize > 生成phar文件 首先要将本地php.ini中的phar.readonly选项设置为Off 然后构造一个生成phar文件的php脚本 <? = new Phar("phar.phar"); $phar->startBuffering(); $phar->setStub("<? 触发漏洞 通过测试代码中的file_exists()来访问phar文件,利用phar://协议解析文件。 ? phar反序列化 发现一个check很可疑,查看源码 ? 很明显的一个file_exists函数,这不就是可以出发phar反序列化的函数吗?

    1.7K30发布于 2018-12-27
  • 来自专栏沈唁志

    怎么使用默认的 PHP 执行 phar 包?

    最近在开发一个安装程序的时候,打包为了 phar 包,遇到了一个问题就是打包后的 phar 包不能省略 php 去执行。 # 正常运行 php install.phar # 报错 . /install.phar 省略 php 去运行时报错: $ ./install.phar ./install.phar: line 1: ? /install.phar: line 5: `if (in_array('phar', stream_get_wrappers()) && class_exists('Phar', 0)) {' 到这里就不知道具体原因了 <<<'EOF' require 'phar://install.phar/bin/install'; __HALT_COMPILER(); EOF; } $phar = new Phar($pharFile , 0, 'install.phar'); $phar->startBuffering(); $phar->buildFromDirectory($dirname); $phar->delete('bin

    1.5K40发布于 2021-11-02
  • 来自专栏FreeBuf

    PHAR反序列化拓展操作总结

    phpclass TestObject {}$phar = new Phar("phar.phar"); //后缀名必须为 phar$phar->startBuffering();$phar->setStub ://phar.phar');? php class TestObject { } $phar = new Phar('phar.phar'); $phar -> startBuffering(); $phar = new Phar('phar.phar');$phar -> stopBuffering();$phar -> setStub('GIF89a' = new Phar('phar.phar');$phar -> stopBuffering();$phar -> setStub('GIF89a'

    1.2K10发布于 2019-06-28
  • 来自专栏宸机笔记

    反序列化之Phar

    Phar就是php的压缩文档 利用phar伪协议会将用户自定义的meta-data序列化的形式存储这一特性,扩展php反序列化的攻击面。 一般来说,文件操作都是可以触发phar反序列化的。 php class TestObject { } $phar = new Phar("phar.phar"); //生成的phar文件,调用后缀名必须为phar $phar->startBuffering 可以看到$o的数据已经被序列化存储到phar.phar中了 然后使用phar流对 phar包进行反序列化 <? ://phar.phar'); ? = new Phar('phar.phar'); $phar -> startBuffering(); $phar -> setStub('GIF89a'

    1.6K20发布于 2020-11-04
  • 来自专栏pankas的技术分享

    phar反序列化学习笔记

    >来结尾,否则phar扩展将无法识别这个文件为phar文件。 2. phar文件,php内置了一个Phar类来处理相关操作。 php class TestObject { } @unlink("phar.phar"); $phar = new Phar("phar.phar"); //后缀名必须为 phar $phar->startBuffering(); $phar->setStub("<? php class TestObject { } @unlink("phar.phar"); $phar = new Phar("phar.phar"); $phar

    63110编辑于 2022-08-10
  • 来自专栏硬核项目经理的专栏

    简单了解Phar代码打包工具的使用

    简单了解Phar代码打包工具的使用 Phar 是在 PHP5 之后提供的一种类似于将代码打包的工具。 但是我们可以对打包的 Phar 包进行压缩操作。 另外,实际上使用过 Phar 包的人非常少,特别是在 Composer 已经成为事实代码库标准的今天,Phar 就更加难觅踪影了。 /my.phar.gz'); $p = new Phar('. /my.phar', 0 ,'my.phar'); $p->compressFiles(Phar::GZ); unset($p); $decompressPhar = new Phar('. 数据格式 Phar 最后,如果只是为了打包压缩功能的话,我们没必要使用 Phar 类。

    1K30发布于 2020-11-02
  • 来自专栏ChaMd5安全团队

    blackhat议题深入 | phar反序列化

    漏洞原理 漏洞触发点在使用phar://协议读取文件的时候,文件内容会被解析成phar对象,然后phar对象内的Metadata信息会被反序列化。 从PHP官方手册中我们可以看到Meta-data是用serialize()生成并保存在phar文件中的: ? 接下来的漏洞利用思路就很明显了:构造一串恶意的serialize数据(能够触发哈希表拒绝服务攻击),然后将其保存到phar文件的metadata数据区,当文件操作函数通过phar://协议对其进行操作的时候就会触发拒绝服务攻击漏洞 我们可以通过如下代码生成一个恶意的phar文件: <? php set_time_limit(0); $startTime = microtime(true); file_exists("phar://avatar.phar"); $endTime = microtime

    1.6K30发布于 2018-09-29
  • 来自专栏landv

    php归档格式:phar文件详解(创建、使用、解包还原提取)

    $phar = new Phar('lib/yunke.phar', 0);   $phar->setAlias ( "yun.phar");  https://blog.csdn.net/u011474028 关于phar的官网文档请见http://php.net/manual/en/book.phar.php,本文档可以看做和官网文档互为补充 phar归档文件有三种格式:tar归档、zip归档、phar归档    yunkeBuild.php   yunke.phar   这就是产生一个phar归档文件最简单的过程了,更多内容请看官网,这里需要注意的是如果项目不具备单一执行入口则不宜使用phar归档文件 phar ,设置别名: [php] view plain copy $phar = new Phar('lib/yunke.phar', 0);   $phar->setAlias ( "yun.phar");   php   require "lib/yunke.phar";   require "phar://yun.phar/Lib.php";  //使用别名访问归档文件   require "phar://

    2.4K40发布于 2018-05-24
  • 来自专栏landv

    php归档格式:phar文件详解(创建、使用、解包还原提取)

    $phar = new Phar('lib/yunke.phar', 0);   $phar->setAlias ( "yun.phar");  https://blog.csdn.net/u011474028 关于phar的官网文档请见http://php.net/manual/en/book.phar.php,本文档可以看做和官网文档互为补充 phar归档文件有三种格式:tar归档、zip归档、phar归档    yunkeBuild.php   yunke.phar   这就是产生一个phar归档文件最简单的过程了,更多内容请看官网,这里需要注意的是如果项目不具备单一执行入口则不宜使用phar归档文件 phar ,设置别名: [php] view plain copy $phar = new Phar('lib/yunke.phar', 0);   $phar->setAlias ( "yun.phar");   php   require "lib/yunke.phar";   require "phar://yun.phar/Lib.php";  //使用别名访问归档文件   require "phar://

    1.6K60发布于 2018-06-22
  • 来自专栏陶士涵的菜地

    解决PHP Warning: putenv() has been disabled for security reasons in phar:

    composer的时候报一下错误,这是因为php禁用了putenv() 函数 PHP Warning: putenv() has been disabled for security reasons in phar xdebug-handler/src/Process.php on line 97 Warning: putenv() has been disabled for security reasons in phar xdebug-handler/src/Process.php on line 97 PHP Warning: putenv() has been disabled for security reasons in phar src/Composer/Util/Platform.php on line 78 Warning: putenv() has been disabled for security reasons in phar

    2.4K10编辑于 2023-07-21
  • 来自专栏开源技术小栈

    Phar:PHP应用程序代码打包工具解决方案

    与不能在不同数据库之间转换的 PDO 不同,phar 还可以使用一行代码在 tar、zip 和 phar 文件格式之间进行转换。 配置 PHAR文件缺省状态是只读的,使用Phar文件不需要任何的配置。 因为我们现在需要创建一个自己的Phar文件,所以需要允许写入Phar文件,这需要修改一下 php.ini 打开 php.ini,找到 phar.readonly 指令行,修改成: phar.readonly php $phar = new Phar($buildRoot . 第一个参数是Phar文件的路径。你不仅可以通过它创建Phar文件,还可以对现存的Phar文件进行操作。 第二个参数是设定Phar对象如何处理文件。 Stub文件 运行Phar文件时,stub文件被当做一个meta文件来初始化Phar, 并告诉Phar文件在被调用时该做什么。

    91310编辑于 2024-04-15
领券