相关知识
1.eval()函数
eval函数,可以将括号内的字符串变成php代码执行,前提是括号内的内容以分号结尾;如果代码解析错误,则会返回false。
2.var_dump()函数
将显示一个或多个表达式的值,包括表达式的类型和值,数组会递归展开。
打开环境出现了PHP代码,猜测应该是代码审计
3.highlight_file()函数
对文件进行 PHP 语法高亮显示,语法通过使用 HTML 标签进行高亮;当使用该函数时,整个文件都将被显示,包括密码和其他敏感信息!
4.isset函数
isset在php中用来判断变量是否声明,该函数返回布尔类型的值,即true/false。isset只能用于变量,因为传递任何其它参数都将造成解析错误。
5.正则匹配
在做项目的过程中,使用正则表达式来匹配一段文本中的特定种类字符,是比较常用的一种方式。
“/^\w+$/” : 正则表达式
^ 表示开头,是转义字符,使用时在前面加""
$ 表示结束,是转义字符,使用时在前面加""
\w 任意一个字母或数字或下划线,也就是 AZ,az,0~9,_ 中任意一个
6.Die函数
Die函数是PHP中一种基础的错误处理方式,用于强制代码退出和避免潜在错误。
代码分析
作为小白上网搜一下代码
flag in the variable:// flag在变量中
error_reporting(0)://关闭错误报告
include “flag1.php”:// include 语句包含并运行指定文件
highlight_file(file)://highlight_file()函数对文件进行 PHP 语法高亮显示,语法通过使用 HTML 标签进行高亮;当使用该函数时,整个文件都将被显示,包括密码和其他敏感信息!
if(isset($_GET['args']))// isset函数判断变量是否存在,是则返回true
$args= $_GET['args']; //通过get请求获取args
if(!preg_match("/^\w+$/",$args));//利用正则匹配,检测args中的内容(preg_match : 函数用于执行一个正则表达式匹配)
die("args error!);//输出“args error”一条消息,并退出当前脚本
eval("var_dump($$args);")//var_dump会输出一个或者多个表达式的类型和值,eval函数会将字符串当成php代码来执行
我尝试用args=flag和args=flags,发现都不对,输出null,继续上网查,发现它和PHP超级全局变量有关
然后我们尝试在url中输入args=GLOBALS
然后就得到我们需要的flag了。