<span id="ld9bz"></span>

<big id="ld9bz"><thead id="ld9bz"></thead></big>

<address id="ld9bz"><thead id="ld9bz"></thead></address>
<sub id="ld9bz"><thead id="ld9bz"><cite id="ld9bz"></cite></thead></sub>

    <progress id="ld9bz"></progress>

        <big id="ld9bz"></big>
        专业软件下载站,为您提供无病毒无木马的纯净绿色软件

        下载排行榜

        教程信息

        利用PHAR协议进行PHP反序列化攻击

        发布时间:2021-06-29
        PHAR ( "Php ARchive" ) 是 PHP 中的打包文件,相当于 Java 中的 JAR 文件,在 php5.3 或者更高的版本中默认开启。PHAR 文件缺省状态是只读的,当我们要创建一个 Phar 文件需要修改 php.ini 中的 phar.readonly,修改为:phar.readonly = 0
         
        当通过 phar:// 协议对 phar 文件进行文件操作时,将会对 phar 文件中的 Meta-data 进行反序列化操作,可能造成一些反序列化漏洞。
         
        本文由锦行科技的安全研究团队提供,从攻击者的角度展示了 PHAR 反序列化攻击的原理和过程。
         
        PHAR 文件结构
         
        stub phar:文件标识,格式为 xxx
         
        manifest:压缩文件的属性等信息,其中的 Meta-data 会以序列化的形式存储。
         
        利用PHAR协议进行PHP反序列化攻击
        contents:压缩文件的内容
         
        signature:签名,放在文件末尾
         
        生成 PHAR 文件
         
        生成程序如下:
        利用PHAR协议进行PHP反序列化攻击
         
        生成 phar 文件,使用 16 进制工具查看,可以看到 Meta-data 中的序列化对象
         
        利用PHAR协议进行PHP反序列化攻击
        测试反序列化
         
        测试程序如下:
         
        利用PHAR协议进行PHP反序列化攻击
        运行结果,可以看到打印了‘ test ’,证明对象被反序列化创建后销毁。
         
        虽然在创建 PHAR 文件时后缀是固定的,但完成创建后我们是可以修改 phar 的后缀名的,例如修改成 .jpg,当执行 include ( 'phar://phar.jpg' ) ; 时也可触发反序列化。
         
        几乎所有文件操作函数都可触发 phar 反序列化
         
        利用PHAR协议进行PHP反序列化攻击
        CTF 演示
         
        题目地址: [ CISCN2019 华北赛区 Day1 Web1 ] Dropbox(链接:https://buuoj.cn/challenges#%5BCISCN2019%20%E5%8D%8E%E5%8C%97%E8%B5%9B%E5%8C%BA%20Day1%20Web1%5DDropbox)
         
        进入题目后,随意注册账号上传文件,上传点只能上传图片后缀
         
        利用PHAR协议进行PHP反序列化攻击
        点击下载,有任意文件读取,但是不能读取 flag.txt
         
         
        于是读取网页源码,传入 filename=../../xxx.php
         
        detele.php
         
         
        class.php
         
        分析源代码
         
        可以看到删除文件时使用了 File 类的 delete 函数,File 类的 delete 使用了 unlink 函数,可以触发 phar 反序列化。
         
        继续看到 class.php 的 File 类的 close ( ) 函数中调用了 file_get_contents 函数,可以读取文件。但是要怎么触发呢,我们可以看到 FileList 的 __call 函数,如果我们可以让 FileList 参数 files 为数组且数组中一个类为 File,只要有类可以执行 $FileList->close ( ) ,就可以读取文件并在 FileList 的析构函数中显示出来了。我们看到 User 类的析构函数,执行了 $db->close ( ) 。so,我们让 User 的 $db 参数等于 FileList 就行了。
         
        利用链:User 类的 $db 赋值为 FileList 类,User 类的析构函数执行 close 方法 ->触发 FileList 的 __call 函数,让 $file 值为 File,执行 $file 的 close 函数 ->File 执行 close 读取文件,控制 $filename 为想读取的文件 ->FileList 对象销毁,执行析构函数,回显结果。
         
        生成 phar 文件代码:
         
         
        生成 phar 文件,修改后缀为 jpg,上传
         
        删除文件处修改 filename 为‘ phar://phar.jpg ’ , 读取到 flag 文件
        利用PHAR协议进行PHP反序列化攻击
        本文链接地址: http://www.7567777.com/ddjc/ctjc/32466.html
        日韩欧美网站
        <span id="ld9bz"></span>

        <big id="ld9bz"><thead id="ld9bz"></thead></big>

        <address id="ld9bz"><thead id="ld9bz"></thead></address>
        <sub id="ld9bz"><thead id="ld9bz"><cite id="ld9bz"></cite></thead></sub>

          <progress id="ld9bz"></progress>

              <big id="ld9bz"></big>