攻防世界 WEB Web_php_include

题目给我们的信息是这样一段PHP代码:

攻防世界 WEB Web_php_include_第1张图片

我们可以知道,通过GET方式可传入两个参数:hello和page。hello会直接输出;page先进入while循环,最后include($page)——执行本地文件包含,即说明传入的page应含有flag文件。

strstr() 函数搜索字符串在另一字符串中是否存在,如果是,返回该字符串及剩余部分,否则返回 FALSE。

echo strstr("Hello world!","world"); // 输出 world!

该函数是区分大小写的。如需进行不区分大小写的搜索,请使用 stristr() 函数。

PHP代码中while循环的意思是:若page含"php://"字段,则将其替空,直到不含该字段。

说明我们不能通过双写绕过,但由于strstr函数区分大小写,所以可通过大小写绕过。 

首先得知道flag文件是什么。配合PHP伪协议,调用system函数执行"ls"命令即可输出当前脚本所在文件夹下的所有文件:

攻防世界 WEB Web_php_include_第2张图片

显然fl4gisisish3r3.php最可能为flag文件。

使用php://协议将其执行:

攻防世界 WEB Web_php_include_第3张图片 

什么也没有?获取其源码看看:

 攻防世界 WEB Web_php_include_第4张图片

 解码:

攻防世界 WEB Web_php_include_第5张图片

得flag。 //解法不唯一

 

你可能感兴趣的:(CTF刷题,经验分享)