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

转载3个月前发布 SanS三石
19 0 0

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

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

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

官方版本更新信息

漏洞分析
完成WordPress环境搭建后,手动安装wpDiscuz插件,看到文章下增加了评论模块。
【转载】漏洞分析丨WordPress评论插件wpDiscuz任意文件上传

环境搭建

PHPStorm导入Web目录,点击图片按钮,上传一个PHP文件测试一下,默认是上传不了的。
【转载】漏洞分析丨WordPress评论插件wpDiscuz任意文件上传

尝试直接上传

从入口点分析,原来是 wp_filter 处进行了过滤。
【转载】漏洞分析丨WordPress评论插件wpDiscuz任意文件上传

跟踪过滤函数

跟进去,可以看到上传的功能点,再进去。
【转载】漏洞分析丨WordPress评论插件wpDiscuz任意文件上传

分析上传功能函数

可以看到使用了 getMimeType() 方法根据文件内容获取文件类型,并不是通过文件后缀名判断,进一步根据 $mineType 判断是否是允许的上传类型。
【转载】漏洞分析丨WordPress评论插件wpDiscuz任意文件上传

分析文件类型判断方式

跟入查看 isAllowedFileType() 方法,在判斷 $mineType 是否存在 $this->options->content[“wmuMimeTypes”] 中。
【转载】漏洞分析丨WordPress评论插件wpDiscuz任意文件上传

查看文件类型判断方法

进入 $options 中,可以看到 content[“wmuMimeTypes”] 使用三目运算判断,搜索上下文得知,结果就是 $defaultOptions[self::TAB_CONTENT][“wmuMimeTypes”] 。
【转载】漏洞分析丨WordPress评论插件wpDiscuz任意文件上传

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

进入 $defaultOptions 中可以得到最终 $this->options->content[“wmuMimeTypes”] 的值是几种常见的图片类型。
【转载】漏洞分析丨WordPress评论插件wpDiscuz任意文件上传

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

默认允许上传的文件类型

很明显此时文件类型已经通过 getMimeType() 方法修改为 text/plain 了,但是回到进入 isAllowedFileType() 的代码,发现程序只在此处对上传文件进行了判断后,直接保存了文件。
【转载】漏洞分析丨WordPress评论插件wpDiscuz任意文件上传

分析后续流程

漏洞利用
如此,程序只是根据文件内容判断文件类型,并未对文件后缀进行校验,构造一个图片马,或者手动在Webshell前面加上图片头信息即可绕过。
我们制作一个图片马,把后门文件内容追加到图片后面。
【转载】漏洞分析丨WordPress评论插件wpDiscuz任意文件上传

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

制作图片马

上传并修改后缀名为 .php ,可以看到返回路径。
【转载】漏洞分析丨WordPress评论插件wpDiscuz任意文件上传

成功上传

成功连接Webshell。
【转载】漏洞分析丨WordPress评论插件wpDiscuz任意文件上传

连接Webshell

漏洞检测
在装上wpDiscuz插件后,每篇文章中都会带有特定的标签信息,且带有版本号,可利用此特征编写脚本或者御风插件进行检测。
【转载】漏洞分析丨WordPress评论插件wpDiscuz任意文件上传

插件指纹信息

【转载】漏洞分析丨WordPress评论插件wpDiscuz任意文件上传
喜欢您来,喜欢您再来

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...