Web_Bugku_WriteUp | 变量1

题目

分析

<?php  

error_reporting(0);  // 不显示报错信息
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){  // get传入的args值非空
    $args = $_GET['args'];  // 将传入的值赋给args
    if(!preg_match("/^\w+$/",$args)){  // 如果args从开头到结尾匹配到非字母或非数字或非下划线
        die("args error!");  // 输出"args error!"并退出脚本
    }
    eval("var_dump($$args);");  // 将与arge值同名变量的相关信息作为php代码执行
}
?> 

根据代码内容能够获得的信息主要有:

  1. 传入 args 的字符串参数只能包含字母数字下划线。
  2. 以 args 值为变量名的变量被格式化后将作为 php 代码被执行后输出。

显然我们需要向 arge 传入一个已经存在的变量以获得变量内容。


先尝试输入 “flag” 但没有输出 flag 内容,遂 WP 解法:BugKu 变量1-雨落洛-博客园


了解到 php 存在九大全局变量,分别是 $_POST $_GET $_FILES $_COOKIE $_SESSION $_REQUEST SERVER $GLOBALS$_ENV。其中 $GLOBALS 是一个包含了全部变量的全局组合数组,通过向 args 传入 GLOBALS 即可获得包括 flag 的所有变量的名称及内容。payload:?args=GLOBALS


输出 flag 的变量名为 ZFkwe3。

参考

BugKu 变量1-雨落洛-博客园

posted @ 2024-03-17 00:46  Guanz  阅读(17)  评论(0编辑  收藏  举报