CVE-2020-35489。在Contact Form 7插件中发现不受限制的文件上传漏洞,影响5M+网站。
在一个名为Contact Form 7的流行WordPress插件中发现了一个高严重性的不受限制的文件上传漏洞,跟踪为CVE-2020-35489,目前安装在500万+网站上,使他们容易受到攻击,如网络钓鱼,完全接管网站,数据泄露,网络钓鱼和信用卡欺诈。
在这篇博文中,我们将介绍造成该漏洞的原因、在沙箱环境下的概念验证(PoC)示例以及缓解步骤。
WordPress 5.3.2之前的contact-form-7(又名Contact Form 7)插件允许不受限制的文件上传和远程代码执行,因为文件名可能包含特殊字符。
我将用4个简单的步骤来解释这个问题。
该插件允许WP管理员在他们的网站上创建联系表格,访客可以在其中输入联系信息,如反馈或支持。
如果一个恶意用户上传了一个文件,文件名包含双扩展名,用不可打印或特殊字符分隔,例如一个名为test.php.jpg的文件(/t字符是分隔符)。
那么联系表格7不会从上传的文件名中删除特殊字符,并解析文件名直到第一个扩展名,但由于分隔符的存在,会丢弃第二个扩展名。因此,最终的文件名会变成test.php (见下图).
这个文件可以通过远程代码执行来访问或在服务器上执行。
在这里,我将做一个WordPress的本地设置来展示概念验证的开发。我将使用联系表格7 v5.3.1来展示这个漏洞,因为这个漏洞已经在2020年12月17日的5.3.2版本中被修复。
设置
1. 我们下载、导入、安装,然后激活插件。
联系表格7插件安装并激活
2. 现在我们从侧边栏进入 "联系 "选项卡,点击 "添加新的 "按钮,创建一个新的表单。
3. 在本演示中,我们将创建一个 "工作申请表",其中有一个文件上传栏,用于申请人的简历。
4. 最后将这个表单添加到一个页面中,并发布。
攻击场景
现在我们访问新创建的页面,并在文件上传字段中提交一个文件名为exploit.php.jpg的表单。
我们的恶意文件成功上传到了服务器上
点击 "提交",我们会收到来自网络服务器的肯定答复,表明该文件已成功上传为 exploit.php。这个文件可以通过任意代码执行在服务器上被访问或执行。
默认的上传路径是wp-content/uploads,但是可以通过定义WPCF7_UPLOADS_TMP_DIR来改变,比如这样。
define( 'WPCF7_UPLOADS_TMP_DIR', '/your/file/path' )。
影响
通过利用这个漏洞,攻击者可以简单地上传任何类型的文件,绕过网站上允许上传的文件类型的所有限制。其后果可能是:
接管整个网站
恶意软件注入,窃取信用卡信息,将访问者重定向到恶意网页。
通过网络钓鱼破坏网站
文件系统或数据库超载
插入类似Phpsploit的后门。
参考献文:https://blog.wpsec.com/contact-form-7-vulnerability/