bettercap 1.5.4 → 1.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 41e3ec675b769d7ac29357593472c14af387f440
4
- data.tar.gz: a0a7fdf3060cf8179dd1bb9baa59d2e54658bf88
3
+ metadata.gz: ebf307012a9f7a95c84810c21db31d0ca657575f
4
+ data.tar.gz: 7aa29333600b9ad15821f2f4ad760dbee5dfcd76
5
5
  SHA512:
6
- metadata.gz: afb795ebe9f9ece60e02235d60519814f49483078cf9898b6755ee8e2d68409d3f420905bca98325749f329624665777b06e6183758fbff200cc9de963701fee
7
- data.tar.gz: 389117b84b7c6c2bc3b63a9479ed9a5c3a375c7eac5c2afbf53a9394f3a2b898e4f5879ff07c146e2c372686c6ebb1b32a8da5d030a401664d88d2fe6bc3fa4f
6
+ metadata.gz: 65328453bb055e8ddcea4073eac6b0c5c51b3d1a26c8fcab29f5d0a6be517516af1f5d9f7b21aad2877051dd37d3556e8bb457c781c82ab84e34060508995238
7
+ data.tar.gz: cff87a74985588e872ac886f5bf9e042bf507cbe911208f56f096eb786cf4783c673d352b8d8d9ddbe3777194dbefe263615171de86c9ab55cba0c8be844bdf5
@@ -67,6 +67,7 @@ class Context
67
67
  @firewall = Firewalls::Base.get
68
68
  @memory = Memory.new
69
69
  @iface = nil
70
+ @original_mac = nil
70
71
  @gateway = nil
71
72
  @targets = []
72
73
  @spoofer = nil
@@ -85,6 +86,17 @@ class Context
85
86
  'correct network configuration, this could also happen if bettercap '\
86
87
  'is launched from a virtual environment.' unless Network::Validator.is_ip?(gw)
87
88
 
89
+ unless @options.core.use_mac.nil?
90
+ cfg = PacketFu::Utils.ifconfig @options.core.iface
91
+ raise BetterCap::Error, "Could not determine IPv4 address of '#{@options.core.iface}', make sure this interface "\
92
+ 'is active and connected.' if cfg[:ip4_obj].nil?
93
+
94
+ @original_mac = Network::Target.normalized_mac(cfg[:eth_saddr])
95
+
96
+ Logger.info "Changing interface MAC address to #{@options.core.use_mac}"
97
+
98
+ Shell.ifconfig( "#{@options.core.iface} ether #{@options.core.use_mac}")
99
+ end
88
100
 
89
101
  cfg = PacketFu::Utils.ifconfig @options.core.iface
90
102
  raise BetterCap::Error, "Could not determine IPv4 address of '#{@options.core.iface}', make sure this interface "\
@@ -183,6 +195,8 @@ class Context
183
195
 
184
196
  @dnsd.stop unless @dnsd.nil?
185
197
  @httpd.stop unless @httpd.nil?
198
+
199
+ Shell.ifconfig( "#{@options.core.iface} ether #{@original_mac}") unless @original_mac.nil?
186
200
  end
187
201
 
188
202
  private
@@ -22,7 +22,7 @@ class Base
22
22
  def get
23
23
  return @@instance unless @@instance.nil?
24
24
 
25
- if RUBY_PLATFORM =~ /openbsd/ or RUBY_PLATFORM =~ /darwin/
25
+ if RUBY_PLATFORM =~ /.+bsd/ or RUBY_PLATFORM =~ /darwin/
26
26
  @@instance = Firewalls::BSD.new
27
27
  elsif RUBY_PLATFORM =~ /linux/
28
28
  @@instance = Firewalls::Linux.new
@@ -49,7 +49,7 @@ module PacketFu
49
49
  ret = linux_ifconfig iface, data
50
50
  when /darwin/i
51
51
  ret = darwin_ifconfig iface, data
52
- when /openbsd/i
52
+ when /.+bsd/i
53
53
  ret = openbsd_ifconfig iface, data
54
54
  end
55
55
  elsif BetterCap::Shell.available?('ip')
@@ -56,6 +56,8 @@ class << self
56
56
  def get_alive_targets( ctx )
57
57
  if ctx.options.core.discovery?
58
58
  start_agents( ctx )
