行业知识
文件包含漏洞全面详解
文件包含漏洞总结
- 一、什么是文件包含漏洞
- 二、本地文件包含漏洞(LFI)
- 三、LFI漏洞利用技巧
- 1.配合文件上传使用
- 2.包含Apache日志文件
- 3.包含SESSION文件
- 4.包含临时文件
- 四、远程文件包含(RFI)
- 五、PHP伪协议
- 1.file://协议
- 2.php://协议
- 3.ZIP://协议
- 4.data://协议
- 5.伪协议利用条件
- 六、文件包含漏洞防护
一、什么是文件包含漏洞
1.文件包含漏洞概述
和SQL注入等攻击方式一样,文件包含漏洞也是一种注入型漏洞,其本质就是输入一段用户能够控制的脚本或者代码,并让服务端执行。
什么叫包含呢?以PHP为例,我们常常把可重复使用的函数写入到单个文件中,在使用该函数时,直接调用此文件,而无需再次编写函数,这一过程叫做包含。
有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。
以PHP为例,常用的文件包含函数有以下四种
include(),require(),include_once(),require_once()
区别如下:
- require():找不到被包含的文件会产生致命错误,并停止脚本运行
- include():找不到被包含的文件只会产生警告,脚本继续执行
- require_once()与require()类似:唯一的区别是如果该文件的代码已经被包含,则不会再次包含
- include_once()与include()类似:唯一的区别是如果该文件的代码已经被包含,则不会再次包含
2.漏洞成因分析
我们先直接来看一个简单的例子,网页代码如下:
在创建一个phpinfo.php页面,代码如下:
利用文件包含,我们通过include函数来执行phpinfo.php页面,成功解析
将phpinfo.php文件后缀改为txt后进行访问,依然可以解析:
将phpinfo.php文件后缀改为jpg格式,也可以解析:
可以看出,include()函数并不在意被包含的文件是什么类型,只要有php代码,都会被解析出来。
在上一期的文件上传漏洞的总结中,我们上传了一个jpg格式的一句话木马,如果网站有文件包含漏洞,jpg文件就可以被当做php文件解析,所以这就是文件上传漏洞通常配合文件上传使用。
现在我们将phpinfo.jpg的内容改成一段文字:hello world!
再次进行访问,可以读出文本内容
利用这个特性,我们可以读取一下包含敏感信息的文件。
二、本地文件包含漏洞(LFI)
能够打开并包含本地文件的漏洞,我们称为本地文件包含漏洞(LFI)
测试网页包含如下代码:
网站利用文件包含功能读取一些php文件,例如phpinfo:
利用该代码,我们可以读取一些系统本地的敏感信息。
例如:C:\Windows\system.ini文件。
(1)使用绝对路径
使用绝对路径直接读取:
(2)使用相对路径进行读取
通过./表示当前位置路径,…/表示上一级路径位置,在linux中同样适用。
例如当前页面所在路径为C:\Apache24\htdocs\,我们需要使用…/退到C盘再进行访问,构造路径如下:
../../windows/system.ini
由于我的环境搭建在D盘,所以这里就不做演示了。
(3)一些常见的敏感目录信息路径:
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/Unix系统:
- /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配置文件
三、LFI漏洞利用技巧
1.配合文件上传使用
有时候我们找不到文件上传漏洞,无法上传webshell,可以先上传一个图片格式的webshell到服务器,再利用本地文件包含漏洞进行解析。
以DVWA平台为例,将Security Level选择low,编辑一个图片马,内容如下:
上一篇:服务器里怎么拷贝文件?