## # $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' require 'msf/core/post/common' require 'msf/core/auxiliary/report' class Metasploit3 < Msf::Post include Msf::Post::Common include Msf::Auxiliary::Report def initialize(info={}) super( update_info( info, 'Name' => 'Windows Gather TCP Netstat', 'Description' => %q{ This Module lists current TCP sessions}, 'License' => MSF_LICENSE, 'Author' => [ 'mubix' ], 'Version' => '$Revision$', 'Platform' => [ 'win' ], 'SessionTypes' => [ 'meterpreter'] )) register_options( [ ], self.class) end def parse_tcptable(buffer) entries = buffer[0,4].unpack("V*")[0] print_status("Total TCP Entries: #{entries}") rtable = Rex::Ui::Text::Table.new( 'Header' => 'Connection Table', 'Indent' => 2, 'Columns' => ['STATE', 'LHOST', 'LPORT', 'RHOST', 'RPORT'] ) offset = 4 (1..entries).each do x = {} x[:state] = case buffer[(offset + 0), 4].unpack("V*")[0] when 1 'CLOSED' when 2 'LISTEN' when 3 'SYN_SENT' when 4 'SYN_RCVD' when 5 'ESTABLISHED' when 6 'FIN_WAIT1' when 7 'FIN_WAIT2' when 8 'CLOSE_WAIT' when 9 'CLOSING' when 10 'LAST_ACK' when 11 'TIME_WAIT' when 12 'DELETE_TCB' else 'UNDEFINED' end x[:lhost] = Rex::Socket.addr_itoa(buffer[(offset + 4), 4].unpack("N")[0]) x[:lport] = buffer[(offset + 8), 4].unpack("n")[0] x[:rhost] = Rex::Socket.addr_itoa(buffer[(offset + 12), 4].unpack("N")[0]) if x[:state] == "LISTEN" x[:rport] = "_" else x[:rport] = buffer[(offset + 16), 4].unpack("n")[0] end offset = offset + 20 rtable << [x[:state], x[:lhost], x[:lport], x[:rhost], x[:rport]] end print_status(rtable.to_s) end def run session.railgun.add_function('iphlpapi', 'GetTcpTable', 'DWORD', [ ['PBLOB', 'pTcpTable', 'out'], ['PDWORD', 'pdwSize', 'inout'], ['BOOL', 'bOrder', 'in'] ]) getsize = session.railgun.iphlpapi.GetTcpTable(4,4,true) buffersize = getsize['pdwSize'] print_status("TCP Table Size: #{buffersize}") tcptable = session.railgun.iphlpapi.GetTcpTable(buffersize,buffersize,true) parse_tcptable(tcptable['pTcpTable']) end end