wordpress php执行短代码_【漏洞预警】WordPress 5.0.0远程代码执行漏洞

news/2024/7/5 18:13:32

在2019年2月19日,国外安全人员在博客中的披露了一则Wordpress 5.0.0版本远程代码执行漏洞。

该漏洞本质上是由一个目录遍历漏洞以及一个本地文件包含漏洞组合利用而导致的一个远程代码执行漏洞。

当攻击者获取到WordPress站点具有一定访问权限的账户后,即可利用该漏洞在底层服务器上执行任意PHP代码,从而实现完全远程接管服务器的目的。

深信服安全团队第一时间响应并发布预警信息,并将持续跟踪事态进展。

漏洞名称

WordPress 5.0.0远程代码执行漏洞

威胁等级

高危

影响范围

WordPress 5.0.0

漏洞类型

代码执行

利用难度

困难

千里百科-WordPress组件介绍

WordPress是使用PHP语言开发的CMS系统,是网络上最受欢迎的CMS之一,也是一款个人博客系统。根据w3tech的资料显示,约有30%的网站在使用它,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站或者使用自己的博客。

WordPress官方支持中文版,同时有爱好者开发的第三方中文语言包,如wopus中文语言包。WordPress拥有成千上万个各式插件和不计其数的主题模板样式。

漏洞描述

WordPress 5.0.0远程代码执行漏洞产生的背景是利用WordPress文件上传的一个特性。当WordPress上传一张图片时,首先这张图片会被放置到uploads目录下(wp-content/uploads),同时WordPress还将创建对数据库中图像的内部应用,以来跟踪上传文件的源信息,例如图像的上传时间或者图像的所有者。该源信息将会被作为“Post Meta”条目存储在数据库中。这些信息都被保存在wp_postmeta表中,数据是以键值对形式保存。如下图:

d1d1f88c0d2d84af407e9cebae2168a3.png

如果之后用户需要修改或者使用对应ID的文件,WordPress将查找匹配的_wp_attached_file源条目并使用它的值以便在wp-content/uploads目录中查找到该文件。

该漏洞通过对Post Meta条目的路径遍历以及利用WordPress主题库进行本地文件包含,最终覆盖掉一个特定的Post Meta条目,可以实现将原本文件的Post Meta绑定到一个恶意文件上,导致远程代码执行漏洞。

漏洞分析

1. 漏洞核心原理-“Post Meta”的条目可以被覆盖

在WordPress 4.9.9 之前的版本以及WordPress  5.0.1之前的版本,WordPress文件上传产生的Post Meta的所有条目皆可被修改,并且他们的value值可以任意重置。当一张图片被更新的时候,将会调用/wp-admin/include/post.php中的edit_post()函数。

79db11f95d5cbd969916ef4894618f5c.png

我们可以通过edit_post()函数向数据库注入任意Post Meta条目。由于系统未对Post Meta条目的修改进行检测,因此攻击者可以更新_wp_attached_file元条目并将其设置为任何值。这不会重命名任何文件,它只会更改WordPress在编辑图像时要查找的文件。这一点将导致稍后的路径遍历。

2. 通过修改“Post Meta”的来实现路径遍历

路径遍历发生在用户裁剪图像时调用的wp_crop_image()函数中。

718afbd407c02bab3fc000322c56fb1f.png

该函数将图像的ID带到crop($attachment_id)中,并从数据库中获取相应的Post Meta条目_wp_attached_file的值。由于之前edit_post()存在的缺陷,$src_file可以设置为任何值。由于缺陷edit_post(),$src_file可以设置为任何值。

在下一步中,WordPress必须确保图像实际存在并加载它。WordPress有两种加载给定图像的方法。第一种是简单地查找目录中Post Meta条目中_wp_attached_file提供的文件名wp-content/uploads。

如果该方法失败,WordPress将尝试从其自己的服务器下载图像作为后备。为此,它将生成一个下载URL,该URL包含wp-content/uploads目录的URL 和存储在Post Meta条目中_wp_attached_file的文件名。

举一个具体的例子:如果存储在Post Meta条目中_wp_attached_file 的值是evil.jpg,那么WordPress将首先尝试检查文件wp-content/uploads/evil.jpg是否存在。

如果没有,它会尝试从以下URL下载文件:

https://targetserver.com/wp-content/uploads/evil.jpg

尝试下载图像而不是在本地查找图像的原因是某些插件在访问URL时会动态生成图像。

WordPress将简单地将上传目录和URL与$src_file的用户输入连接起来。一旦WordPress成功加载了有效图像wp_get_image_editor(),它将裁剪图像。

裁剪结束后,WordPress会将裁剪后的图像保存回文件系统(无论是否下载)。生成的文件名将是$src_file由get_post_meta()攻击者控制的返回文件。对结果文件名字符串进行的唯一修改是在文件的基本名称加前缀cropped-。为了遵循示例evil.jpg,生成的文件名将是cropped-evil.jpg。

822fae7aa697ba0eb2219427ac95d065.png

然后,WordPress通过wp_mkdir_p()在结果路径中创建不存在的任何目录。

最后使用save()方法将其最终写入文件系统。该save()方法还不对给定的文件名执行路径遍历检查。

