热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vue移动端上传文件插件_wordpress插件wpdiscuz任意文件上传漏洞分析

下载链接https:downloads.wordpress.orgpluginwpdiscuz.7.0.3.zip测试环境•windowsphpstudy•phpstorm解压插件
下载链接

https://downloads.wordpress.org/plugin/wpdiscuz.7.0.3.zip

测试

环境

•windows phpstudy•phpstorm

解压插件到wp-content/plugins目录下

登录管理员启用插件,这时文章下面评论区

0a92d8a3f271346d70735304238df90a.png

image.png

上传带GIF头的php文件

0b18b4be10debd5f6ac6c6d7d23ffc4b.png

image.png

可以看到上传成功,图片地址也在回显中

http://127.0.0.1/wordpress/wp-content/uploads/2020/08/1-1598075857.9448.php

1447b721d5cc98fef5e8a13264646533.png

image.png

分析

wp-setting.php 将wp_ajax_nopriv_wmuUploadFiles写入了$wp_filter

foreach ( wp_get_active_and_valid_plugins() as $plugin ) { wp_register_plugin_realpath( $plugin ); include_once $plugin; /** * Fires once a single activated plugin has loaded. * * @since 5.1.0 * * @param string $plugin Full path to the plugin's main file. */ do_action( 'plugin_loaded', $plugin );}

通过表单action参数插件加载

6cf0f153bfa66865f7f58dc41f2f7cc4.png

image.png

$action = ( isset( $_REQUEST['action'] ) ) ? $_REQUEST['action'] : '';

wordpress先加载插件

ed6b130e12b76151e75cfb8b4535fa43.png

image.png

入口文件

164ab84029c13feba0dbfe1db83b4f2b.png

image.png

上传的关键代码在wp-content\plugins\wpdiscuz\utils\class.WpdiscuzHelperUpload.php376行

public function uploadFiles() {……require_once(ABSPATH . "wp-admin/includes/image.php");foreach ($files as $file) {$error = false;$extension = pathinfo($file["name"], PATHINFO_EXTENSION); //$extension="php"$mimeType = $this->getMimeType($file, $extension);

检测文件mime类型

private function getMimeType($file, $extension) { $mimeType = ""; if (function_exists("mime_content_type")) { $mimeType = mime_content_type($file["tmp_name"]); //image/gif } 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;}

继续跟进

……if ($this->isAllowedFileType($mimeType)) { if (empty($extension)) { //$extension="php" 没进入 …… } $file["type"] = $mimeType;} else { ……}do_action("wpdiscuz_mu_preupload", $file); //没什么用if (!$error) { $attachmentData = $this->uploadSingleFile($file);

isAllowedFileType

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;}

$this->options->content["wmuMimeTypes"] 内容

302530339d94ccff4d925bd2318bc893.png

image.png

在数组内

$isAllowed=true

上传操作在

340行 $attachmentData = $this->uploadSingleFile($file);

uploadSingleFile

private function uploadSingleFile($file) {$currentTime = WpdiscuzHelper::getMicrotime();$attachmentData = [];$path = $this->wpUploadsPath . "/";$fName = $file["name"];$pathInfo = pathinfo($fName);$realFileName = $pathInfo["filename"];$ext = empty($pathInfo["extension"]) ? "" : strtolower($pathInfo["extension"]);$sanitizedName = sanitize_file_name($realFileName); $cleanFileName = $sanitizedName . "-" . $currentTime . "." . $ext;$cleanRealFileName = $sanitizedName . "." . $ext;$fileName = $path . $cleanFileName;if (in_array($ext, ["jpeg", "jpg"])) {$this->imageFixOrientation($file["tmp_name"]);}$success = apply_filters("wpdiscuz_mu_compress_image", false, $file["tmp_name"], $fileName, $q = 60);if ($success || @move_uploaded_file($file["tmp_name"], $fileName)) {

到这里已经把文件上传了 上传文件名为原文件名+时间戳+后缀

v7.0.5的改进

isAllowedFileType 对mime的后缀和文件后缀进行比较

private function isAllowedFileType($mimeType, $extension) { $isAllowed = false; if (!empty($this->mimeTypes) && is_array($this->mimeTypes)) { foreach ($this->mimeTypes as $ext => $mimes) { if ($ext === $extension) { if ($isAllowed = in_array($mimeType, explode("|", $mimes))) { break; } } } } return $isAllowed;}总结

整个上传过程只对文件头进行检测,并没有对文件后缀进行检测,导致可以设置一句话木马内容为

图片文件头+php代码

,进行getshell




推荐阅读
  • AppFog 是一个基于 CloudFoundry 的多语言 PaaS(平台即服务)提供商,允许用户在其平台上轻松构建和部署 Web 应用程序。本文将通过详细的图文步骤,指导读者如何在 AppFog 免费云平台上成功部署 WordPress,帮助用户快速搭建个人博客或网站。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • 近期,针对Axis2默认凭据漏洞的攻击案例在安全社区引起了广泛关注。这些攻击通常利用Axis2的默认用户名和密码进行渗透测试,技术手段相对固定。本文在综合分析多个案例的基础上,详细探讨了该漏洞的安全风险,并提出了有效的防范措施,以帮助企业和开发者加强Web服务的安全防护。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • 本文首先对信息漏洞的基础知识进行了概述,重点介绍了几种常见的信息泄露途径。具体包括目录遍历、PHPINFO信息泄露以及备份文件的不当下载。其中,备份文件下载涉及网站源代码、`.bak`文件、Vim缓存文件和`DS_Store`文件等。目录遍历漏洞的详细分析为后续深入研究奠定了基础。 ... [详细]
  • 大家好,我是李白。本文将分享一个从零开始的全栈项目,涵盖了设计、前端、后端和服务端的全面学习过程。通过这个项目,我希望能够帮助初学者更好地理解和掌握全栈开发的技术栈。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 如何在PHP中准确获取服务器IP地址?
    如何在PHP中准确获取服务器IP地址? ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • FreeBSD环境下PHP GD库安装问题的详细解决方案
    在 FreeBSD 环境下,安装 PHP GD 库时可能会遇到一些常见的问题。本文详细介绍了从配置到编译的完整步骤,包括解决依赖关系、配置选项以及常见错误的处理方法。通过这些详细的指导,开发者可以顺利地在 FreeBSD 上完成 PHP GD 库的安装,确保其正常运行。此外,本文还提供了一些优化建议,帮助提高安装过程的效率和稳定性。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • 基于Dubbo与Zipkin的微服务调用链路监控解决方案
    本文提出了一种基于Dubbo与Zipkin的微服务调用链路监控解决方案。通过抽象配置层,支持HTTP和Kafka两种数据上报方式,实现了灵活且高效的调用链路追踪。该方案不仅提升了系统的可维护性和扩展性,还为故障排查提供了强大的支持。 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
author-avatar
菜大虾
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有