文件包含漏洞

文件包含漏洞

原理

服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。
而如果文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,那么文件中的恶意代码会被解析执行。
文件包含漏洞会造成服务器网页篡改,网站被挂马,服务器被远程控制,被安装后门等。

文件包含函数

1、require():只要程序一运行就包含文件,找不到被包含的文件时会产生致命错误,并停止脚本;
2、requere_once():若文件中代码已经被包含则不会被再次包含。
3、include():执行到inlcude时才包含文件,找不到被包含文件时会产生警告,脚本将继续执行;
4、include_once():若文件中代码已经被包含则不会被再次包含。

本地包含漏洞

可以包含本地文件,在条件允许时甚至能执行代码
读敏感文件,读PHP文件
包含日志文件GetShell
包含data:或php://input等伪协议
若有phpinfo则可以包含临时文件
配合上传图片木马,然后包含从而GetShell

无限制本地包含漏洞

无限制本地文件包含漏洞是指代码中没有为包含文件指定特定的前缀或者.php、.html等扩展名,攻击者可以利用文件包含漏洞读取操作系统中的其他文件,获取敏感信息,或者执行其他文件中的代码。
常见的敏感信息路径:
在这里插入图片描述

有限制本地文件包含漏洞

有限制本地文件包含是指代码中指定了特定的前缀或者.php、.html等扩展名,攻击者需要绕过前缀或者扩展名过滤,才能利用文件包含漏洞读取操作系统中的其他文件,获取敏感信息。

路径长度截断

操作系通存在最长目录的限制,可以通过输入超过最长目录的路径长度,这样系统就会将后面的路径丢弃,导致后缀截断。
windows下目录最大长度为256字节,目录后面跟.不影响路径访问。
linux下目录最大长度为4096字节,目录后加/.不影响路径访问。

%00截断

在url后面输入%00即可截断html

Session文件包含

当Session文件的内容可控,并且可以获取Session文件的路径,就可以通过包含Session文件进行攻击。
Session的存储位置一般是通过以下两种方式获取:
1、通过phpinfo的信息可以获取到Session的存储位置。
2、通过猜测默认的Session存放位置进行尝试。
通常Linux下Session默认存储在/var/lib/php/session目录下。

日志文件包含

服务器的中间件、SSH等服务都有记录日志的功能,如果开启了记录日志功能,用户访问的日志都会存储到不同服务的相关文件中,如果日志文件的位置是默认位置或者是可以通过其他方法获取到,就可以通过访问日志文件将恶意代码写入到日志文件中,然后通过文件包含漏洞,包含日志中的恶意代码,获得Web服务器的权限。

无限制远程文件包含

无限制远程文件包含是指包含的文件的位置并不是在本地服务器,而是可以通过URL的形式,包含其他服务器上的文件,执行其他服务器中文件的恶意代码。

有限制远程文件包含

有限制远程文件包含漏洞是指代码中存在特定的前缀或者php、html等后缀,需要绕过前缀或者后缀,才能执行远程url中的恶意代码。通常有限制远程文件包含绕过可通过问号、#号、空格三种方式绕过。

PHP伪协议

PHP带有很多内置URL风格的封装协议,可用于类似fopen(),copy(),file_exists()和filesiz()的文件系统函数。

php://filter

php://filter是最常使用的一个伪协议,一般可以利用它进行任意文件读取。
payload:

index.php?file1=php://filter/read=convert.base64-encode/resource=file.txt
php://input

php://input可以访问请求的原始数据的只读流(即可以直接读取到POST上没有经过解析的原始数据),将post请求中的数据作为PHP代码执行。

文件包含漏洞的修复

1、通过代码层进行过滤,将包含的参数设置为白名单。
2、修改php的配置文件,将open_basedir的值设置为可以包含的特定目录。
3、修改PHP的配置文件,关闭allow_url_include可以防止远程文
件包含。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值