此漏洞通过路径遍历和本地文件包含漏洞的组合实现WorePress核心中的远程代码执行,据漏洞发布者ripstech透露,此漏洞已在WordPress核心中存在6年以上。

权限需求

author及以上权限,相对来说,权限需求不算高,很多小型协作内容输出小社区诸如乐谱站会较为常用wordpress,而后给予普通作者author权限。

影响范围

因WordPress 4.9.9和5.0.1其他安全补丁所致,文件包含漏洞仅有5.0.0单一版本可利用,而路径遍历漏洞仍可使用且当前仍未打补丁。任何安装了此插件的WordPress站点都会错误地处理Post Meta条目,这样仍然可以进行利用。

漏洞基础

将图像上传到WordPress安装时,首先将其移动到uploads目录(wp-content/uploads)。WordPress还将创建对数据库中图像的内部引用,以跟踪元信息,例如图像的所有者或上传的时间。

该属性作为Post Meta条目存储在数据库中。这些条目中的每一个都是键/值对,分配给某个ID。譬如:

在此示例中,图像已分配给post_ID 50.倘若用户希望将来使用或编辑具有所述ID的图像,WordPress将查找匹配的_wp_attached_file条目并使用它的值以便在wp-content/uploads目录中查找该文件。

漏洞构成

本地文件包含部分

WordPress 4.9.95.0.1之前的这些Post Meta条目的问题在于可以修改任何条目并将它们设置为任意值。

当图像被更新时(例如,它的描述被改变),该edit_post()函数被调用。该函数直接作用于$_POST数组。

可以看出,可以注入任意Post Meta条目。由于未对哪些条目进行了修改,因此攻击者可以更新_wp_attached_file元条目并将其设置为任何值。这不会以任何方式重命名文件,它只会更改WordPress在尝试编辑图像时要查找的文件。这将导致稍后的路径遍历。

具体位置:

POST参数_wp_page_template在函数get_page_template_slug()中的文件wordpress / wp-includes / post-template.php的第1695行中被接收。

用户提供的数据在函数locate_template()中的文件wordpress / wp-includes / template.php的第635行连接成路径标记。

然后,在函数load_template()中的文件wordpress / wp-includes / template.php的第690行中的敏感操作require()中使用用户提供的数据进行未经过处理。

路径遍历部分

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

该函数将图像的ID带到crop($attachment_id)并从数据库中获取相应的_wp_attached_filePost Meta条目。

由于缺陷edit_post(),$src_file可以设置为任何东西。

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

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

举一个具体的例子:如果存储在_wp_attached_file Post Meta条目中的值是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(),即裁剪图像。

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

然后,WordPress通过wp_mkdir_p()(第6行)在结果路径中创建不存在的任何目录。使用save()图像编辑器对象的方法将其最终写入文件系统。该save()方法还不对给定的文件名执行路径遍历检查。

函数整体(wp-admin / includes / image.php)如是:

实现RCE

综上,可以确定哪个文件被加载到图像编辑器中(因未进行处理)。但是,如果文件不是有效图像,图像编辑器将会抛出异常。故而,只能在上传目录之外裁剪图像。

那么如果未找到所需图像,WordPress会尝试下载,这就导致了RCE。

设置_wp_attached_file为evil.jpg?shell.php,这将导致对以下URL发出HTTP请求:https://targetserver.com/wp-content/uploads/evil.jpg?shell.php。此请求将返回有效的图像文件,因为?在此上下文中忽略了所有内容。生成的文件名将是evil.jpg?shell.php。

虽说save()图像编辑器的方法不会检查是否存在路径遍历,但它会将正在加载的图像的mime类型的扩展名附加到生成的文件名中。在这种情况下,结果文件名将是evil.jpg?cropped-shell.php.jpg。这使得新创建的文件再次无害。

但是,仍可以通过使用诸如的Payload将生成的图像植入任何目录evil.jpg?/../../evil.jpg。

路径遍历 –> themes目录 LFI

每个WordPress主题只是一个位于WordPress目录中的wp-content/themes目录,并为不同的案例提供模板文件。例如,如果博客的访问者想要查看博客帖子,则WordPress会post.php在当前活动主题的目录中查找文件。如果它找到了模板,那include()就是它。

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

通常,无法访问此目录,也无法上载文件。但是,通过滥用上述Path Traversal,可以将恶意制作的图像植入当前使用的主题的目录中。然后攻击者可以创建一个新帖子并滥用相同的错误,使他能够更新_wp_attached_file Post Meta条目以便include()映像。通过将PHP代码注入映像,攻击者可以获得任意远程执行代码。

Payload制作—-Imagick

