热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ContactForm7插件中的不受限制文件上传漏洞CVE-2020-35489该怎么分析

ContactForm7插件中的不受限制文件上传漏洞CVE-2020-35489该怎么分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更

Contact Form 7插件中的不受限制文件上传漏洞CVE-2020-35489该怎么分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

漏洞概述

众所周知,Contact Form 7是一款非常受欢迎的WordPress插件。但是根据安全研究专家的最新发现,Contact Form 7中存在一个不受限制的文件上传漏洞。这个漏洞被标记为了高危漏洞,目前存在漏洞的Contact Form 7插件已经安装在了500多万个网站上,使得这些网站将成为攻击者严重的“香饽饽”。在该漏洞的帮助下,攻击者将能够对目标站点执行网络钓鱼、网站接管、数据窃取和Credit卡欺诈等攻击活动。

我们将介绍并分析该漏洞的成因,并给出针对该漏洞的概念验证PoC以及缓解方案。

Contact Form 7插件

关于该插件的信息,我们直接引用该插件官方文档给出的介绍:

Contact Form 7是一款免费的wordpress联系表单插件,简称CF7,在WP官方的插件排行榜里排名第一,也是表单插件里最受欢迎的插件之一。该插件可以管理多个联系人表单,并且可以通过简单的标记灵活地定制表单和邮件内容。

漏洞介绍

国家漏洞数据库(NVD)目前已将该漏洞标记为了CVE-2020-35489,相关漏洞描述如下:

WordPress的Contact Form 7插件(版本低于v5.3.2)将允许攻击者实现不受限制的文件上传和远程代码执行(由于文件名中可能包含特殊字符)。

  • 该插件允许WP管理员在自己的网站上创建联系人表单,网站用户可以在表单中输入相关联系信息以获取技术支持或获取反馈信息。

  • 恶意用户可以通过上传一个文件名中包含了双扩展名的文件来利用该漏洞,文件名由不可打印或特殊字符分隔,比如“说php .jpg”(\t字符是分隔符)。

  • 接下来,Contact Form 7并不会从上传文件的文件名中移除这些字符,并且会解析包含第一个扩展名在内的之前的文件名,而分隔符会导致Contact Form 7无法解析后续的扩展名。因此,最后的文件名就变成了“php”。

Contact Form 7插件中的不受限制文件上传漏洞CVE-2020-35489该怎么分析

  • 而攻击者将能够通过远程代码执行在服务器中访问或执行此文件。

关于Contact Form 7的源代码,感兴趣的同学可以点击【这里】查看托管在GitHub上的源代码。

因此,攻击者将能够利用漏洞CVE-2020–35498对目标站点产生严重的安全影响。

漏洞利用PoC

注意,我们还不能公开披露该漏洞的相关技术和利用细节,因为官方的PoC尚未发布。而且在2020年12月31日之前,我们还要给供应商和广大用户一定的时间来进行更新。

在这里,我将在本地配置一个WordPress站点,并演示如何利用该漏洞。我将使用Contact Form 7 v5.3.1版本的插件来演示该漏洞的利用方法,因为这个漏洞已在2020年12月17日发布的5.3.2版本中进行了修复。

环境配置

首先,我们需要下载、导入、安装并激活该插件:

Contact Form 7插件中的不受限制文件上传漏洞CVE-2020-35489该怎么分析

此时,Contact Form 7插件已经安装并激活陈公公了。

第二步,我们要在WordPress侧边栏中找到“Contact”标签,然后点击“Add New”按钮来创建一个新的表单。

接下来,为了进行漏洞演示,我创建了一个“Job Application Form”表单,这个表单提供了一个文件上传的功能支持。

最后,将这个表单添加至一个页面中并发布。

攻击场景

我们访问这个新建的页面,然后在表单中文件上传部分上传一个文件名为“exploit.php .jpg”的文件。

Contact Form 7插件中的不受限制文件上传漏洞CVE-2020-35489该怎么分析

我们的恶意文件此时将会被成功上传至服务器。

点击“Submit”按钮,我们将会收到服务器端返回的上传响应,表明我们的文件已经成功上传了,文件名为“exploit.php”。接下来,我们将能够通过任意代码执行在服务器中访问或执行此文件了。

文件的默认上传路径为“wp-content/uploads”,但是可以通过下列方式来修改文件上传路径(WPCF7_UPLOADS_TMP_DIR):

define( 'WPCF7_UPLOADS_TMP_DIR', '/your/file/path' );

漏洞影响

通过利用该漏洞,攻击者可以直接上传任意类型的文件,并绕过目标站点部署的上传文件类型限制,其后果可能但不限于:

  • 接管整个网站;

  • 恶意软件感染,窃取Credit卡信息,将用户重定向至恶意页面;

  • 网络钓鱼攻击;

  • 获取目标服务器文件系统和数据库信息;

  • 插入后门程序;

  • ......

漏洞缓解

进入WordPress插件功能页面中,将该插件版本更新至v5.3.2或更新版本。除此之外,我们还可以使用WordPress安全漏洞扫描器-WPSec来扫描和监控我们的WordPress站点。运行WPSec之后,我们将看到如下图所示的输出内容:

Contact Form 7插件中的不受限制文件上传漏洞CVE-2020-35489该怎么分析

实际上,类似的漏洞经常都会常出现。因此我们建议广大用户尽量定期手动对插件进行更新。除此之外,我们还应该禁止uploads文件夹内的PHP代码执行功能。如果使用的是Nginx,可以在配置文件中添加下列内容来禁用PHP代码执行功能:

location ^~ /wp-content/uploads/ {

}

对于Apache Web服务器,我们不建议通过在uploads文件夹中放置.htaccess文件来防止PHP代码执行,因为攻击者很可能会使用上述漏洞覆盖此文件。我们可以使用Apache配置文件来阻止执行,但这在共享宿主环境中可能是一个问题。同时,我们可以将AllowOverride设置为None以防止.htaccess文件覆盖设置。

关于Contact Form 7插件中的不受限制文件上传漏洞CVE-2020-35489该怎么分析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程笔记行业资讯频道了解更多相关知识。


推荐阅读
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文介绍了在Oracle数据库中创建序列时如何选择cache或nocache参数。cache参数可以提高序列的存取速度,但可能会导致序列丢失;nocache参数可以避免序列丢失,但在高并发访问时可能导致性能问题。文章详细解释了两者的区别和使用场景。 ... [详细]
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
author-avatar
大绿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有