Module: Msf::Handler::Reverse::Bind
- Included in:
- Msf::Handler::Reverse, Msf::Handler::ReverseUdp
- Defined in:
- lib/msf/core/handler/reverse/bind.rb
Overview
Shared bind address functionality for reverse handlers.
Instance Method Summary collapse
-
#bind_addresses ⇒ Array<String>
A list of addresses to attempt to bind, in preferred order.
- #is_loopback_address?(address) ⇒ Boolean
Instance Method Details
#bind_addresses ⇒ Array<String>
A list of addresses to attempt to bind, in preferred order.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/msf/core/handler/reverse/bind.rb', line 21 def bind_addresses if !datastore['ReverseListenerBindAddress'].to_s.empty? bind_addr = datastore['ReverseListenerBindAddress'] any = Rex::Socket.is_ipv6?(bind_addr) ? '::0' : '0.0.0.0' return [ Rex::Socket.addr_atoi(bind_addr) == 0 ? any : bind_addr ] end begin addr_nbo = Rex::Socket.resolv_nbo(datastore['LHOST']) rescue StandardError print_warning("LHOST '#{datastore['LHOST']}' is not locally resolvable. Binding to 0.0.0.0. Set ReverseListenerBindAddress to override.") return ['0.0.0.0'] end addr = Rex::Socket.addr_ntoa(addr_nbo) any = Rex::Socket.is_ipv4?(addr) ? '0.0.0.0' : '::0' if is_loopback_address?(addr) print_warning("You are binding to a loopback address by setting LHOST to #{addr}. Did you want ReverseListenerBindAddress?") end [addr, any] end |
#is_loopback_address?(address) ⇒ Boolean
8 9 10 11 12 13 |
# File 'lib/msf/core/handler/reverse/bind.rb', line 8 def is_loopback_address?(address) a = IPAddr.new(address.to_s) IPAddr.new('127.0.0.1/8').include?(a) || IPAddr.new('::1').include?(a) rescue IPAddr::Error false end |