是否可以绕过“file_exists()”(RFI,LFI)?

时间:2015-09-12 13:09:04

标签: php security

我的网络应用程序中有以下代码:

Process

我收到了几行:

OpenProcess

攻击者是否可以绕过它以在我的系统上利用RFI?或者只是LFI?

2 个答案:

答案 0 :(得分:1)

您必须清理用户输入!即使他们只能访问PDF文件,您仍然无法确保他们只获取位于您指定的目录中的文件。

考虑输入../../../siteB/dir/files/secure。使用您当前的代码而不是访问/var/www/siteA/dir/files/secure.pdf,他们正在访问/var/www/siteB/dir/files/secure.pdf

一种帮助它的方法是只获取输入字符串的最后一位(没有任何前导路径部分)。

$file = basename($_GET['f']);

这会将../../../siteB/dir/files/secure转换为secure。这显然只是部分解决方案。其他测试,例如输入空白字符串或您认为无效的字符。

答案 1 :(得分:0)

在同一目录中:

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 结果: 你好字

函数file_exists()被绕过

来源: http://seclists.org/fulldisclosure/2004/Feb/82