Merge branch 'dns_postmods' of git://github.com/mubix/metasploit-framework into mubix-dns_postmods

unstable
sinn3r 2012-10-21 23:44:50 -05:00
commit e6df113a05
2 changed files with 81 additions and 8 deletions

View File

@ -15,19 +15,19 @@ class Metasploit3 < Msf::Post
'Name' => 'Windows Recon Resolve Hostname', 'Name' => 'Windows Recon Resolve Hostname',
'Description' => %q{ This module resolves a hostname to IP address via the victim, similiar to the Unix dig command}, 'Description' => %q{ This module resolves a hostname to IP address via the victim, similiar to the Unix dig command},
'License' => MSF_LICENSE, 'License' => MSF_LICENSE,
'Author' => [ 'Rob Fuller <mubix[at]hak5.org>'], 'Author' => [ 'mubix <mubix[at]hak5.org>'],
'Platform' => [ 'windows' ], 'Platform' => [ 'windows' ],
'SessionTypes' => [ 'meterpreter' ] 'SessionTypes' => [ 'meterpreter' ]
)) ))
register_options( register_options(
[ [
OptString.new('HOSTNAME', [true, 'Hostname to lookup', nil]) OptString.new('HOSTNAME', [false, 'Hostname to lookup', nil]),
OptPath.new('HOSTFILE', [false, 'Line separated file with hostnames to resolve', nil])
], self.class) ], self.class)
end end
def run def resolve_hostname(hostname)
### MAIN ###
if client.platform =~ /^x64/ if client.platform =~ /^x64/
size = 64 size = 64
@ -37,14 +37,11 @@ class Metasploit3 < Msf::Post
addrinfoinmem = 24 addrinfoinmem = 24
end end
hostname = datastore['HOSTNAME']
## get IP for host
begin begin
vprint_status("Looking up IP for #{hostname}") vprint_status("Looking up IP for #{hostname}")
result = client.railgun.ws2_32.getaddrinfo(hostname, nil, nil, 4 ) result = client.railgun.ws2_32.getaddrinfo(hostname, nil, nil, 4 )
if result['GetLastError'] == 11001 if result['GetLastError'] == 11001
print_error("Failed to resolve the host") print_error("Failed to resolve #{hostname}")
return return
end end
addrinfo = client.railgun.memread( result['ppResult'], size ) addrinfo = client.railgun.memread( result['ppResult'], size )
@ -57,5 +54,20 @@ class Metasploit3 < Msf::Post
print_error(e) print_error(e)
print_status('Windows 2000 and prior does not support getaddrinfo') print_status('Windows 2000 and prior does not support getaddrinfo')
end end
end
def run
if datastore['HOSTNAME']
resolve_hostname(datastore['HOSTNAME'])
end
if datastore['HOSTFILE']
::File.open(datastore['HOSTFILE'], "rb").each_line do |hostname|
if hostname.strip != ""
resolve_hostname(hostname.strip)
end
end
end
end end
end end

View File

@ -0,0 +1,61 @@
##
# $Id $
##
##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# web site for more information on licensing and terms of use.
# http://metasploit.com/
##
require 'msf/core'
require 'rex'
class Metasploit3 < Msf::Post
def initialize(info={})
super( update_info( info,
'Name' => 'Windows Recon Resolve IP',
'Description' => %q{ This module reverse resolves a range or IP to a hostname},
'License' => MSF_LICENSE,
'Author' => [ 'mubix <mubix[at]hak5.org>'],
'Version' => '$Revision$',
'Platform' => [ 'windows' ],
'SessionTypes' => [ 'meterpreter' ]
))
register_options(
[
OptAddress.new("ADDRESS" , [ false, "Enumerate currently configured shares"]),
OptAddressRange.new("RANGE" , [ false, "Enumerate Recently mapped shares"])
], self.class)
end
def resolve_ip(ip)
ip_ino = Rex::Socket.addr_aton(ip)
begin
ptr2dns = session.railgun.ws2_32.gethostbyaddr(ip_ino,4,2)
memtext = client.railgun.memread(ptr2dns['return'],255)
host_inmem = memtext.split(ip_ino)[1].split("\00")[0]
print_good("#{ip} resolves to #{host_inmem}")
rescue ::Exception => e
print_error("Failed to resolve #{ip}")
end
end
def run
if datastore['ADDRESS']
resolve_ip(datastore['ADDRESS'])
end
if datastore['RANGE']
rexrange = Rex::Socket::RangeWalker.new(datastore['RANGE'])
rexrange.each do |ip|
resolve_ip(ip)
end
end
end
end