利用phar实行php反序列化命令执行漏洞复现

zy-king-karl 2019-09-03 原文

利用phar实行php反序列化命令执行漏洞复现

利用phar实行php反序列化命令执行(测试环境复现)

前言

一般说到反序列化漏洞,第一反应都是unserialize()函数。然而安全研究员Sam Thomas分享了议题”It’s a PHP unserialization vulnerability Jim, but not as we know it”,利用phar伪协议会将用户自定义的meta-data序列化的形式存储这一特性,扩展php反序列化的攻击面。

phar介绍

简单来说phar就是php压缩文档。它可以把多个文件归档到同一个文件中,而且不经过解压就能被 php 访问并执行,与file:// php://等类似,也是一种流包装器。

phar结构由 4 部分组成

stub phar 文件标识,格式为xxx<?php xxx; __HALT_COMPILER();?>;

manifest 压缩文件的属性等信息,以序列化存储;

contents 压缩文件的内容;

signature 签名,放在文件末尾;

这里有两个关键点,一是文件标识,必须以__HALT_COMPILER();?>结尾,但前面的内容没有限制,也就是说我们可以轻易伪造一个图片文件或者pdf文件来绕过一些上传限制;二是反序列化,phar存储的meta-data信息以序列化方式存储,当文件操作函数通过phar://伪协议解析phar文件时就会将数据反序列化,而这样的文件操作函数有很多。

以上内容摘自:由 PHPGGC 理解 PHP 反序列化漏洞 。

https://kylingit.com/blog/%E7%94%B1phpggc%E7%90%86%E8%A7%A3php%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9E/

复现过程

Phar文件生成

根据文件结构我们来自己构建一个phar文件,php内置了一个Phar类。

phar_gen.php

 

 

 

 

Evil.class.php

 

 

 

 

直接运行的时候会报错

 

 

 

 

 

 

原因是:需要将php.ini中的phar.readonly设置成off。(我在这浪费了很多时间,配置文件一定要改完后保存,然后重启服务器)

 

 

 

 

 

执行之后生成一个vul.phar,用二进制编辑器打开,如图所示

 

 

 

由图可以发现,meta-data已经以序列化的形式存在phar文件中。

说明一下:其实就是把要执行的命令序列化保存在phar的压缩文件里

 

反序列化

对应序列化,肯定存在着反序列化的操作。php文件系统中很大一部分的函数在通过phar://解析时,存在着对meta-data反序列化的操作。
测试环境如下: test.php

 

 

 

访问test.php, http://127.0.0.1/test.php?url=phar://vul.phar,得图

 

 

 

执行成功。

防御

  1.  在文件系统函数的参数可控时,对参数进行严格的过滤。
  2.  严格检查上传文件的内容,而不是只检查文件头。
  3. 在条件允许的情况下禁用可执行系统命令、代码的危险函数。

 

发表于
2019-09-03 18:04 娘家人 阅读() 评论() 编辑 收藏

 

版权声明:本文为zy-king-karl原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zy-king-karl/p/11454609.html

利用phar实行php反序列化命令执行漏洞复现的更多相关文章

随机推荐

  1. emWin模拟器Visual Studio开发时无法printf打印的问题

    emWin模拟器Visual Studio开发时无法printf打印的问题 为了方便用户学习evWin框架,S […]...

  2. CBV源码分析

    404...

  3. django 中间件 流程图 – 向往1

    django 中间件 流程图 day65—中间件 一丶中间件介绍 什么是中间件 官方的说法:中间件 […]...

  4. 通过 AccessLinks 在 Excel 和 Access 之间交换数据

    如果正在使用 Microsoft Excel 和 Microsoft Access,那么通过 AccessLi […]...

  5. 小白入门Web前端开发学习一周小结

     说之前还是先说点其他的,简单介绍下自己为何选择web前端开发:       本人之前在一家国企单位从事质检工 […]...

  6. 获取和设置 iphone 屏幕亮度 – 星尘的天空

    link address:http://hi.baidu.com/myguru/item/c8d5878ca5 […]...

  7. 日月既往,不可复追,暑期实习结束!

    有时候发现自己咬着牙,已经走了很长的路 在从上海回南京的高铁上码下了这篇文章,心中感慨万千,两个月弹指一挥间, […]...

  8. 字节跳动飞书为什么选择 Zadig 实现主干开发、主干发布

    “ 我们深度认同 Zadig的设计理念,并且认为 Zadig 真正意义上解决了微服务集成测试的痛点。Zadig […]...

展开目录

目录导航