文件包含漏洞
什么是文件包含漏洞:
文件包含漏洞的概念:
文件包含漏洞是一种注入型漏洞,本质上是输入一段用户能够控制的脚本或者代码,并让服务端执行。
为什么有文件包含漏洞:
我们在开发时常常把可重复使用的函数写入到单个文件中,在使用该函数时,直接调用此文件,而无需再次编写函数,这一过程叫做包含。
由于网站功能需求,用户可以选择要包含的文件,而开发者没有对包含的文件进行安全考虑,导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。
文件包含函数;
include、require、include_once、require_once、highlight_file、show_source、file_get_contents、fopen、file、readfile
- include():找不到被包含的文件只会产生警告,脚本继续执行。载入成功,返回1,否则返回false
- require():找不到被包含的文件会产生致命错误,并停止脚本运行。载入成功为1,失败则不返回。
- include_once():如果该文件的代码已经被包含则不会再次包含。
- require_once():如果该文件的代码已经被包含则不会再次包含。
- highlight_file():对文件进行语法高亮显示。成功返回true,否则返回false
- show_source():该函数是highlight_file函数的别名
- file_get_contents():把整个文件读入一个字符串当中
- file():把整个文件读入一个数组中,将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行包括换行符在内。失败则返回false
文件漏洞包含:
一、本地文件包含漏洞(LFI)
-
概念:能够打开并包含本地文件的漏洞
-
常见的敏感目录信息路径:
windows:
C:\boot.ini //查看系统版本
C:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件
C:\windows\repair\sam //存储Windows系统初次安装的密码
C:\ProgramFiles\mysql\my.ini //Mysql配置
C:\ProgramFiles\mysql\data\mysql\user.MYD //MySQL root密码
C:\windows\php.ini //php配置信息
linux:/etc/password //账户信息
/etc/shadow //账户密码信息
/usr/local/app/apache2/conf/httpd.conf //Apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhost.conf //虚拟网站配置
/usr/local/app/php5/lib/php.ini //PHP相关配置
/etc/httpd/conf/httpd.conf //Apache配置文件
/etc/my.conf //mysql配置文件
二、远程文件包含漏洞(RFI)
-
概念:如果PHP的配置选项
allow_url_include
、allow_url_fopen
状态为ON的话,则include/require函数是可以加载远程文件的 -
allow_url_fopen参数(只影响RFI,不影响LFI)
简介:是否允许将URL(HTTP,HTTPS等)作为文件打开处理
-
allow_url_include参数(只影响RFI,不影响LFI)
简介:是否允许includeI()和require()函数包含URL(HTTP,HTTPS)作为文件处理
php伪协议
PHP伪协议事实上就是支持的协议与封装协议
- file:// 访问本地文件系统
- http:// 访问 HTTPs 网址
- ftp:// 访问 ftp URL
- php:// 访问输入输出流
- zlib:// 压缩流
- data:// 数据
- ssh2:// security shell2
- expect:// 处理交互式的流
- glob:// 查找匹配的文件路径
例子
swpuctf 2021新生赛-include
base64解码后得出结果