长亭百川云 - 文章详情

漏洞分析丨WordPress评论插件wpDiscuz任意文件上传

猎户攻防实验室

50

2024-07-13

本文共 791 字,预计阅读时间 4 分钟
首发于 『先知社区』

在T00ls上看到一个老哥WordPress站点被搞了,下载了Access日志分析了一下,发现攻击路径是先访问了一个页面,然后访问 /wp-admin/admin-ajax.php?action=wmuUploadFiles 后直接就Shell落地了,确定是这个模块有问题了,后来说是wpDiscuz评论插件的漏洞,看了下官网V7.0.5修复了一次安全漏洞,于是下载了一个低版本测试一下。

官方版本更新信息

漏洞分析

完成WordPress环境搭建后,手动安装wpDiscuz插件,看到文章下增加了评论模块。

环境搭建

PHPStorm导入Web目录,点击图片按钮,上传一个PHP文件测试一下,默认是上传不了的。

尝试直接上传

从入口点分析,原来是 wp_filter 处进行了过滤。

跟踪过滤函数

跟进去,可以看到上传的功能点,再进去。

分析上传功能函数

可以看到使用了 getMimeType() 方法根据文件内容获取文件类型,并不是通过文件后缀名判断,进一步根据 $mineType 判断是否是允许的上传类型。

分析文件类型判断方式

跟入查看 isAllowedFileType() 方法,在判斷 $mineType 是否存在 $this->options->content["wmuMimeTypes"] 中。

查看文件类型判断方法

进入 $options 中,可以看到 content["wmuMimeTypes"] 使用三目运算判断,搜索上下文得知,结果就是 $defaultOptions[self::TAB_CONTENT]["wmuMimeTypes"] 。

得到文件类型白名单存储位置

进入 $defaultOptions 中可以得到最终 $this->options->content["wmuMimeTypes"] 的值是几种常见的图片类型。

默认允许上传的文件类型

很明显此时文件类型已经通过 getMimeType() 方法修改为 text/plain 了,但是回到进入 isAllowedFileType() 的代码,发现程序只在此处对上传文件进行了判断后,直接保存了文件。

分析后续流程

漏洞利用

如此,程序只是根据文件内容判断文件类型,并未对文件后缀进行校验,构造一个图片马,或者手动在Webshell前面加上图片头信息即可绕过。

我们制作一个图片马,把后门文件内容追加到图片后面。

制作图片马

上传并修改后缀名为 .php ,可以看到返回路径。

成功上传

成功连接Webshell。

连接Webshell

漏洞检测

在装上wpDiscuz插件后,每篇文章中都会带有特定的标签信息,且带有版本号,可利用此特征编写脚本或者御风插件进行检测。

插件指纹信息

喜欢您来,喜欢您再来

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2