我的web应用程序中有以下代码:
$data = "dir/files/".$_GET['f'].".pdf";下面几行代码:
if(file_exists($data)){
include($data);攻击者可以绕过它来利用我系统上的RFI吗?还是仅限LFI?
发布于 2015-09-12 21:31:25
您必须对用户输入进行清理!即使他们只能访问PDF文件,您仍然不能确保他们只能访问位于您指定的目录中的文件。
考虑输入../../../siteB/dir/files/secure。使用您当前的代码,他们访问的是/var/www/siteB/dir/files/secure.pdf,而不是/var/www/siteA/dir/files/secure.pdf。
一种方法是只获取输入字符串的最后一位(没有任何前导路径部分)。
$file = basename($_GET['f']);这会将../../../siteB/dir/files/secure转换为secure。这显然只是一个部分的解决方案。其他测试,例如,如果他们输入一个空字符串或您认为无效的字符,会发生什么情况。
发布于 2018-07-11 12:20:09
在同一目录下:
test.php
<?
if(file_exists($page)){
echo("Sorry the local page is protected");
}else{
include($page);
}?>file.txt
Hello Word输入:http://www.example.com/test.php?page=file.txt结果:对不起,本地页面受保护
输入:http://www.example.com/test.php?page=./foo/../file.txt结果: Hello Word
绕过了函数file_exists()
来源:http://seclists.org/fulldisclosure/2004/Feb/82
https://stackoverflow.com/questions/32539208
复制相似问题