Lucene search
K

Oracle TNS Listener SID Bruteforce

🗓️ 31 Aug 2024 00:00:00Reported by Jay Turla, metasploit.comType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 254 Views

Oracle TNS Listener SID Bruteforce. Query TNS listener for valid Oracle database instance name. Attempt specific SID or read from file

Code
`##  
# This module requires Metasploit: https://metasploit.com/download  
# Current source: https://github.com/rapid7/metasploit-framework  
##  
  
class MetasploitModule < Msf::Auxiliary  
include Msf::Exploit::Remote::TNS  
include Msf::Auxiliary::Report  
include Msf::Auxiliary::Scanner  
include Msf::Auxiliary::AuthBrute # Actually, doesn't use much here, but there's a couple handy functions.  
  
def initialize(info = {})  
super(update_info(info,  
'Name' => 'Oracle TNS Listener SID Bruteforce',  
'Description' => %q{  
This module queries the TNS listener for a valid Oracle database  
instance name (also known as a SID).  
Any response other than a "reject" will be considered a success.  
If a specific SID is provided, that SID will be attempted. Otherwise,  
SIDs read from the named file will be attempted in sequence instead.  
},  
'Author' => [ 'todb' ],  
'License' => MSF_LICENSE  
))  
  
register_options(  
[  
OptPath.new('SID_FILE', [ false, "File containing instance names, one per line", File.join(Msf::Config.data_directory, "wordlists", "sid.txt") ]),  
OptString.new('SID', [ false, 'A specific SID to attempt.' ]),  
Opt::RPORT(1521)  
])  
  
deregister_options(  
"USERNAME", "PASSWORD", "USER_FILE", "PASS_FILE", "USERPASS_FILE",  
"BLANK_PASSWORDS", "USER_AS_PASS", "REMOVE_USER_FILE", "REMOVE_PASS_FILE",  
"REMOVE_USERPASS_FILE"  
)  
end  
  
def build_sid_request(sid,ip)  
connect_data = "(DESCRIPTION=(CONNECT_DATA=(SID=#{sid})(CID=(PROGRAM=)(HOST=__jdbc__)(USER=)))(ADDRESS=(PROTOCOL=tcp)(HOST=#{ip})(PORT=#{rport})))"  
pkt = tns_packet(connect_data)  
end  
  
def hostport  
[target_host,rport].join(":")  
end  
  
def check_sid(sid,ip)  
pkt = build_sid_request(sid,ip)  
sock.put(pkt)  
data = sock.get_once || ''  
parse_response(data)  
end  
  
def parse_response(data)  
return unless data  
len,sum,type,r,hsum,rest = data.unpack("nnCCnA*")  
type # 2 is "accept", 11 is resend. Usually you get 11, then 2. 4 is refuse.  
end  
  
def do_sid_check(sid,ip)  
begin  
connect  
response_code = check_sid(sid,ip)  
if response_code.nil?  
print_status "#{hostport} Oracle - No response given, something is wrong."  
return :abort  
elsif response_code != 4  
print_good "#{hostport} Oracle - '#{sid}' is valid"  
report_note(  
:host => ip,  
:proto => 'tcp',  
:port => rport,  
:sname => 'oracle',  
:type => "oracle.sid",  
:data => sid,  
:update => :unique_data  
)  
return :success  
else  
vprint_status "#{hostport} Oracle - Refused '#{sid}'"  
return :fail  
end  
rescue ::Rex::ConnectionError, ::Errno::EPIPE  
print_error("#{hostport} Oracle - unable to connect to a TNS listener")  
return :abort  
ensure  
disconnect  
end  
end  
  
# Based vaguely on each_user_pass in AuthBrute  
def each_sid(&block)  
@@oracle_sid_fail = []  
@@oracle_sid_success = []  
if datastore['SID'].nil? || datastore['SID'].empty?  
sids = extract_words(datastore['SID_FILE']).map {|s| s.to_s.strip.upcase}.uniq  
else  
sids = [datastore['SID'].to_s.strip.upcase]  
end  
print_status "Checking #{sids.size} SID#{sids.size != 1 && "s"} against #{hostport}"  
sids.each do |s|  
userpass_sleep_interval unless (@@oracle_sid_fail | @@oracle_sid_success).empty?  
next if @@oracle_sid_fail.include?(s) || @@oracle_sid_success.include?(s)  
ret = block.call(s)  
case ret  
when :abort  
break  
when :success  
@@oracle_sid_success << s  
break if datastore["STOP_ON_SUCCESS"]  
when :fail  
@@oracle_sid_fail << s  
end  
end  
end  
  
def run_host(ip)  
each_sid do |sid|  
vprint_status "#{hostport} Oracle - Checking '#{sid}'..."  
do_sid_check(sid,ip)  
end  
end  
end  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

31 Aug 2024 00:00Current
7.4High risk
Vulners AI Score7.4
254