直接访问题目网址,可获得源码:
<?php
include "flag.php";
$a = @$_REQUEST['hello'];
if(!preg_match('/^\w*$/',$a )){
die('ERROR');
}
eval("var_dump($$a);");
show_source(__FILE__);
?>
代码审计
-
include "flag.php";
:文件包含,相当于把flag.php文件复制到该文件下,即根目录下存在flag.php。 -
$a = @$_REQUEST['hello']
:接收表单’hello’数据,包含$_GET, $_POST, $_COOKIE
,若key相同,后面的会覆盖前面的,慎用。 -
if(!pre_match('/^\w*$/',$a))
:pre_match
函数用于对变量$a
执行正则表达式,/^\w*$/
为匹配的正则表达式,用/
作为开头和结尾,^
匹配输入字符的开始位置(在[ ]内使用时,表示不接受该方括号表达式中的字符集),$
匹配输入字符串的结尾位置,\w
匹配字母、数字、下划线,等价于[A-Za-z0-9_]