首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >is_file()和本地文件包含漏洞

is_file()和本地文件包含漏洞
EN

Stack Overflow用户
提问于 2013-05-05 16:27:05
回答 4查看 2K关注 0票数 0

我正在帮助我的朋友保护他的网站。他给了我源文件,我发现了一些东西,在我看来,这可能会导致许多问题,但像以前一样,我的朋友说这部分代码是安全的:

代码语言:javascript
复制
if(is_file('foo/' . $_POST['f'] . '/bar/foo.php'))
  {
    include('foo/' . $_POST['f'] . '/bar/foo.php');
  }

我已经向他展示了我可以绕过include()函数,但他说,使用is_file(),这部分代码是100%安全的,请帮助我向他证明代码是不安全的,或者说服我这段代码是安全的。

此代码绕过include()函数(WINDOWS):

代码语言:javascript
复制
curl_setopt($ch, CURLOPT_POSTFIELDS, 'f=../foo/bar.php' . str_repeat('.', 4086)); // without is_file() check this request leads to LFI

但是is_file()仍然返回false

EN

回答 4

Stack Overflow用户

发布于 2013-05-05 16:46:26

避免使用这种结构。如果攻击者能够将自己PHP文件放到服务器上(甚至在WWW根目录之外,例如在tmp文件夹中),他就可以使用web服务器的权限执行该文件。

票数 2
EN

Stack Overflow用户

发布于 2013-05-05 16:58:44

如果该文件不存在,include无论如何都不会包含它。将is_file检查放在它之前是多余的,并且不会增加任何安全性。正如前面提到的,包含基于用户输入的任意文件始终是一个糟糕的想法和安全缺陷;无论您仔细检查文件是否存在,总是一个坏主意。

票数 2
EN

Stack Overflow用户

发布于 2013-05-05 16:58:51

is_fileinclude有一个可以prematurely end the string by using a null byte的漏洞。

因此,根据PHP版本的不同,包含以下内容的POST可能会打印出任意文件:

代码语言:javascript
复制
f=../../../../../etc/passwd%00

只有从PHP 5.3.4开始,所有的文件系统函数才被认为是对空字节中毒免疫的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16382735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档