=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 <?
>来结尾,否则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
漏洞原理 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'
php://filter/read=convert.base64-encode/resource=xxxx.php data://text/plain;base64,xxxxxxxxxxxx 今天所谈到的phar...也是流包装的一种 phar:// 原理 phar本质是一种压缩文件,其中每个被压缩文件的权限、属性等信息都放在这部分。...>来结尾,否则phar扩展将无法识别这个文件为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.../siam.phar php ./siam.phar -v php ./siam.phar -v -m php ....在服务器配置文件中定义 echo "DOCUMENT_ROOT -->" .
什么是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归档文件 $.../siam.phar php ./siam.phar -v php ./siam.phar -v -m php ....在服务器配置文件中定义 echo "DOCUMENT_ROOT -->" .
背景知识 phar文件结构 在php>=5.3的时候,默认开启支持Phar,文件状态为只读,而且使用phar文件不需要任何配置。php使用phar://伪协议来解析phar文件的内容。..."); $phar = new Phar("test.phar"); $phar->startBuffering(); $phar->setStub("<?...文件,所以对环境也无非有以下要求: 可以上传我们构造的phar文件 这要求服务器端可以上传,或者自动生成,既然phar的文件标识是 xxx<?...记录路径为 upload/122c4a55d1a70cef972cac3982dd49a6/b5e9b4f86ce43ca65bd79c894c4a924c.gif 在 rogue mysql 服务器上读取文件的位置使用.../upload/122c4a55d1a70cef972cac3982dd49a6/b5e9b4f86ce43ca65bd79c894c4a924c.gif 就可以在自己服务器监听的端口收到 flag
>来结尾,否则phar扩展将无法识别这个文件为phar文件。...[optional] a signature for verifying Phar integrity (phar file format only) 签名,放在文件末尾 利用条件 1.phar可以上传到服务器端...> $filename = 'phar://phar.phar/test.txt';定义了一个名为$filename的变量,并将其设置为phar://phar.phar/test.txt,即使用Phar...php class TestObject { } @unlink("phar.phar"); $phar = new Phar("phar.phar");...= new Phar("phar.phar"); //后缀名必须为phar $phar->startBuffering(); $phar->setStub("<?
再看一下 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。
了解Phar Phar含义 可以认为Phar是PHP的压缩文档,是PHP中类似于JAR的一种打包文件。...1、phar文件能够上传至服务器 //即要求存在file_get_contents()、fopen()这种函数 2、要有可利用的魔术方法 //这个的话用一位大师傅的话说就是利用魔术方法作为"跳板"...更改文件格式 我们利用Phar反序列化的第一步就是需要上传Phar文件到服务器,而如果服务端存在防护,比如这种 $_FILES["file"]["type"]=="image/gif" 要求文件格式只能为...绕过Phar关键字检测 Phar反序列化中,我们一般思路是上传Phar文件后,通过给参数赋值为Phar://xxx来实现反序列化,而一些防护可能会采取禁止参数开头为Phar等关键字的方式来防止Phar反序列化...= new Phar('quan9i.phar'); $phar->startBuffering(); $phar->addFromString('test.txt', 'test'); $phar-
修改配置文件: vim /usr/local/php/etc/php.ini [Phar] phar.readonly = Off 压缩: a....php $exts = array( '*', ); $dir = __DIR__; $file = 'test.phar'; $phar = new Phar(__DIR__ . '/'...$ext . '$/'); } $phar-> delete('build.php'); $phar-> setStub($phar-> createDefaultStub('index.php'));...is_dir($dir)){ @mkdir($dir); } $phar = new Phar(ROOT.'.../test.phar'); $phar-> extractTo($dir,null,true); echo "解压完成".PHP_EOL; b.
最近在开发一个安装程序的时候,打包为了 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
phpclass TestObject {}$phar = new Phar("phar.phar"); //后缀名必须为 phar$phar->startBuffering();$phar->setStub...> file phar.phar 如下 ? 这种方法可以用于上传检测! 利用 在别人复现的基础上实现了 RCE 条件 phar 文件要能够上传到服务器端。...的 php 文件,当然需要绕过 gif,所以需要加 GIF89a,然后我们访问这个 php 文件后,生成了 phar.phar,修改后缀为 gif,上传到服务器,然后利用 file_exists,使用...= new Phar('phar.phar');$phar -> stopBuffering();$phar -> setStub('GIF89a'...= new Phar('phar.phar');$phar -> stopBuffering();$phar -> setStub('GIF89a'
原理 在使用phar://协议读取文件时,文件会被解析成phar( http://php.net/manual/zh/intro.phar.php ) 解析过程中会触发php_var_unserialize...测试 漏洞利用条件 1.服务器上存在可控文件 2.服务器端引用了可以利用的魔术方法 3.文件操作函数的参数可控 测试代码 在本地搭建一个简单的环境来测试(php7.1+apache2) 本地测试代码 生成phar文件 首先要将本地php.ini中的phar.readonly选项设置为Off 然后构造一个生成phar文件的php脚本 <?...= new Phar("phar.phar"); $phar->startBuffering(); $phar->setStub("<?...触发漏洞 通过测试代码中的file_exists()来访问phar文件,利用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 类。
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'
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...利用条件 phar文件要能够上传到服务器端。 要有可用的魔术方法作为“跳板”。 文件操作函数的参数可控,且:、/、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
我们来建立一个项目,在服务器根目录中建立项目文件夹为project,目录内的结构如下: [plain] view plain copy file -yunek.js -yunke.css...'index.php'); 然后在浏览器中访问这个yunkeBuild.php文件,将产生一个yunke.phar文件,此时服务器根目录结构如下: [plain] view plain copy project...归档文件的使用: 我们在服务器根目录建立一个index.php文件来演示如何使用上面创建的phar文件,内容如下: [php] view plain copy <?...,为了演示,我们下载一个composer.phar放在服务器目录,在根目录建立一个get.php文件,内容如下: [php] view plain copy <?...补充: 1、在部署phar文件到生产服务器时需要调整服务器的配置,避免当访问时浏览器直接下载phar文件 2、可以为归档设置别名,别名保存在归档文件中永久保存,它可以用一个简短的名字引用归档,而不管归档文件在文件系统中存储在那里
领取专属 10元无门槛券
手把手带您无忧上云