• 欢迎光临~

ctfshow web111(变量覆盖+PHP超全局变量)

开发技术 开发技术 2022-10-18 次浏览
function getFlag(&$v1,&$v2){
    eval("$$v1 = &$$v2;");
    var_dump($$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)){
            getFlag($v1,$v2);
    }

这里简单说一下:&--->引用,在函数内改变变量值以后,外面的数值紧跟改变。但在函数体内无法引用函数体外的其他变量,因此无法直接v2==flag。

该题我们利用PHP的超全局变量$GLOBALS。

因此payload如下:

?v1=ctfshow&v2=GLOBALS

 

程序员灯塔
转载请注明原文链接:ctfshow web111(变量覆盖+PHP超全局变量)
喜欢 (0)