好久没更新了,最近忙着打newstart和shctf(其实就是懒),有点小破防,几题pwn只有在本地打得通,远程就是不通,gadget换了几套还是不行,索性放弃,学点东西沉淀下😭
phar协议
用于将多个 PHP 文件、类、库、资源等打包成一个单独的文件。这个文件可以像其他 PHP 文件一样被包含或执行。也可以解析其他压缩包的内容
创建一个phar文件需要在php.ini下把phar.readonly改成off不然会报错,注意把注释符去掉

<?php
class flag {}
$o = new flag();
@unlink("phar.phar");
$phar = new Phar("phar.phar");
$phar->startBuffering();
$phar->setStub("<?php __HALT_COMPILER(); ?>");
$phar->setMetadata($o);
$phar->addFromString("2.php","123456");
$phar->stopBuffering();
?>
创建一个phar对象并进行初始化,phar结构如下
- stub :相当于文件格式,phar文件必须以
<?php xxx; __HALT_COMPILER();?>
,以__HALT_COMPILER();?>
来结尾才能被解析 - manifest:phar文件本质上是一种压缩文件,每个被压缩文件的权限、属性等信息都放在这部分,用户可以自定义序列化meta data放在manifest里面,当phar文件被解析时会自动反序列化,也是phar协议反序列化的核心
- content:自定义压缩的文件名称和内容
- signature:phar对象在最后会自动签名
生成的phar文件

测试
//include.php
<?php
class flag{
function __destruct(){
echo "flag被销毁";
}
}
$a=$_GET['a'];
include($a);
?>
当访问include.php?a=phar://phar.phar会触发__destruct

也可以用phar访问2.php,include.php?a=phar://phar.phar/2.php

在以下函数中会触发phar反序列化

phar的文件包含
phar不止可以解析phar,也可以解析zip,将后门压缩成zip后改后缀为png/jpg绕过后缀名的过滤

当访问


得到可利用后门
Comments NOTHING