【愚公系列】2023年06月 Bugku-Web(变量1)


前言

preg_match函数是PHP中用于正则表达式匹配的函数。它的语法如下:

preg_match($pattern, $subject, $matches);

其中,$pattern表示需要匹配的正则表达式,$subject表示需要被匹配的字符串,$matches表示匹配后的结果。

$matches是可选参数,如果存在,它将被填充为匹配到的结果数组。$matches[0]包含整个正则表达式的匹配结果,$matches[1]包含第一个子匹配的结果,以此类推。

例如,如果要匹配一个字符串中是否包含数字,可以使用以下代码:

$string = 'abc123def';
if (preg_match('/\d+/', $string, $matches)) {
    echo 'Match found: '.$matches[0];
} else {
    echo 'No match found';
}

输出结果为:

Match found: 123

preg_match函数还有很多其他的用法,可以根据需要查看PHP官方文档。

一、变量1

1.题目

在这里插入图片描述

2.答题

在这里插入图片描述

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 ! <?php  

error_reporting(0);
include "flag1.php";     引入flag1.php文件代码
highlight_file(__file__);    
if(isset($_GET['args'])){
    
         // 通过get方式传递 args变量才能执行if里面的代码
    $args = $_GET['args'];       
    if(!preg_match("/^\w+$/",$args)){
    
             // 这个正则表达式的意思是匹配任意 [A-Za-z0-9_] 的字符,就是任意大小写字母和0到9以及下划线组成
        die("args error!");
    }
    eval("var_dump($$args);");    //此函数显示一个或多个表达式的信息,包括表达式的类型与值
}
?>
  • get型传参,args要满足正则匹配的内容

    • ^:匹配输入字符串的开始位置

    • \w:包含下划线的任意单词字符字符

    • +:匹配前面的子表达式一次或多次

    • $:匹配输入字符串的结束位置

  • isset: 用于检测变量是否已设置并且非 NULL。

  • prep_match: 用于执行一个正则表达式匹配。

  • error_reporting(0)关闭错误显示。

  • include “flag.php”页面包含flag.php页面。

  • highlight_file(file)页面进行语法高亮显示。

根据!preg_match("/^\w+$/",$args)得知,arg只能是任意字母,数字,下划线,汉字的字符组成

使用GLOBALS得到全部变量

http://114.67.175.224:13724/?args=GLOBALS

在这里插入图片描述
得到flag:flag{a2b1e8779b922f41eca71bafb2029390}

猜你喜欢

转载自blog.csdn.net/aa2528877987/article/details/131427088