一、引用的理解:
引用就是给予一个变量一个恒定的别名。
int a = 10;
int b = &a;
a = 20;
cout<<a<<b<<endl;
输出结果 : a=20、b=20
二、靶场复现:
<?php
highlight_file(__FILE__);
error_reporting(0);
include("flag.php");
class just4fun {
var $enter;
var $secret;
}
if (isset($_GET['pass'])) {
$pass = $_GET['pass'];
$pass=str_replace('*','\*',$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?";
?>
分析靶场源代码:
后台会将我们输入的字符串中的 * 转义成 \*,并且转义之后会将 $serect 赋值为 *。并且最终以 $o->serect 和 $o->enter 是否相等作为最终条件,我们可以使用引用将 serect 和 enter 捆绑在一起,使他们一直相等即可。
构造 payload:
将序列化字符串赋值给 ['pass'] 后提交: