术语
WordPress
WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。截至2018年4月,排名前1000万的网站中超过30.6%使 用WordPress。WordPress是最受欢迎的网站内容管理系统。全球有大约30%的网站都是使用WordPress架设网站的。
REST API
REST API 也称为 RESTful API,是遵循 REST 架构规范的应用编程接口。REST 是表述性状态传递的英文缩写。
代码注入
PHP 代码执行(注入)(Web 方面)是指应用程序过滤不严,用户可以通过请求将代码注入到应用中执行。
代码执行(注入)类似于SQL 注入漏洞,SQLi 是将SQL 语句注入到数据库中执行,而代码执行则是可以把代码注入到应用中最终由服务器运行它。
这样的漏洞如果没有特殊的过滤,相当于直接有一个Web 后门的存在。
Loco Translate
Loco Translate 提供 WordPress 翻译文件的浏览器内编辑以及与自动翻译服务的集成。
它还为开发人员提供了Gettext/本地化工具,例如提取字符串和生成模板。Loco Translate在WordPress拥有1百万+的用户量。
利用条件
该漏洞的利用条件需要满足以下两个需求其中之一即可:
- Loco Translate(< 2.5.4)
- 有一个可以访问编辑Loco Translate 翻译的权限
POC
添加新配置
结果验证
http://wp.local:8888/123.php
漏洞分析
查看该插件的readme.txt发现,在最新的2.5.4的版本中修复了以下几个问题。
* Enforcing safe file extensions for new templates
* Added filters loco_po_headers and loco_pot_headers
* Bumped WordPress version to 5.8.1
然后使用svn将官方仓库克隆下来本地
svn checkout https://plugins.svn.wordpress.org/loco-translate/
使用工具对目录进行diff后发现改动的文件不是很多,如下图
在loco-translate/loco-translate/tags/2.5.3/src/ajax/XgettextController.php
以及loco-translate/loco-translate/tags/2.5.3/src/fs/FileWriter.php
文件中对比最新版发现,新增一段后缀判断的代码,
这两段代码都加强了对后缀的验证。由此可推出在旧版本中,对于该路由所对应的操作,并没有进行后缀校验。
在WordPress中安装插件后,发现进入该路由的操作是创建模板。
使用burp将其包抓下来,将name改为php文件,即可在wp-content/languages/
目录下成功创建php文件,但是此时创建的文件里面没有php代码,因此无法执行。
通过查看po文件发现,该插件会将相关的Project等一些信息写入进去,比如Project Name
那么只需要在创建前更改Project Name
为恶意代码,即可成功写入php代码。
那么接下来完整利用如下:
1、访问插件面板Loco Translate > WordPres > Advanced
,点击最下面的Add set
添加一个新的区块设置。
内容如下图
然后点击Save config
保存即可。
2、创建template
点击Loco Translate > WordPres > Overview
中上一步新建配置中的Create Template
点击创建模板按钮,即可在根目录(第一步中填写的路径下)生成php文件。
3、访问php文件验证
http://wp.local:8888/123.php
修复建议
- 尽快更新至2.5.4(包括2.5.4)以上版本
- 严格控制使用该插件的用户
- 服务器定期进行webshell扫描
免责声明
本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。禁止用于任何非法用途。如有任何人凭此做何非法事情,均于笔者无关,特此声明。