远程文件包含(Remote File Inclusion),简称RFI,与其对应的是本地文件包含(Local File Inclusion,LFI),它们都是通过PHP的包含函数即:require(),require_once(),include()和include_once()来使用。
一般情况下,用户通过包含函数将具有特定功能的函数或类包含到当前脚本中,是没有什么问题的。但是有时候,为了方便,需要动态的包含文件,这就会留下一些攻击漏洞。
通常情况下,LFI攻击威胁不大,因为本地服务器上的文件是比较确定的,攻击者想要上传带有攻击性代码的文件也不是件容易的事。RFI攻击才是我们需要防范的事。那么,RFI攻击是如何实现的呢?
首先,提供一个存在RFI漏洞的代码示例(index.php):
<?php
// 存在RFI漏洞的代码片段
$file = $_GET['file'];
include $file;
?>
脚本中使用了利用GET方法来动态包含文件,例如:在index.php同级目录下存在include.php文件,我们就可以通过访问类似URL“127.0.0.1/lab/index.php?file=include.php”来包含include.php文件,随后,服务器将解析include.php脚本,将产生的HTML代码传送给浏览器执行。
目前看来,还没出现什么安全问题,因为还仅仅只是包含本地文件。如果是包含远程文件,问题就来了,因为攻击者是可以任意编码远程文件的。
需要说明的是,进行RFI攻击需要同时具备三个条件(被攻击机器):
- allow_url_fopen = On (默认开启)
- allow_url_include = On (默认关闭)
- 被包含的变量前没有目录的限制
同时满足了这三个条件,就等于为攻击者打开了大门。为了清楚地理解,下面给出一个LFI攻击的实例。(说明:在本地搭建一个存在RFI漏洞的环境,通过包含一个远程主机上的文件来攻击这个本地主机)
第一步:设置php.ini文件,将“allow_url_fopen ”和“allow_url_include”都开启,重启Apache。
第二步:创建存在RFI漏洞的脚本文件,如上面的index.php。
第三步:在远程主机上创建一个带有攻击性代码的文本文件hack.txt(Just test),注意这个文件不能被服务器解析,如不能为PHP脚本文件。因为只是演示,文本文件被执行就能满足演示效果了。hack.txt文件内容如下:
hahaha,You are hacked. <?php echo $_GET['a']; ?>
将文本文件放在一个拥有登录权限的主机根目录下,文本文件在互联网上的位置为:http://yourhost/hack.txt。
第四步:将攻击文件的URL带入include,进行攻击,如图所示:
可以看到,文本文件被执行。接着,我们使用其中的PHP代码,如图所示:
可以看到,文本文件中的PHP代码被成功执行,现在只是一个演示,但是已经能说明RFI攻击过程。如果攻击者在文件中放入了系统命令,后果将不堪设想。
上面提到,攻击文件不能是PHP文件,所以有些经验丰富的开发者会考虑将被包含文件的扩展名写死,如:
<?php
// 存在RFI漏洞的代码片段
$file = $_GET['file'];
include $file.'.php';
?>
这样,通过以上方法包含远程文件,系统就会警告找不到被包含文件,从而避免攻击。
这种方法确实能起到一定作用,但对那些有经验的攻击者来说,这不是问题。我们知道PHP引擎是有C来实现的,C中空字符就是字符串结束符,因此可以使用空字符将扩展名截断,实现RFI攻击。
理解了RFI攻击原理,防御也就简单了。在配置层面,保持PHP的默认设置,将“allow_url_include”关闭;在代码层面,如果一定要动态包含文件,最好明确规定包含哪些文件,进行白名单比对。同时,也可以在包含函数中加入目录限制。
- 大小: 4.2 KB
- 大小: 4.7 KB
- 大小: 9.4 KB
分享到:
相关推荐
通达OA漏洞合集
当这些函数被用来包含一个远程文件时,若对传入的参数不做任何检查或仅做简单检查,就可能引发远程文件包含漏洞。攻击者可以通过向服务器发送恶意请求,诱导服务器加载指定的远程文件,进而控制服务器的行为。 ####...
【信息安全技术:远程文件包含漏洞】 远程文件包含漏洞(Remote File Inclusion,简称RFI)是一种常见的网络安全问题,尤其在基于PHP的Web应用程序中较为常见。这种漏洞允许攻击者通过指定远程URL来包含并执行非...
【远程文件包含(Remote File Inclusion,RFI)】是一种常见的Web应用安全漏洞,它允许攻击者通过操纵应用程序,使其包含并执行远程服务器上的文件。RFI与本地文件包含(Local File Inclusion,LFI)相似,不同之处...
2. 远程文件包含(Remote File Inclusion,RFI):攻击者指定远程服务器上的恶意脚本作为包含文件。如果Web应用程序配置不当,允许包含远程文件,那么攻击者可以执行远程代码。这个漏洞可以被用来上传恶意脚本、获取...
远程文件包含漏洞是指在PHP编程中,攻击者利用PHP的include或require函数的特性来包含并执行远程服务器上的恶意脚本文件。因为PHP的include/require函数既可以包含本地文件也可以包含远程文件,这就为攻击者提供了一...
远程文件包含漏洞通常发生在应用程序允许用户输入用于决定要包含的文件路径时,如果这种输入没有经过充分验证,攻击者就能利用此漏洞执行任意代码。 首先,我们需要了解PHP的配置选项。`allow_url_include`和`allow...
本地文件包含是指包含服务器本地的文件,而远程文件包含则是指包含网络上的文件。这两种类型的漏洞都可能导致敏感信息泄露、代码执行或系统控制权的丧失。 在PHP中,有四种文件包含函数:`include`、`include_once`...
2. **远程文件包含(Remote File Inclusion, RFI)** - 这种漏洞允许攻击者从远程服务器获取并执行文件。通常情况下,PHP默认不允许远程文件包含,但可以通过修改`php.ini`文件中的`allow_url_include`设置来开启此...
漏洞背景背景介绍phpMyAdmin是一套开源的、基于Web的MySQL数据库管理工具…阅读数 156博文CVE-2018-12613 --- 本地文件包含造成
文件包含漏洞分为本地文件包含(LFI)和远程文件包含(RFI)两种类型,其中LFI漏洞主要涉及服务器本地文件的读取,而RFI漏洞则能够读取或执行远程服务器上的文件。 当服务器开启了allow_url_include配置选项后,...
文件包含漏洞可以分为本地文件包含(Local File Inclusion,LFI)和远程文件包含(Remote File Inclusion,RFI)。本地文件包含是指包含的文件在本地服务器上,而远程文件包含是指包含的文件在远程服务器上。远程...
文件包含漏洞可以分为本地文件包含漏洞和远程文件包含漏洞两种。 文件包含漏洞的攻击步骤: 1. 准备有文件上传漏洞的网站 2. 客户端浏览器利用本地包含文件漏洞进行攻击 a) 使用正常合法的小图片,使用工具插入...
不恰当的文件包含可能导致远程文件包含漏洞(RFI,Remote File Inclusion),攻击者可以通过构造恶意URL来包含远程服务器上的文件,甚至执行任意代码。因此,我们应该始终确保包含的文件路径是可信的,并避免用户...
4. **禁用远程文件包含**:除非绝对必要,否则应禁用远程文件包含功能。 5. **更新PHP版本**:使用最新版本的PHP可以避免因旧版本中存在的漏洞而导致的问题。 通过上述措施,可以在很大程度上减少文件包含漏洞带来...
URL用于表示远程文件的地址,而HttpURLConnection则用于建立与远程服务器的连接。 3. 文件下载的实现 代码中使用了BufferedInputStream和DataOutputStream来实现文件的下载。BufferedInputStream用于读取远程文件...
1. **远程文件包含**:攻击者可以通过构造URL,使PHP脚本包含远程服务器上的文件。这可能导致恶意代码被执行,如下载并执行远程木马。 2. **本地文件包含**:攻击者可以尝试包含服务器上的本地文件,如日志、配置...
2. 漏洞类型:区分本地文件包含(LFI)和远程文件包含(RFI)的区别,理解它们的攻击原理和危害。 3. 攻击手段:学习攻击者如何通过构造特定的输入,欺骗Web应用程序加载恶意文件或远程URL,进而执行任意代码。 4....
4. **远程文件包含**:类似地,如果程序允许包含远程URL,攻击者可以指定一个远程服务器上的文件地址,如`http://192.168.1.56/1.txt`。如果远程服务器支持HTTP服务并且能够解析PHP,那么它可能会执行该文件中的PHP...