3. 最终利用本地文件包含来实现远程代码执行

根据之前的路径遍历,我们可以利用主题系统的本地文件包含来最终实现远程代码执行。每个WordPress主题只是一个位于WordPress目录中的wp-content/themes目录,为不同的案例提供模板文件。例如,如果博客的访问者想要查看博客帖子,则WordPress会在当前活动主题的目录中查找一个post.php文件。如果它找到了对应模板,那将包含该模板。

为了添加额外的自定义层,可以为某些帖子选择自定义模板。为此,用户必须将数据库中的Post Meta条目的_wp_page_template设置为自定义文件名。这里唯一的限制是要包含的文件必须位于当前活动主题的目录中。

通常,用户对于当前活动主题的目录无法访问此目录,也无法上传该文件。但是,通过使用上述路径遍历,就可以将恶意制作的图像植入当前使用的主题的目录中。然后攻击者可以创建一个新帖子也使用上述的路径遍历错误,最终能够够更新 Post Meta条目中的_wp_attached_file,以便可以包含该图片。通过将PHP代码注入图片,攻击者就可以远程执行任意代码。

影响范围

目前据统计,在全球范围内对互联网开放Wordpress网站的资产数量多达12833569台,其中归属中国地区的受影响资产数量为18万以上。

目前受影响的WordPress版本:

Wordpress 5.0.0

修复建议

Wordpress官方已经在 WordPress 5.0.1更新了安全补丁,用户可以更新至WordPress 5.0.1之后的版本:

https://wordpress.org/download/

深信服解决方案

国外安全已成功复现此漏洞,但未公开此漏洞攻击PoC,千里目安全实验室将持续关注此次漏洞进展。

该漏洞利用需要利用目录穿越漏洞,深信服下一代防火墙可轻松防御此漏洞, 建议部署深信服下一代防火墙的用户开启安全防护规则,可轻松抵御此高危风险。

深信服云盾已第一时间从云端自动更新防护规则,云盾用户无需操作,即可轻松、快速防御此高危风险。

参考链接

https://blog.ripstech.com/2019/wordpress-image-remote-code-execution/

时间轴

2019/2/19

国外研究人员通过博客披露了WordPress 5.0.0远程代码执行漏洞

2019/02/20

深信服千里目安全实验室翻译并发布漏洞预警


http://www.niftyadmin.cn/n/3661071.html

相关文章

Linux作业管理,Linux作业管理

1、前台作业与后台作业(1)概念前台作业:通过终端启动,并且在启动后一直占据终端。后台作业:启动时与终端无关,或者通过终端启动后转入后台运行(即释放终端),不影响用户继续在终端中工作。(2)如何将前台作业转入后台正在…

[转载]《越狱》第二季过后,剧情跌宕起伏,各角色们的命运也各有不同,现公布如下

[转载] 主角麦克 来到了法国,从事了足球事业,化名“齐达内” 并且出了书 在2006年德国世界杯上上演了铁头功 后来来到了中国,代言了一款保健品 主角的哥哥林垦 和弟弟一样,也来到了法国,也从事了足球事业,…

服务器banner是什么_选择网站建设公司应该注意什么?

近期有不少客户咨询我们时都问了同样的问题:“南京网站建设这块真的好复杂,什么价格都有,从几百到几万,到底应该怎么选择网站建设公司呢?”其实从价格角度来说,我们在《建设一个企业网站需要多少钱呢&#…

单片机c语言左移的作用,单片机c语言中的左移右移

// 据说有些编译器采用逻辑右移,即左端补0结果:a 0xe3 (11100011)1当左移移出的是“1”而不是0时,你该怎么想?2 当左移的操作数是一个sign型是,你该怎么想?3 在单片机中和在C语言中是完全一样的吗&#xf…

linux获取音频长度,JAVE2获取视频时长、音频时长

jave当前的版本太旧了 很久没有更新了,而且关键的是maven库中无法使用,偶然间看到github上出现了jave2.0,https://github.com/a-schild/jave2我本地使用的2.4.6ws.schildjave-all-deps2.4.6官网已经更新到了2.5.0然后就可以使用了吗?可以是可…

低代码开发平台_低代码开发平台为什么火了?

“ 对于toB市场的软件服务商而言,中大型客户是块肥肉,好不容易把软件卖给客户,为什么这些大项目延期、超过预算、不能满足需求而失败呢?能够怪个性化定制太多吗?能够怪客户需求总变吗?能够怪技术人员不能对…

c语言字母转换10进制,用c语言写一个函数把十进制转换成十六进制

用c语言写一个函数把十进制转换成十六进制网上找到一些,感觉有占乱#include “stdio.h”int main(){int num0;int a[100];int i0;int m0;int yushu;char hex[16]{“”0″”,””1″”,””2″”,””3″”,””4″”,””5″”,””6″”,””7″”,””8″”,””9…

python汇编语言还是机器语言_深入理解计算机系统(3.1)------汇编语言和机器语言...

《深入理解计算机系统》第三章——程序的机器级表示。作者首先讲解了汇编代码和机器代码的关系,阐述了汇编承上启下的作用;接着从机器语言IA32着手,分别讲述了如何存储数据、如何访问数据、如何完成运算以及如何进行跳转。通过这些步骤&#…