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

  • A+
所属分类:安全文章

本文共 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任意文件上传
喜欢您来,喜欢您再来

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: