什么是文件包含漏洞

什么是文件包含漏洞

文件包含漏洞(File Inclusion Vulnerability)是一种web应用程序中常见的安全漏洞,它允许攻击

者在应用程序中任意包含本地或远程文件。通过利用这个漏洞,攻击者可以访问并执行未授权的文

件,可能导致敏感信息泄露、远程命令执行、甚至完全控制目标系统。

文件包含漏洞通常存在于web应用程序中,特别是在未正确输入验证和过滤的用户提供的输入的情

况下。攻击者可以通过操纵请求参数、URL路径或Cookie等输入方式来改变应用程序解析和包含文

件的逻辑。

文件包含漏洞通常分为两种类型

本地文件包含漏洞(LFI)和远程文件包含漏洞(RFI)。LFI漏洞允许攻击者包含服务器上的本地

文件,而RFI漏洞允许攻击者包含远程文件,这可能导致更大的安全威胁。

本地文件包含 在index.php文件里包含1.txt,而1.txt的内容是phpinfo(),include函数包含1.txt,就会

把1.txt的内 容当成php文件执行,不管后缀是什么。1.txt也好,1.xml也好,只要里面是php代码,

然后有被 include函数包含,那么就被当成PHP文件执行。 如果包含的文件不存在,就会出现致命

的错误,并报出绝对路径,然是不影响其他功能的执行,比 如这里的123的输出。那么就表include

函数,如果出现错误的话,并不会影响其他功能的运行。 只要文件内是php代码,文件包

是不在意文件后缀的。 

远程文件包含 简单来说远程文件包含,就是可以包含其他主机上的文件,并当成php代码执行。

要实现远程文件包含的话,php配置的allow_url_include必须为on(开启)

allow_url_fopen:为ON时,能读取远程文件,例如file_get_contents()就能读远程文件

Allow_url_include:为ON时,就可使用include和require等方式包含远程文件

包含文件的内容只要符合php语法都能被当成php代码进行解析,无关后缀名是什么。

文件包含漏洞的成因是什么

在包含文件时候,为了灵活包含文件,将被包含文件设置为变量,通过动态变量来引入需要包含的

文件时,用户可以对变量的值可控而服务器端未对变量值进行合理地校验或者校验被绕过,这样就

导致了文件包含漏洞。通常文件包含漏洞出现在PHP语言中。

PHP中的文件包含函数

require组

require:函数出现错误时,会直接报错并退出程序执行。

require_once:出错时直接退出;且仅包含一次。在脚本执行期间同一个文件可能被多次引用,确保

只包含一次以避免函数重定义、变量重新赋值等问题。

include组

include:函数出现错误时,会抛出一个警告,程序继续运行。

include_once:函数出现错误时,会抛出警告,且仅包含一次。

highlight_file、show_source、readfile、file_get_contents、fopen、file
 

返回上级目录:../

文件包含漏洞的利用方式:伪协议

php://filter是一种元封装器,设计用于数据流打开时的筛选过滤应用
data://同样类似与php://input,可以让用户来控制输入流
php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行
phar://xxx.png/shell.php解压缩包的一个函数,不管后缀是什么,都会当做压缩包来解压。

文件包含漏洞的防御

1、使用str_replace等方法过滤掉危险字符
2、配置open basedir,防止目录遍历(open_basedir将php所能打开的文件限制在指定的目录树中)
3、php版本升级,防止%00截断
4、对上传的文件进行重命名,防止被读取
5、对于动态包含的文件可以设置一个白名单,不读取非白名单的文件。
6、做好管理员权限划分,做好文件的权限管理,allow_url_include和allow._url_fopen:最小权限化

包含Apache日志文件

比如某个php文件存在本地包含漏洞导致无法上传文件时,就会显得不能深度利用这个漏洞,但是可以找到Apache路径,利用包含漏洞包含Apache日志文件也可以获取到Webshell。

Apache运行后一般默认会生成两个日志文件,access.log(访问日志),error.log(错误日志)。

查看access.log文件后,发现里面每一行记录着网站访问记录,有客户端、访问者标识、访问者的验证名字、请求时间、请求类型、请求的HTTP代码、发送给客户端的字节数。

当我们访问一个不存在的资源时,Apache的日志也同样会记录,如果网站存在本地包含漏洞,却没有可以包含的(网页木马)时,就可以去访问URL:http://www.xxx.com/<?php phpinfo()?>

Apache就会记录下来请求"<?php phpinfo()?>",并写到access.log文件中,然后再去包含日志文件,会发生变化,因为浏览器的原因,PHP中的<>还有空格会被转码,在日志中的木马会变形。例如:

/%3C?php%20phpinfo();)?%3E

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值