微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

文件包含漏洞

文章目录

文件包含漏洞

原理

服务器执行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可以防止远程文
件包含。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