bettercap 1.5.4 → 1.5.5

Sign up to get free protection for your applications and to get access to all the features.
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