0x00 综述

2018628日,国外安全研究组织rips团队发布了一篇WordPress任意文件删除到代码执行的漏洞文章,文章中指出攻击者可以利用此漏洞删除任意文件,比如删除WordPress建站配置文件wp-config.php,通过删除此文件可导致界面进入网站安装页面,通过重装网站后进入管理员后台即可获取网站shell从而控制WordPress网站,故该漏洞的危害很大。唯一缺陷就是需要攻击者拥有操作多媒体文件的功能,一般作者权限就可以触发漏洞。

攻击难度:中。

危害程度:高。

影响的版本: ≤4.9.6


0x01 技术分析

在文件/wp-admin/posts.php中,当编辑附件时有如下代码:

1111.png

首先通过wp_get_attachment_metadata函数获取当前post_id对应内容的metadata信息,也就是数据库表wp_postmeta中的信息,然后给metadata信息中添加一个thumb的内容,这个thumb的内容通过POST直接传递,没有经过处理,最后更新metadata的信息。


然后在删除媒体内容时,有如下代码:

222222.png

当前用户有删除内容的权限时,调用了wp_delete_attachment函数,这里的post_type认就是attachment


然后跟进wp_delete_attachment函数,在文件/wp-includes/post.php

333333.png

跟进次函数:

4444.png

同样首先通过wp_get_attachment_metadata函数获取post_id对应内容的metadata信息,然后当thumb不为空时,到最后unlink文件:

55555555.png

meta[thumb]thumbfile,再从thumbfile进入unlink函数,没有对文件进行过滤处理,导致直接删除文件。 

通过上面的分析,我们首先通过修改媒体文件,给thumb赋值为你想删除的文件,然后再删除此媒体文件,既可以删除任意文件。


0x02 漏洞验证

首先我们注册一个author的作者权限用户,登陆后添加媒体文件,再编辑文件

666666666.png


并且找到修改图像时的wpnonce

然后发送修改图像的请求,这里我们在网站根目录下新建了一个111111文件,然后修改要删除的文件为111111

7777777777.png

此时已经修改图像,并且图像的metadatathumb的内容就是../../../../111111文件路径。


然后我们在删除该文件,首先找到删除文件时的wpnonce

8888888888.png


最后直接发送删除请求:

http://localhost/wordpress-4.7.4/wp-admin/post.php?post=12&action=delete&_wpnonce=d85e71ffa9

同下断点可以看到这里删除的具体文件:

999999999.png

最后成功删除我们新建的111111文件。

那么删除wp-config.php文件同理。

 

0x03 防护方案

目前官方没有提供修复方案,这里给出临时修复方案。

/wp-admin/post.php中,当修改图像文件时,在wp_update_attachment_metadata更新metadata时对传入的thumb文件进行处理,如图:

10000000000.png

0x04 参考链接

https://blog.ripstech.com/2018/wordpress-file-delete-to-code-execution/

安全脉搏翻译链接:https://www.secpulse.com/archives/73019.html

作者: 逢魔安全实验室