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);
会发现GET方式中a被当做了变量 后面的等于号就是变量a的值
再结合GET或POST方式传进去的变量名,会自动将空格 + . [转换为_
这个特性,可以构造出最终的payload:
?ctf show=ilove36d
Tips:鼠标经过代码时会出现工具栏,工具栏上方有一键复制代码的功能哦~天云网络培训,专注于网络空间安全相关培训,并提供相关课程的在线培训 报名微信 tyedu1
天云网络培训 » PHP特性:绕过匹配机制的下划线
天云网络培训 » PHP特性:绕过匹配机制的下划线