审计一下代码,和爆破-1的区别是,没有了正则匹配,且可变变量$$a变成了普通变量$a;
尝试像爆破-1那样传入超全局变量$GLOBALS
根据回显,我们发现flag不在变量中(它还嘲笑我们“too young too simple”太年轻太天真)
既然包含了flag.php文件,尝试直接读取它
使用file()函数:
file()把整个文件读入一个数组中,数组中的每个元素都是文件中相应的一行,包括换行符在内。
同样因为 $_REQUEST变量包含$_GET、$_POST和$_COOKIE的内容,$_REQUEST变量可以用来通过“GET”和“POST”这两个方法发送到表单数据,所以这里使用post和get传参都是可以的。
payload:
?hello=file("flag.php")或post:hello=file("flag.php")
拿到 flag{49663f37-c1fc-446b-8640-d2c5dd5185e8}
也可以使用file_get_contents()函数:
file_get_contents() 用于把整个文件的内容读入到一个字符串中。
(如果服务器操作系统支持,还会使用内存映射技术来增强性能)
payload:
?hello=file_get_contents("flag.php")或post:hello=file_get_contents("flag.php")
传参后,Ctrl+U查看源码
发现flag
这里也可以通过注入来实现:
通过$a闭合前面的执行语句和后面的内容,在中间插入我们想要执行的代码;
使用 ); 闭合原语句 var_dump( 的括号,使用 var_dump( 闭合后面的内容;
中间插入 highlight_file("flag.php");或者 show_source("flag.php");
highlight_file() 函数:对整个文件进行高亮显示,通过使用 HTML 标签进行高亮。
用于高亮的颜色可通过 php.ini 文件进行设置或者通过调用 ini_set() 函数进行设置;
当使用该函数时,整个文件都将被显示。
show_source() 就是 highlight_file() 的别名。
payload:
?hello=);highlight_file("flag.php");var_dump( 或 post:hello=);highlight_file("flag.php");var_dump(
?hello=);show_source("flag.php");var_dump( 或post: hello=);show_source("flag.php");var_dump(