术语

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扫描

免责声明

本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。禁止用于任何非法用途。如有任何人凭此做何非法事情,均于笔者无关,特此声明。
最后修改:2021 年 11 月 22 日
如果觉得我的文章对你有用,请随意赞赏