BUGKU 变量1 及PHP全局变量学习

代码审计

在这里插入图片描述在这里插入图片描述

$ a r g s 可 以 理 解 为 args 可以理解为 args($args)

eg:

$a=“hello world!”;

$args=“a”;

echo $$args; 输出结果为: hello world!

介绍完每一行代码意思,我们来整理一下思路。

eval()函数存在命令执行漏洞 我们的目标是查看flag1.php中的flag 首先想到的是本地包含漏洞查看源码 或者上传一句话木马等思路

        链接 http://120.24.86.145:8003/     这道题思路为上述所说。  

而本题条件判断加了正则表达式判断,过滤了括号和引号等字符。无法构造! 但输出时是 $$args

我们想到构造 php中超全局变量 $GLOBALS

PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。

可以看到 x 和 x和 xy本身局部变量,未在函数体内声明,但是在全局变量$GLOBALS数组中存放着,可以调用,最后输出95。

构造

eval("var_dump( a r g s ) ; " ) ; 首 先 将 v a r d u m p ( args);"); 首先将 var_dump( args);");vardump(args); 当成代码执行 var_dump($GLOBALS);

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

最后补充一点 很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然。

前者为变量实体 后者为别名引用

eg:

<?php $var1 = 1; function test(){ unset($GLOBALS['var1']); } test(); echo $var1; ?>

因为$var1被删除了,所以什么东西都没有打印。

<?php $var1 = 1; function test(){ global $var1; unset($var1); } test(); echo $var1; ?>

意外的打印了1。

证明删除的只是别名,$GLOBALS[‘var’]的引用,起本身的值没有受到任何的改变。
验证了我们之前所说的东西

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值