struts2 ajax上传文件 file空_WordPress插件漏洞分析:WPDiscuz任意文件上传漏洞
写在前面的话
就在不久之前,Wordfence的威胁情报团队在一款名叫wpDiscuz的Wordpress评论插件中发现了一个高危漏洞,而这款插件目前已有超过80000个网站在使用了。这个漏洞将允许未经认证的攻击者在目标站点中上传任意文件,其中也包括PHP文件,该漏洞甚至还允许攻击者在目标站点的服务器中实现远程代码执行。
漏洞简述
漏洞描述:任意文件上传
受影响插件:评论插件– wpDiscuz
受影响版本:7.0.0 – 7.0.4
CVSS评分: 10.0 (严重)
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
修复版本:7.0.5
一直以来,WordPress自带的评论功能都是非常简单基础的,不能够满足对评论互动比较重视的网站。wpDiscuz是一款非常好用的WordPress评论增强插件,并且提供了自定义评论表单和字段的AJAX实时评论系统,旨在增强WordPress内置评论功能。在该插件的7.x.x版本中,wpDiscuz新增了在评论中上传图片附件的功能,但不幸的是,该功能的实现缺乏安全保护,从而导致了该漏洞的出现。
wpDiscuz的评论只允许用户上传图片附件,但由于其使用的文件MIME类型检测函数没有对文件类型进行正确验证,因此未经身份验证的用户将能够上传任何类型的文件,其中也包括PHP文件。
检查文件MIME类型
getMimeType函数使用了三种不同的方法来检测一个文件的MIME类型。第一个方法为mime_content_type,它能够根据文件的内容来判断文件类型。如果PHP函数无法使用,它将会使用finfo_file方法,这个方法同样能够根据文件的内容来判断文件类型。最后,如果这个方法仍然无法使用的话,它将会使用wp_check_filetype方法,这个方法是WordPress指定的文件类型检测方法,它能够根据文件名来检测文件的MIME类型,并于内置的文件类型白名单列表进行匹配。
从字节角度来看,大多数文件的起始字节都是一些特定的签名,我们可以通过这些字节来判断文件的MIME类型。但是,PHP在处理文件时,会忽略<?php标签前面的所有内容 。因此,前两个检测函数所使用的方法就可以通过添加图片类型的签名字节来绕过了。比如说,用户可以在PHP文件的开头加入png文件的签名字节,比如说“89 50 4E 47 0D 0A 1A 0A”,这样就能绕过前两个检测函数了。
foreach ($files as $file) {
$error = false;
$extension = pathinfo($file["name"], PATHINFO_EXTENSION);
$mimeType = $this->getMimeType($file, $extension);
private function getMimeType($file, $extension) {
$mimeType = "";
if (function_exists("mime_content_type")) {
$mimeType = mime_content_type($file["tmp_name"]);
} elseif (function_exists("finfo_open") && function_exists("finfo_file")) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $file["tmp_name"]);
} elseif ($extension) {
$matches = wp_check_filetype($file["name"], $this->options->content["wmuMimeTypes"]);
$mimeType = empty($matches["type"]) ? "" : $matches["type"];
}
return $mimeType;
}
验证允许的文件类型
isAllowedFileType函数导致这个漏洞更加严重了,这个函数能够使用getMimeType函数来检测目标文件是否属于允许上传的文件类型。由于这个函数是根据文件内容来判断文件MIME类型的,所以绕过该函数的检测并非难事。
private function isAllowedFileType($mimeType) {
$isAllowed = false;
if (!empty($this->options->content["wmuMimeTypes"]) && is_array($this->options->content["wmuMimeTypes"])) {
$isAllowed = in_array($mimeType, $this->options->content["wmuMimeTypes"]);
}
return $isAllowed;
}
漏洞利用
这也就意味着,攻击者将能够创建任意文件类型,并添加图形文件标识字节,这样就能够绕过文件内容验证检测了。如果想要利用一个PHP文件来绕过检测的话,请求的大致内容应该如下:
------WebKitFormBoundaryXPeRFAXCS9qPc2sB
Content-Disposition: form-data; name="wmu_files[0]"; filename="myphpfile.php"
Content-Type: application/php
‰PNG
文件路径地址会在请求的响应内容中返回,这样用户将能够获取到文件的地址,并访问上传到服务器中的文件。因此,攻击者将能够上传任意PHP文件,并通过访问这些文件来实现在服务器端的任意代码执行。
一旦成功利用该漏洞,攻击者将能够在目标服务器上执行任意代码,遍历目标用户的托管账号,从而利用恶意代码进一步感染该账户中托管的其他站点。
总结
在这篇文章中,我们对wpDiscuz插件中的一个高危漏洞进行了详细分析,并介绍了漏洞的利用方法。目前,该漏洞已在wpDiscuz的7.0.5版本中完全修复,因此我们建议广大用户立刻将wpDiscuz插件更新至最新版本。
精彩推荐
struts2 ajax上传文件 file空_WordPress插件漏洞分析:WPDiscuz任意文件上传漏洞相关推荐
- wsgiserver python 漏洞_新型任意文件读取漏洞的研究
0x00 前言 早前发现boooom在乌云上发了很多个任意文件读取的漏洞,都是形如 http://target/../../../../etc/passwd 这样.当时感觉很新奇,因为正常情况下,通常 ...
- 详细分析 Sonlogger 任意文件上传漏洞 (CVE-2021-27964)
聚焦源代码安全,网罗国内外最新资讯! 概述 Sonlogger 是土耳其SFC 公司 开发的一款应用软件,兼容土耳其<第5651号法>,是一款基于 Web 的 SonicWall 防火墙 ...
- 导入php插件_漏洞分析丨WordPress评论插件wpDiscuz任意文件上传
本文共 791 字,预计阅读时间 4 分钟 首发于 『先知社区』 在T00ls上看到一个老哥WordPress站点被搞了,下载了Access日志分析了一下,发现攻击路径是先访问了一个页面,然后访问 / ...
- 最新系统漏洞--Victor CMS任意文件上传漏洞
最新系统漏洞2021年11月25日 受影响系统: Victor CMS Victor CMS 1.0 描述: Victor CMS是尼日利亚Victor Alagwu软件开发者的一套开源的内容管理系统 ...
- php任意文件删除漏洞,phpshe后台任意文件删除漏洞及getshell | CN-SEC 中文网
摘要 phpshe是一个开源商城程序,程序在前台入库的地方都用了pe_dbhold函数(mysql_real_escape_string,htmlspecialchars过滤),虽然用的是全局变量注册 ...
- Youke365_2_4 一处Sql注入漏洞以及一处任意文件删除
本文作者:X_Al3r Prat 0 自白 每一天都是新的一天. 没啥吐槽的,步入正题 /system/category.php 文件一处Sql注入## 80-87行代码 $root_id = int ...
- java jackson漏洞_CVE-2019-12086 jackson任意文件读取漏洞
漏洞说明 CVE-2019-12086:在2.9.9之前的FasterXML jackson-databind 2.x中发现了漏洞.在开启Default Typing的情况下,且classpath中存 ...
- 任意文件读取linux,Symphony 1.4.20服务器任意文件读取漏洞
发布日期:2012-11-26 更新日期:2012-11-28 受影响系统: Symphony Symphony < 1.4.20 Symphony Symphony 描述: --------- ...
- kingcms php 漏洞,kingcms任意php文件删除(可截断时升级为任意文件删除 )
### 简要描述: 设计不当导致任意php文件删除 ### 详细说明: 漏洞文件:global.php 好像是所有php文件都会调用该文件,该文件如下代码 ``` //当cache_path值被提交过 ...
最新文章
- 第二节 数学基础与语言学基础
- 一万年太久,只争朝夕
- 苹果微信更新不了最新版本_微信版本又双叒叕更新了,这个功能正式下线
- C#中接口和方法的运用(Fourteenth Day)
- 5、Linux系统的目录结构
- 天平称重【递归解法】
- 牛客网【每日一题】5月15日题目 储物点的距离
- 【转】算法导论学习笔记 一 分治算法
- ANDROID开机动画分析
- IOS使用pods初次加载出现Pods-resources.sh: Permission denied错误的解决方案
- 计算机网络原理(谢希仁第八版)第一章课后习题答案
- java整型转换成字符串_java整型转换成字符串
- 《宗教与科学》——罗素 读书笔记
- 2021年6月编程语言排行来了!!
- 余压监控系统在高层民用建筑的应用
- 2020年河南省计算机对口升学分数线,2020年河南省单招分数线出来了吗?
- Doevents用法
- 用PS设计制作一款玉石图案
- Fabrie:PPT有风险,设计师请停用
- 用指向指针的指针方法对n个整数排序输出
热门文章
- 【HNOI2017】影魔
- 如何合理命名你的代码
- Spring 依赖注入(一、注入方式)
- [Qt]用QItemDelegate的来修改QStandardItem字体颜色
- 建议检察院服务器服务器配置 显示器,切换器 键鼠
- HTML5网站大观:10个精美的复古风格 HTML5 网站作品
- 电子科大820历年真题_【真题实战】电子科技大学2016计算机专业基础820真题
- Node.js下载安装及各种npm、cnpm、nvm、nrm配置(保姆式教程—提供全套安装包)—nrm的安装与配置(5)
- (PPT)Python程序设计课程教学内容组织与教学方法实践
- Python获取本机所有IP地址