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,满⾜要求
之前说了,空格 + [ 会被替换成下划线,这⾥过滤了+和[
posted @ 2025-03-25 19:09  justdoIT*  阅读(10)  评论(0)    收藏  举报