快捷搜索: 王者荣耀 脱发

PHP反序列化漏洞之Phar

1、认识phar类型文件

这种文件可以通过phar协议来读取(使用phar://后面接文件路径即可读取)

先给大家看一下phar文件的大致样子:

它一般包括头部信息:<?php __HALT_COMPILER(); ?>

中间包括manifest(phar文件的属性等信息):以序列化的方式存储

当读取phar文件时,会自动反序列化manifest中的字符串

2、制作phar文件

注意:制作phar文件的php环境需要>5.0,并且设置php.ini中:phar.readonly=Off,否则会报readonly的错误,php.ini在你安装PHPstudy的路径下。

这里还可能遇到一个问题,就是你装的VS扩展有东西可能没配置好

会出现就算你改成了off也可能无法生成phar文件

可以尝试下面修改:

phar前面不能有 “ ; ” 有的话要删掉

使用下面模板

我们来看一道例题

简单审计一下代码还是很简单的,只需要触发__destruct()函数即可

__destruct() 是析构函数,在对象的所有引用被删除或者当对象被显式销毁时执行的魔术方法

比如new一个对象,当创建完成之后就不引用了,如果有赋值指向就会立马丢弃,触发destruct, unserialize()反序列化一个对象,完成之后也会丢弃这个对象。

因此,这里我们只需要new一下就可以触发__destruct()函数

构造pop链:

$t = new TestObject();

$t就是链头,将pop链和链头都添加进我们的脚本模块

再将题目中的类TestObject添加到我们的模块,如下:

因此,在做这类题的时候,我们套用模板只需要修改这三个地方

运行之后我们得到了一个phar文件

至此,我们已经掌握了phar文件的制作方法

3、phar的上传与读取

题目给了upload.php路径,我们直接访问

直接上传phar文件发现没有上传成功

经过尝试后发现这里是需要传jpg类型

我们直接修改phar文件的后缀,修改成符合要求的后缀

(顺便说一下,这个后缀对我们的phar文件没有任何影响,根据题目来就行,要求传zip、png、jpg还是其他类型,修改成对应的后缀就行)

上传成功,且得到了文件所在路径

这个时候我们再去读取这个phar文件

题目要求使用post方式给file传值

即可拿到我们想要的东西

ctfstu{5c202c62-7567-4fa0-a370-134fe9d16ce7}

4、漏洞利用的条件

(1)能上传文件到服务器 ,无论是什么类型的文件,只要能上传文件就行 (2)具备可利用的反序列链 (3)能具有读取文件操作的函数并且函数中的参数可控 比如file_get_contens($filename),$filename可控。

重点和难点还是pop链的构造

经验分享 程序员 微信小程序 职场和发展