59
+ else
60
+ sleep(0.3)
59
61
  end
60
62
 
61
63
  ArpReader.parse ctx
@@ -62,7 +62,12 @@ class DNSD
62
62
 
63
63
  block = Proc.new do |transaction|
64
64
  Logger.info "[#{transaction.options[:peer]} > #{'DNS'.green}] Received request for '#{transaction.question.to_s.yellow}', sending spoofed reply #{addr.yellow} ..."
65
- transaction.respond!(addr)
65
+ begin
66
+ transaction.respond!(addr)
67
+ rescue Exception => e
68
+ Logger.warn "[#{'DNS'.green}] #{e.message}"
69
+ Logger.exception e
70
+ end
66
71
  end
67
72
 
68
73
  DnsWrapper.get.rules << RubyDNS::RuleBasedServer::Rule.new( [ Regexp.new(exp), Resolv::DNS::Resource::IN::A ], block )
@@ -39,6 +39,8 @@ class CoreOptions
39
39
  attr_accessor :packet_throttle
40
40
  # If true, bettercap will check for updates then exit.
41
41
  attr_accessor :check_updates
42
+ # If not nil, the interface MAC address will be changed to this value.
43
+ attr_accessor :use_mac
42
44
 
43
45
  def initialize( iface )
44
46
  @iface = iface
@@ -53,6 +55,7 @@ class CoreOptions
53
55
  @no_target_nbns = false
54
56
  @packet_throttle = 0.0
55
57
  @check_updates = false
58
+ @use_mac = nil
56
59
  end
57
60
 
58
61
  def parse!( ctx, opts )
@@ -64,6 +67,15 @@ class CoreOptions
64
67
  @iface = v
65
68
  end
66
69
 
70
+ opts.on( '--use-mac ADDRESS', 'Change the interface MAC address to this value before performing the attack.' ) do |v|
71
+ @use_mac = v
72
+ raise BetterCap::Error, "Invalid MAC address specified." unless Network::Validator.is_mac?(@use_mac)
73
+ end
74
+
75
+ opts.on( '--random-mac', 'Change the interface MAC address to a random one before performing the attack.' ) do |v|
76
+ @use_mac = [format('%0.2x', rand(256) & ~1), (1..5).map { format('%0.2x', rand(256)) }].join(':')
77
+ end
78
+
67
79
  opts.on( '-G', '--gateway ADDRESS', 'Manually specify the gateway address, if not specified the current gateway will be retrieved and used. ' ) do |v|
68
80
  @gateway = v
69
81
  raise BetterCap::Error, "The specified gateway '#{v}' is not a valid IPv4 address." unless Network::Validator.is_ip?(v)
@@ -56,9 +56,13 @@ class Streamer
56
56
 
57
57
  if r.nil?
58
58
  # call modules on_pre_request
59
- process( request )
60
-
61
- self.send( "do_#{request.method}", request, response )
59
+ r = process( request )
60
+ if r.nil?
61
+ self.send( "do_#{request.method}", request, response )
62
+ else
63
+ Logger.info "[#{'PROXY'.green}] Module returned crafted response."
64
+ response = r
65
+ end
62
66
  else
63
67
  response = r
64
68
  end
@@ -107,7 +111,10 @@ class Streamer
107
111
 
108
112
  begin
109
113
  if response.nil?
110
- mod.on_pre_request request
114
+ r = mod.on_pre_request request
115
+ # the handler returned a response, do not execute
116
+ # the request
117
+ response = r unless r.nil?
111
118
  else
112
119
  mod.on_request request, response
113
120
  end
@@ -119,6 +126,7 @@ class Streamer
119
126
  end
120
127
  end
121
128
  end
129
+ return response
122
130
  end
123
131
 
124
132
  # List of security headers to remove/patch from any response.
@@ -12,7 +12,7 @@ This project is released under the GPL 3 license.
12
12
  =end
13
13
  module BetterCap
14
14
  # Current version of bettercap.
15
- VERSION = '1.5.4'
15
+ VERSION = '1.5.5'
16
16
  # Program banner.
17
17
  BANNER = File.read( File.dirname(__FILE__) + '/banner' ).gsub( '#VERSION#', "v#{VERSION}")
18
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bettercap
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.4
4
+ version: 1.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simone Margaritelli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-23 00:00:00.000000000 Z
11
+ date: 2016-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize