PHP特性:绕过匹配机制的下划线

<?php
error_reporting(0);
include("flag.php");
highlight_file(__FILE__);
$ctf_show = md5($flag);
$url = $_SERVER['QUERY_STRING'];


//特殊字符检测
function waf($url){
    if(preg_match('/\`|\~|\!|\@|\#|\^|\*|\(|\)|\\$|\_|\-|\+|\{|\;|\:|\[|\]|\}|\'|\"|\<|\,|\>|\.|\\\|\//', $url)){
        return true;
    }else{
        return false;
    }
}

if(waf($url)){
    die("嗯哼?");
}else{
    extract($_GET);
}


if($ctf_show==='ilove36d'){
    echo $flag;
} 
?>

这么多代码无非就是在告诉我们:下划线你是输入不了的,无法获取变量ctf_show变量使得条件$ctf_show===’ilove36d’成立

这里先得介绍一下这个函数:

extract($_GET);

sYqROK.png

会发现GET方式中a被当做了变量 后面的等于号就是变量a的值

再结合GET或POST方式传进去的变量名,会自动将空格 + . [转换为_

这个特性,可以构造出最终的payload:

?ctf show=ilove36d

RIPRO主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
天云网络培训 » PHP特性:绕过匹配机制的下划线

天云安全,多年安全积累,值得信赖

立即查看 了解详情