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

Tips:鼠标经过代码时会出现工具栏,工具栏上方有一键复制代码的功能哦~天云网络培训,专注于网络空间安全相关培训,并提供相关课程的在线培训 报名微信 tyedu1
天云网络培训 » PHP特性:绕过匹配机制的下划线

提供专业、易懂、平民化教育。让每个热爱网络的人有个归宿

立即查看 了解详情