• 文件包含漏洞(File Inclusion)


    简介

    执行PHP文件时,可以通过文件包含函数加载另一个文件,当服务器开启allow_url_include选项时,就可以通过php的某些特性函数,利用url去动态包含文件并解析执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。但是,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。

    文件包含相关函数

    include()
    
    require()
    
    include_once()
    
    require_once()

    include和require区别主要是,include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会直接报错并退出程序的执行。

    而include_once(),require_once()这两个函数,与前两个的不同之处在于这两个函数只包含一次,适用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,你想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。

    实验

    实验环境:phpstudy 2016(Windows+Apache+MySql+PHP5.45) + DVWA

    实验过程:

    此漏洞涉及到一个重要配置allow_url_include为on,协议包含(即可加入链接)需要配置allow_url_include为on,allow_url_include在phpstudy中是默认关闭的,需要修改配置文件php.ini

     

    靶机界面 http://169.254.16.216/DVWA/vulnerabilities/fi/?page=include.php 

     

    Low级别页面源码

     

    由源码可知此页面对调用文件未作任何过滤

    通过将page=后的参数替换即可触发文件包含漏洞

    常见的敏感信息路径有:

    Windows系统
    
    c:oot.ini // 查看系统版本
    
    c:windowssystem32inetsrvMetaBase.xml // IIS配置文件
    
    c:windows
    epairsam // 存储Windows系统初次安装的密码
    
    c:ProgramFilesmysqlmy.ini // MySQL配置
    
    c:ProgramFilesmysqldatamysqluser.MYD // MySQL root密码
    
    c:windowsphp.ini // php 配置信息
    
    Linux/Unix系统
    
    /etc/passwd // 账户信息
    
    /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 配置文件
    

    访问http://169.254.16.216/DVWA/vulnerabilities/fi/?page=etc/passwd

    发现页面返回错误

     

    进而可知此靶机位windows系统

    构造url http://169.254.16.216/DVWA/vulnerabilities/fi/?page=C:phpstudyWWW1.txt 可获取1.txt文本信息(被当作php解析)

     

    也可构造相对路径url http://169.254.16.216/DVWA/vulnerabilities/fi/?page=../../../1.txt

     

     

    Medium级别页面源码

     

     

    此等级中用到了str_replace函数将”http:// ”、”https://”、 ” ../”、”..”替换为了空字符,也就是删除,对此我们可以用双写来绕过

    构造url http://169.254.16.216/DVWA/vulnerabilities/fi/?page=..././..././..././1.txt 成功绕过

     

    绝对路径不受影响

    HIGH级别源码

     

    此级别中代码使用了fnmatch函数来检查page参数是否正确,只有page参数开头为file的才能被包含,因此我们可以利用file://伪协议来绕过

    构造url http://169.254.16.216/DVWA/vulnerabilities/fi/?page=file:///C:phpstudyWWWDVWA1.txt

     

    此外,我们还可以利用多个伪协议来实现文件包含

     

    例如,利用php://来读取文件

    构造url http://169.254.16.216/DVWA/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=C:phpstudyWWWDVWA1.txt

     

    Base64 解码得

     

    防护

    如无必要,关闭文件包含功能,及将allow_url_include参数设置为off。或者对文件包含的对象启用白名单。

  • 相关阅读:
    强大的Resharp插件
    配置SPARK 2.3.0 默认使用 PYTHON3
    python3 数据库操作
    python3 学习中的遇到一些难点
    log4j的一个模板分析
    MYSQL内连接,外连接,左连接,右连接
    rabbitmq实战记录
    领域模型分析
    分布式系统学习笔记
    阿里开发规范 注意事项
  • 原文地址:https://www.cnblogs.com/r3t7rn/p/11391037.html
Copyright © 2020-2023  润新知