bugku-变量一

打开页面:

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);");
}
?>

代码解读:
preg_match用于执行一个正则表达式匹配。
eval() 函数把字符串按照 PHP 代码来执行。
var_dump() 打印变量的相关信息
[\w+]表示匹配数字、字母、下划线和加号本身字符

思路:用户可控的变量只有args,但是经过了过滤,只允许是数字,字母与下划线的组合。
这里我们看到eval("var_dump($$args);");语句中,var_dump中的变量有两个$符,说明var_dump中的变量名由$args指定,而题目提示说flag在变量里,考虑到可以利用$GLOBLES变量。

$GLOBALS — 是一个数组,包含了全局作用域中可用的全部变量。变量的名字就是数组的键。

payload:
http://120.24.86.145:8004/index1.php?args=GLOBALS
得到flag。
p:代码执行漏洞,对$_GLOBALS变量的使用

https://blog.csdn.net/w0ryitang/article/details/80112185

猜你喜欢

转载自blog.csdn.net/Ruhe_king/article/details/82430900