PHP是当前非常流行的Web开发语言,但如果您在使用PHP开发Web应用程序时忽略它,就会造成PHP文件中包含漏洞。PHP文件包含漏洞是很常见的,但是通过PHP文件入侵包含漏洞的站点,甚至可以访问站点的WebShell,就更多了。本节介绍美创安全实验室如何为您提供PHP文件中存在的漏洞。
弱点简介。
一个常见的依赖脚本运行的漏洞就是包含文件,从而影响网络应用程序。从理论上讲,文件包含的漏洞就是“代码注入”。PHP、JSP、ASP等许多脚本语言。网络等等,向开发人员提供文件包含功能,允许他们将可用的脚本代码插入一个单独的文件以保存。当调用时,他们可以通过加载文件来直接执行内部代码,但如果cache控制可执行代码的路径,即文件的位置,则cache可以进行修改。
通常,文件中的漏洞会使Web服务器上的文件由于外部浏览和导入信息而暴露出来,恶意脚本会导致严重的危险,如网站篡改、非法操作、攻击其他网站、获取WebShell等等。
弱点产生原理。
前面的部分描述中,我们提到攻击者可以通过控制可执行代码的路径来实现文件包含漏洞,这只是简单地描述整个攻击过程。实际上,当服务器解析并执行php文件时,可以通过包含php代码的函数来加载另一个文件。特洛伊木马包含的文件中,意味着该木马程序将在服务器上加载和执行。
所以,文件中存在漏洞的根本原因是开发者是否对通过包含功能加载的文件做了严格的合理验证。PHP中的四个文件包含功能:
1)Include():include并运行指定的文件,该文件仅包含在Include所包含的程序执行的情况下,当包含的文件发生错误时,程序将发出警告,但是它将继续执行。
2)Require():程序在一次运行中执行包含文件的功能,当出现错误时,程序直接终止执行。
3)Include_once():与Include()类似,与Include_once相比,Include_once将检查此文件是否已导入;如果已导入,则稍后不再进行。
4)Require_once():Require()和Require相似,不同之处是它只被导入一次,就像include_once一样。
PHP文件中包含的漏洞可以分为本地文件中包含的漏洞(LFI)和远程文件中包含的漏洞(LFI)。正如其名称所示,所谓本地文件包含漏洞,就是通过控制包含文件的函数,将PHP脚本文件本地装载到服务器上,比如inclua()、require()等等。自然地,如果本地PHP脚本文件都是功能文件,那么communications不能进一步利用它们。然而,如果攻击者能够配合任何文件上传漏洞,将恶意文件上传到服务器,然后通过本地文件包含来执行恶意脚本,则可达到控制网站的目的。
RemoteFiles包含漏洞意味着攻击者可以通过文件包含特性来装载PHP文件。攻击者可以将可执行恶意文件存储到他们自己的服务器上,然后通过目标网站上的远程文件包含漏洞加载相关文件,从而执行任意命令。