WordPress支持PHP的两个图像编辑扩展:GD(https://libgd.github.io/)和Imagick(https://www.imagemagick.org/)。它们之间的区别在于Imagick不会删除图像的exif元数据,其中可以存储PHP代码。

总结

WordPress 5.0.0 RCE 条件较为苛刻,但毕竟是RCE,一旦被利用危害巨大。况且,虽说仅这一小版本的本地文件包含可协同目录遍历完成RCE,但因为这目录遍历漏洞至今未修,一旦用户安装允许覆盖任何Post data的插件,这RCE依然可被利用。

参考

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

https://wordpress.org/download/

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-6977

wordpress漏洞_技术派 | 漏洞分析:WordPress 5.0 RCE(CVE-2019-6977)相关推荐

  1. openssh漏洞_技术干货 | OpenSSH命令注入漏洞复现(CVE202015778)

    本公众号发布的文章均转载自互联网或经作者投稿授权的原创,文末已注明出处,其内容和图片版权归原网站或作者本人所有,并不代表安全+的观点,若有无意侵权或转载不当之处请联系我们处理,谢谢合作! 欢迎各位添加 ...

  2. 赏金猎人漏洞_如何获得漏洞赏金

    赏金猎人漏洞 Bug bounties are a great way to gain experience in cybersecurity and earn some extra bucks. 错 ...

  3. wordpress插件_深入了解:高级WordPress插件

    随着WordPress的发布,它是开源平台的第三次(第三次)主要迭代,我们已经看到越来越多的开发人员蜂拥而至, 大规模发布了插件. 尽管插件的免费选项似乎层出不穷,但是有些软件公司以非常实惠的价格提供 ...

  4. rmi远程代码执行漏洞_【最新漏洞简讯】WebLogic远程代码执行漏洞 (CVE202014645)

    ↑ 点击上方"SecMind安全管家"关注我们 情报编号:W1120200715 漏洞概述 WebLogic是Oracle公司出品的用于开发.集成.部署和管理大型分布式Web应用. ...

  5. tomcat ajp协议安全限制绕过漏洞_国家信息安全漏洞共享平台发布Apache Tomcat漏洞安全公告...

    2月22日消息 国家信息安全漏洞共享平台(CNVD)近日发布了一份关于 Apache Tomcat 存在文件包含漏洞的安全公告,具体如下: 安全公告编号:CNTA-2020-0004 2020 年 1 ...

  6. 缓冲区溢出漏洞_缓冲区溢出漏洞简介

    缓冲区溢出漏洞 重点 (Top highlight) 缓冲 (Buffer) A buffer is a temporary storage, usually present in the physi ...

  7. url存在宽字节跨站漏洞_【XSS漏洞】XSS漏洞相关总结v1.0

    点击上方"公众号" 可以订阅哦! Hello,各位小伙伴周五晚上好~ 终于到了XSS漏洞的完结篇啦~~ 感觉本公众号写的最多的就是XSS,现在可以告一段落了... 让我们来看看第一 ...

  8. python编程代码执行漏洞_代码执行漏洞 - 安全先师的个人空间 - OSCHINA - 中文开源技术交流社区...

    0x00 前言 最近发现的一个新站,不妨试试手. 0x01 基础信息 漏洞点:tp5 method 代码执行,payload如下 POST /?s=captcha_method=__construct ...

  9. 存在弱口令漏洞_【安全漏洞通告】secnet安网的AC集中管理平台存在弱口令漏洞...

    安全漏洞通告 INFORMATION secnet安网的AC集中管理平台存在弱口令漏洞 01 漏洞背景 广州安网通信技术有限公司(简称"安网通信")是一家提供网络安全设备,网络通讯 ...

最新文章

  1. Notepad++使用技法
  2. 【原创】linux 批量清空文本内容
  3. linux模块加载和模块卸载时出现的问题
  4. 语言之输出png图片_什么是PPML?如何输出PPML文档?
  5. Java番外篇1——正则表达式
  6. Python字典(Dictionary)的setdefault()方法的详解,字典中的赋值技巧
  7. 消息中间件—Kafka 的设计思想
  8. laravel自动建mysql索引_让 Laravel 优雅地创建 MySQL 全文索引
  9. 【MySQL】MySQL 8 PROCEDURE ANALYSE命令使用
  10. Hadoop企业级集群架构 - hadoop安装
  11. Mitchell Baker:担任 Mozilla CEO 是我最艰难的职业
  12. 程序员惊魂 12 小时:“���”引发线上事故
  13. select设置text的值选中(兼容ios和Android)基于jquery
  14. Poj(1274),二分图匹配
  15. 2021-05-22 Android 网络性能测试工具iperf详细使用方法
  16. 马哥linux脚本,马哥全套linux运维教程
  17. Swingbench 博客合集
  18. 【STL学习指南】STL的入门学习指南
  19. java 自动论坛评论,Java论坛系统巡云轻论坛
  20. 微信公众号开发教程[010]-消息管理-获取公众号的自动回复规则

热门文章

  1. 科普| 3D视觉技术正在改变我们的生活
  2. 为什么U-Net在医学图像上表现优越?
  3. 强烈安利!这个私藏已久的神器!
  4. 【OpenCV 4开发详解】图像透视变换
  5. PB 级数据处理挑战,Kubernetes如何助力基因分析?
  6. (十二)企业级java springcloud b2bc商城系统开源源码二次开发-断路器监控(Hystrix Dashboard)...
  7. 服务器性能估算参考(硬件-分析数据库)
  8. 区块链共识机制及其迭代
  9. 如何用 Python 和 Flask 建立部署一个 Facebook Messenger 机器人
  10. 在ActivMQ中添加jmx监控