BugkuCTF-Web-变量1

1.代码审计部份

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.php的代码
highlight_file(file); 高亮显示

if(isset($_GET['args'])){
    $args = $_GET['args'];

判断参数args是否被传入值,若有则赋值给变量$args

if(!preg_match("/^\w+$/",$args)){
        die("args error!");
    }
    eval("var_dump($$args);");
}

匹配正则表达式,满足则强行结束程序,不满足则输出$$args中的内容。

2.知识点:
preg_match("/^\w+$/",$args)执行正则表达式匹配
/^开始,\w表示任意一个单词字符,即[a-z][A-Z][0-9],+将前面的字符匹配一次或多次,$/结束。后面的args变量是被匹配的。相当于在args变量里寻找符合正则表达式的部分,若有则返回1,若没有则返回0。(相当于搜索子字符串)。

$$args

表示可变变量,可变变量是一种独特的变量,它允许动态改变一个变量名称。其原理是变量的名称由另外一个变量的值来确定,即一个可变变量获取了一个普通变量的值作为这个可变变量的变量名,实现过程是在变量前面多加美元符号 “$”举一个例子:

$a = "hello";//声明变量a
$hello = "world";//声明变量hello
echo $$a //输出world

3.思路分析
我们的目标是要拿到flag,因为有正则表达式的验证过程,所以我们没法利用本地包含漏洞查看flag1。而题目提示了flag在变量中,于是联想到PHP中$GLOBALS[index] 的数组中存储了所有全局变量,令args=GLOBALS正好符合条件利用可变变量输出,最后得到flag。

构造payload:
http://123.206.87.240:8004/index1.php?args=GLOBALS
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值