打开后是php代码
逐行解释
第三行:包含flag1.php
第四行:接收一个args变量,若非空,则运行
第五行:给$args赋值(并没有用,只是为了让新手看着更直观)
第六行:利用正则表达式匹配,若不匹配,则程序直接die
第九行:输出$$args(eval没有用)
关于正则表达式,网上这个解释感觉非常好——
1 | /^\w+$/ 两个/ / 表明正则表达式的开始与结束 ^开始字符,$结束字符 \w 包含【a-z,A-Z,_,0-9】中的字符,+代表可以有一个,或多个\w |
相当于传入的值只能是大小写字母或数字,字符只能是“_”
所以不能传入别的字符,不能传shell了
另外推荐一个比较好的正则表达式网站——https://regex101.com/
然后就是了解到:超全局变量——https://www.php.net/manual/zh/language.variables.superglobals.php
这里用到$GLOBALS
所以传值?args=GLOBALS,得到flag