1.环境启动后看到如下代码:
flag In the variable ! // 提示你flag在变量里
<?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);"); //如果匹配
}
?>
2.知识点
正则表达式讲解
w :匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
^ :匹配输入字符串的开始位置。
+:匹配前面的子表达式一次或多次。
$:匹配输入字符串结尾的位置。
preg_match函数讲解
preg_match()返回pattern的匹配次数。它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后将会停止搜索
搞懂以上两个知识点,再回头看上面的php代码。如果直接使用args=flag1.php,因为包含 . 这个符号,不匹配,会die,所以我们想到全局变量,构造payload:
url?args=GLOBALS