web127笔记(+extract()函数)
<?php /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-10-10 11:25:09 # @Last Modified by: h1xa # @Last Modified time: 2020-10-10 21:52:49 */ 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; }
这里开启了$_SERVER['QUERY_STRING'],上题已经解释过,这里用了一个extract()函数
extract() 函数从数组中将变量导入到当前的符号表,使用数组键名作为变量名,使用数组键值作为变量值
举例就是?a=2,就会变成$a=2,这里ctf_show有个_需要构造,前面说过php中变量名只有数字字母下划线,被get或者post传入的变量名,如果含有空格、+、[则会被转化为_,这里空格没有被ban,所以我们就使用空格,payload为
?ctf show=ilove36d
哦,然后题⽬最后要$ctf_show = ilove36d
当传⼊ctf_show=ilove36d时,就会变成 $ctf_show=ilove36d,满⾜要求
之前说了,空格 + [ 会被替换成下划线,这⾥过滤了+和[
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号