bettercap 1.3.2 → 1.3.3

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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/bin/bettercap +1 -0
  3. data/lib/bettercap.rb +1 -0
  4. data/lib/bettercap/context.rb +1 -0
  5. data/lib/bettercap/discovery/agents/arp.rb +1 -0
  6. data/lib/bettercap/discovery/agents/base.rb +1 -0
  7. data/lib/bettercap/discovery/agents/icmp.rb +1 -0
  8. data/lib/bettercap/discovery/agents/udp.rb +1 -0
  9. data/lib/bettercap/discovery/thread.rb +1 -0
  10. data/lib/bettercap/error.rb +1 -0
  11. data/lib/bettercap/factories/firewall.rb +1 -0
  12. data/lib/bettercap/factories/parser.rb +1 -0
  13. data/lib/bettercap/factories/spoofer.rb +1 -0
  14. data/lib/bettercap/firewalls/base.rb +1 -0
  15. data/lib/bettercap/firewalls/linux.rb +1 -0
  16. data/lib/bettercap/firewalls/osx.rb +1 -0
  17. data/lib/bettercap/firewalls/redirection.rb +1 -0
  18. data/lib/bettercap/httpd/server.rb +1 -0
  19. data/lib/bettercap/loader.rb +1 -0
  20. data/lib/bettercap/logger.rb +29 -14
  21. data/lib/bettercap/monkey/packetfu/utils.rb +5 -2
  22. data/lib/bettercap/network/arp_reader.rb +5 -0
  23. data/lib/bettercap/network/network.rb +1 -0
  24. data/lib/bettercap/network/packet_queue.rb +5 -0
  25. data/lib/bettercap/network/target.rb +1 -0
  26. data/lib/bettercap/options.rb +11 -3
  27. data/lib/bettercap/proxy/certstore.rb +1 -0
  28. data/lib/bettercap/proxy/module.rb +1 -0
  29. data/lib/bettercap/proxy/modules/injectcss.rb +1 -0
  30. data/lib/bettercap/proxy/modules/injecthtml.rb +1 -0
  31. data/lib/bettercap/proxy/modules/injectjs.rb +1 -0
  32. data/lib/bettercap/proxy/proxy.rb +3 -2
  33. data/lib/bettercap/proxy/request.rb +1 -0
  34. data/lib/bettercap/proxy/response.rb +1 -0
  35. data/lib/bettercap/proxy/sslstrip/cookiemonitor.rb +1 -0
  36. data/lib/bettercap/proxy/sslstrip/strip.rb +1 -0
  37. data/lib/bettercap/proxy/sslstrip/urlmonitor.rb +2 -1
  38. data/lib/bettercap/proxy/stream_logger.rb +1 -0
  39. data/lib/bettercap/proxy/streamer.rb +1 -0
  40. data/lib/bettercap/proxy/thread_pool.rb +1 -0
  41. data/lib/bettercap/shell.rb +5 -0
  42. data/lib/bettercap/sniffer/parsers/base.rb +1 -0
  43. data/lib/bettercap/sniffer/parsers/custom.rb +1 -0
  44. data/lib/bettercap/sniffer/parsers/dict.rb +38 -0
  45. data/lib/bettercap/sniffer/parsers/ftp.rb +1 -0
  46. data/lib/bettercap/sniffer/parsers/httpauth.rb +2 -1
  47. data/lib/bettercap/sniffer/parsers/https.rb +2 -1
  48. data/lib/bettercap/sniffer/parsers/irc.rb +1 -0
  49. data/lib/bettercap/sniffer/parsers/mail.rb +2 -1
  50. data/lib/bettercap/sniffer/parsers/mpd.rb +37 -0
  51. data/lib/bettercap/sniffer/parsers/nntp.rb +1 -0
  52. data/lib/bettercap/sniffer/parsers/ntlmss.rb +1 -0
  53. data/lib/bettercap/sniffer/parsers/post.rb +1 -0
  54. data/lib/bettercap/sniffer/parsers/redis.rb +40 -0
  55. data/lib/bettercap/sniffer/parsers/rlogin.rb +46 -0
  56. data/lib/bettercap/sniffer/parsers/snpp.rb +38 -0
  57. data/lib/bettercap/sniffer/parsers/url.rb +2 -1
  58. data/lib/bettercap/sniffer/sniffer.rb +1 -0
  59. data/lib/bettercap/spoofers/arp.rb +1 -0
  60. data/lib/bettercap/spoofers/base.rb +1 -0
  61. data/lib/bettercap/spoofers/icmp.rb +1 -0
  62. data/lib/bettercap/spoofers/none.rb +1 -0
  63. data/lib/bettercap/update_checker.rb +1 -0
  64. data/lib/bettercap/version.rb +2 -1
  65. metadata +7 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3d2a9962f1c08de2c9af91a1c8c2273374ac9693
4
- data.tar.gz: 94787e76c7844106cc0004e810c1ce15ccbc6d91
3
+ metadata.gz: 31a820a7730bbf4c4b05afeffaa33bbdddd5c4a3
4
+ data.tar.gz: 6983bea70e9ed11c583aa03ed1eddf4a746a8363
5
5
  SHA512:
6
- metadata.gz: ba0c1a5bf763233b64c5139b94e0a8887cb0bdfac942a6be1a7e3476f0cc7b07a4ae29af389c6144af9a6ba84b86de50af54575e86f7ea2efb33771738c0b143
7
- data.tar.gz: 3e74e7d919ff117110c7be47a6632f7dedc94ed7ccae1f3558dc9b33cf02925086857fa7d5362f536ff35a983d41fea5ac4390978fe89851a647a1f2b97da284
6
+ metadata.gz: 222922d21c654249874b8c3de9fdad45844dc3bd31766d71ac930bcef3ea2620d54502654f4439636c92cd79b6da745669172bf30cffc3825ee0c698c468ee68
7
+ data.tar.gz: b70724787a5dc6f6979f1dd00aa367b605c7b30bde931d79695187a0880ae686e669dd2cf11394e6f801d5052b50db1c665bba86c8231874173f9a49887cb642
data/bin/bettercap CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # encoding: UTF-8
2
3
 
3
4
  =begin
4
5
 
data/lib/bettercap.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # encoding: UTF-8
2
3
 
3
4
  =begin
4
5
 
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
  BETTERCAP
3
4
  Author : Simone 'evilsocket' Margaritelli
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -13,24 +14,27 @@ module BetterCap
13
14
  # Class responsible for console and file logging.
14
15
  module Logger
15
16
  class << self
16
- @@ctx = nil
17
- @@queue = Queue.new
18
- @@debug = false
19
- @@silent = false
20
- @@logfile = nil
21
- @@thread = nil
17
+ @@ctx = nil
18
+ @@queue = Queue.new
19
+ @@debug = false
20
+ @@timestamp = false
21
+ @@silent = false
22
+ @@logfile = nil
23
+ @@thread = nil
22
24
 
23
25
  # Initialize the logging system.
24
26
  # If +debug+ is true, debug logging will be enabled.
25
27
  # If +logfile+ is not nil, every message will be saved to that file.
26
28
  # If +silent+ is true, all messages will be suppressed if they're not errors
27
29
  # or warnings.
28
- def init( debug, logfile, silent )
29
- @@debug = debug
30
- @@logfile = logfile
31
- @@thread = Thread.new { worker }
32
- @@silent = silent
33
- @@ctx = Context.get
30
+ # If +with_timestamp+ is true, a timestamp will be prepended to each line.
31
+ def init( debug, logfile, silent, with_timestamp )
32
+ @@debug = debug
33
+ @@logfile = logfile
34
+ @@thread = Thread.new { worker }
35
+ @@silent = silent
36
+ @@timestamp = with_timestamp
37
+ @@ctx = Context.get
34
38
  end
35
39
 
36
40
  # Log an error +message+.
@@ -57,7 +61,7 @@ module Logger
57
61
 
58
62
  # Log a +message+ as it is.
59
63
  def raw(message)
60
- @@queue.push( message )
64
+ @@queue.push( formatted_message( message, nil ) )
61
65
  end
62
66
 
63
67
  # Wait for the messages queue to be empty.
@@ -95,7 +99,18 @@ module Logger
95
99
 
96
100
  # Format +message+ for the given +message_type+.
97
101
  def formatted_message(message, message_type)
98
- "[#{message_type}] #{message}"
102
+ # raw message?
103
+ if message_type.nil?
104
+ if @@timestamp and !message.strip.empty?
105
+ "[#{Time.now}] #{message}"
106
+ else
107
+ message
108
+ end
109
+ elsif @@timestamp
110
+ "[#{Time.now}] [#{message_type}] #{message}"
111
+ else
112
+ "[#{message_type}] #{message}"
113
+ end
99
114
  end
100
115
  end
101
116
  end
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -69,8 +70,10 @@ module PacketFu
69
70
  ret[:ip4_obj] = IPAddr.new($1)
70
71
  ret[:ip4_obj] = ret[:ip4_obj].mask($3) if $3
71
72
  when /inet6 [a-z]+:[\s]*([0-9a-fA-F:\x2f]+)/
72
- ret[:ip6_saddr] = $1
73
- ret[:ip6_obj] = IPAddr.new($1)
73
+ begin
74
+ ret[:ip6_saddr] = $1
75
+ ret[:ip6_obj] = IPAddr.new($1)
76
+ rescue; end
74
77
  when /ether[\s]+([0-9a-fA-F:]{17})/i
75
78
  ret[:eth_saddr] = $1.downcase
76
79
  ret[:eth_src] = EthHeader.mac2str(ret[:eth_saddr])
@@ -1,9 +1,14 @@
1
+ # encoding: UTF-8
1
2
  =begin
3
+
2
4
  BETTERCAP
5
+
3
6
  Author : Simone 'evilsocket' Margaritelli
4
7
  Email : evilsocket@gmail.com
5
8
  Blog : http://www.evilsocket.net/
9
+
6
10
  This project is released under the GPL 3 license.
11
+
7
12
  =end
8
13
  require 'bettercap/error'
9
14
 
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,9 +1,14 @@
1
+ # encoding: UTF-8
1
2
  =begin
3
+
2
4
  BETTERCAP
5
+
3
6
  Author : Simone 'evilsocket' Margaritelli
4
7
  Email : evilsocket@gmail.com
5
8
  Blog : http://www.evilsocket.net/
9
+
6
10
  This project is released under the GPL 3 license.
11
+
7
12
  =end
8
13
  require 'bettercap/error'
9
14
 
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -26,6 +27,8 @@ class Options
26
27
  attr_accessor :target
27
28
  # Log file name.
28
29
  attr_accessor :logfile
30
+ # If true the Logger will prepend timestamps to each line.
31
+ attr_accessor :log_timestamp
29
32
  # If true will suppress every log message which is not an error or a warning.
30
33
  attr_accessor :silent
31
34
  # If true will enable debug messages.
@@ -100,6 +103,7 @@ class Options
100
103
  @half_duplex = false
101
104
  @target = nil
102
105
  @logfile = nil
106
+ @log_timestamp = false
103
107
  @silent = false
104
108
  @debug = false
105
109
  @arpcache = false
@@ -177,6 +181,10 @@ class Options
177
181
  ctx.options.logfile = v
178
182
  end
179
183
 
184
+ opts.on( '--log-timestamp', 'Enable logging with timestamps for each line, disabled by default.' ) do
185
+ ctx.options.log_timestamp = true
186
+ end
187
+
180
188
  opts.on( '-D', '--debug', 'Enable debug logging.' ) do
181
189
  ctx.options.debug = true
182
190
  end
@@ -328,7 +336,7 @@ class Options
328
336
  end
329
337
  end.parse!
330
338
 
331
- Logger.init( ctx.options.debug, ctx.options.logfile, ctx.options.silent )
339
+ Logger.init( ctx.options.debug, ctx.options.logfile, ctx.options.silent, ctx.options.log_timestamp )
332
340
 
333
341
  if ctx.options.check_updates
334
342
  UpdateChecker.check
@@ -520,8 +528,8 @@ class Options
520
528
 
521
529
  # Print the starting status message.
522
530
  def starting_message
523
- on = 'on'.green
524
- off = 'off'.red
531
+ on = ''.green
532
+ off = ''.red
525
533
  status = {
526
534
  'spoofing' => if has_spoofer? then on else off end,
527
535
  'discovery' => if !target.nil? or arpcache then off else on end,
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -132,8 +133,8 @@ class Proxy
132
133
 
133
134
  rescue Exception => e
134
135
  if request.host
135
- Logger.warn "Error while serving #{request.host}#{request.url}: #{e.inspect}"
136
- Logger.warn e.backtrace.join("\n")
136
+ Logger.warn "Error while serving #{request.host}#{request.url}: #{e.message}"
137
+ Logger.debug e.backtrace.join("\n")
137
138
  end
138
139
  end
139
140
 
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -25,7 +26,7 @@ class URLMonitor
25
26
  def was_stripped?( client, url )
26
27
  @urls.include?([client, url])
27
28
  end
28
-
29
+
29
30
  # Add the object (client, url) to this list.
30
31
  def add!( client, url )
31
32
  unless was_stripped?(client, url)
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,9 +1,14 @@
1
+ # encoding: UTF-8
1
2
  =begin
3
+
2
4
  BETTERCAP
5
+
3
6
  Author : Simone 'evilsocket' Margaritelli
4
7
  Email : evilsocket@gmail.com
5
8
  Blog : http://www.evilsocket.net/
9
+
6
10
  This project is released under the GPL 3 license.
11
+
7
12
  =end
8
13
  require 'bettercap/error'
9
14
 
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -0,0 +1,38 @@
1
+ =begin
2
+
3
+ BETTERCAP
4
+
5
+ Author : Simone 'evilsocket' Margaritelli
6
+ Email : evilsocket@gmail.com
7
+ Blog : http://www.evilsocket.net/
8
+
9
+ This project is released under the GPL 3 license.
10
+
11
+ =end
12
+ require 'bettercap/sniffer/parsers/base'
13
+
14
+ module BetterCap
15
+ module Parsers
16
+ # DICT authentication parser.
17
+ class Dict < Base
18
+ def initialize
19
+ @name = 'DICT'
20
+ end
21
+ def on_packet( pkt )
22
+ begin
23
+ if pkt.tcp_dst == 2628
24
+ lines = pkt.to_s.split(/\r?\n/)
25
+ lines.each do |line|
26
+ if line =~ /AUTH\s+(.+)\s+(.+)$/
27
+ user = $1
28
+ pass = $2
29
+ StreamLogger.log_raw( pkt, @name, "username=#{user} password=#{pass}" )
30
+ end
31
+ end
32
+ end
33
+ rescue
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -15,7 +16,7 @@ require 'base64'
15
16
 
16
17
  module BetterCap
17
18
  module Parsers
18
- # HTTP basic and digest authentication parser.
19
+ # HTTP basic and digest authentication parser.
19
20
  class Httpauth < Base
20
21
  def on_packet( pkt )
21
22
  lines = pkt.to_s.split("\n")
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -15,7 +16,7 @@ require 'resolv'
15
16
 
16
17
  module BetterCap
17
18
  module Parsers
18
- # HTTPS connections parser.
19
+ # HTTPS connections parser.
19
20
  class Https < Base
20
21
  @@prev = nil
21
22
 
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -13,7 +14,7 @@ require 'bettercap/sniffer/parsers/base'
13
14
 
14
15
  module BetterCap
15
16
  module Parsers
16
- # POP/IMAP authentication parser.
17
+ # POP/IMAP authentication parser.
17
18
  class Mail < Base
18
19
  def initialize
19
20
  @filters = [ /(\d+ )?(auth|authenticate) ([a-z\-_0-9]+)/i ]
@@ -0,0 +1,37 @@
1
+ =begin
2
+
3
+ BETTERCAP
4
+
5
+ Author : Simone 'evilsocket' Margaritelli
6
+ Email : evilsocket@gmail.com
7
+ Blog : http://www.evilsocket.net/
8
+
9
+ This project is released under the GPL 3 license.
10
+
11
+ =end
12
+ require 'bettercap/sniffer/parsers/base'
13
+
14
+ module BetterCap
15
+ module Parsers
16
+ # Music Player Daemon (MPD) authentication parser.
17
+ class Mpd < Base
18
+ def initialize
19
+ @name = 'MPD'
20
+ end
21
+ def on_packet( pkt )
22
+ begin
23
+ if pkt.tcp_dst == 6600
24
+ lines = pkt.to_s.split(/\r?\n/)
25
+ lines.each do |line|
26
+ if line =~ /password\s+(.+)$/
27
+ pass = $1
28
+ StreamLogger.log_raw( pkt, @name, "password=#{pass}" )
29
+ end
30
+ end
31
+ end
32
+ rescue
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -0,0 +1,40 @@
1
+ =begin
2
+
3
+ BETTERCAP
4
+
5
+ Author : Simone 'evilsocket' Margaritelli
6
+ Email : evilsocket@gmail.com
7
+ Blog : http://www.evilsocket.net/
8
+
9
+ This project is released under the GPL 3 license.
10
+
11
+ =end
12
+ require 'bettercap/sniffer/parsers/base'
13
+
14
+ module BetterCap
15
+ module Parsers
16
+ # Redis authentication parser.
17
+ class Redis < Base
18
+ def initialize
19
+ @name = 'REDIS'
20
+ end
21
+ def on_packet( pkt )
22
+ begin
23
+ if pkt.tcp_dst == 6379
24
+ lines = pkt.to_s.split(/\r?\n/)
25
+ lines.each do |line|
26
+ if line =~ /config\s+set\s+requirepass\s+(.+)$/i
27
+ pass = "#{$1}"
28
+ StreamLogger.log_raw( pkt, @name, "password=#{pass}" )
29
+ elsif line =~ /AUTH\s+(.+)$/i
30
+ pass = "#{$1}"
31
+ StreamLogger.log_raw( pkt, @name, "password=#{pass}" )
32
+ end
33
+ end
34
+ end
35
+ rescue
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,46 @@
1
+ =begin
2
+
3
+ BETTERCAP
4
+
5
+ Author : Simone 'evilsocket' Margaritelli
6
+ Email : evilsocket@gmail.com
7
+ Blog : http://www.evilsocket.net/
8
+
9
+ This project is released under the GPL 3 license.
10
+
11
+ =end
12
+ require 'bettercap/sniffer/parsers/base'
13
+
14
+ module BetterCap
15
+ module Parsers
16
+ # BSD rlogin authentication parser.
17
+ class Rlogin < Base
18
+ def initialize
19
+ @name = 'RLOGIN'
20
+ end
21
+ def on_packet( pkt )
22
+ begin
23
+ if pkt.tcp_dst == 513
24
+ # rlogin packet data = 0x00[client-username]0x00<server-username>0x00<terminal/speed>0x00
25
+
26
+ # if client username, server username and terminal/speed were supplied...
27
+ # regex starts at client username as the first null byte is stripped from pkt.payload.to_s
28
+ if pkt.payload.to_s =~ /\A([a-z0-9_-]+)\x00([a-z0-9_-]+)\x00([a-z0-9_-]+\/[0-9]+)\x00\Z/i
29
+ client_user = $1
30
+ server_user = $2
31
+ terminal = $3
32
+ StreamLogger.log_raw( pkt, @name, "client-username=#{client_user} server-username=#{server_user} terminal=#{terminal}" )
33
+ # else, if only server username and terminal/speed were supplied...
34
+ # regex starts at 0x00 as the first null byte is stripped from pkt.payload.to_s and the client username is empty
35
+ elsif pkt.payload.to_s =~ /\A\x00([a-z0-9_-]+)\x00([a-z0-9_-]+\/[0-9]+)\x00\Z/i
36
+ server_user = $1
37
+ terminal = $2
38
+ StreamLogger.log_raw( pkt, @name, "server-username=#{server_user} terminal=#{terminal}" )
39
+ end
40
+ end
41
+ rescue
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,38 @@
1
+ =begin
2
+
3
+ BETTERCAP
4
+
5
+ Author : Simone 'evilsocket' Margaritelli
6
+ Email : evilsocket@gmail.com
7
+ Blog : http://www.evilsocket.net/
8
+
9
+ This project is released under the GPL 3 license.
10
+
11
+ =end
12
+ require 'bettercap/sniffer/parsers/base'
13
+
14
+ module BetterCap
15
+ module Parsers
16
+ # Simple Network Paging Protocol (SNPP) authentication parser.
17
+ class Snpp < Base
18
+ def initialize
19
+ @name = 'SNPP'
20
+ end
21
+ def on_packet( pkt )
22
+ begin
23
+ if pkt.tcp_dst == 444
24
+ lines = pkt.to_s.split(/\r?\n/)
25
+ lines.each do |line|
26
+ if line =~ /LOGIn\s+(.+)\s+(.+)$/
27
+ user = $1
28
+ pass = $2
29
+ StreamLogger.log_raw( pkt, @name, "username=#{user} password=#{pass}" )
30
+ end
31
+ end
32
+ end
33
+ rescue
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -14,7 +15,7 @@ require 'colorize'
14
15
 
15
16
  module BetterCap
16
17
  module Parsers
17
- # HTTP GET requests parser.
18
+ # HTTP GET requests parser.
18
19
  class Url < Base
19
20
  def on_packet( pkt )
20
21
  s = pkt.to_s
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  =begin
2
3
 
3
4
  BETTERCAP
@@ -11,7 +12,7 @@ This project is released under the GPL 3 license.
11
12
  =end
12
13
  module BetterCap
13
14
  # Current version of bettercap.
14
- VERSION = '1.3.2'
15
+ VERSION = '1.3.3'
15
16
  # Program banner.
16
17
  BANNER = File.read( File.dirname(__FILE__) + '/banner' ).gsub( '#VERSION#', "v#{VERSION}")
17
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.3.2
4
+ version: 1.3.3
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-01-26 00:00:00.000000000 Z
11
+ date: 2016-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -143,14 +143,19 @@ files:
143
143
  - lib/bettercap/shell.rb
144
144
  - lib/bettercap/sniffer/parsers/base.rb
145
145
  - lib/bettercap/sniffer/parsers/custom.rb
146
+ - lib/bettercap/sniffer/parsers/dict.rb
146
147
  - lib/bettercap/sniffer/parsers/ftp.rb
147
148
  - lib/bettercap/sniffer/parsers/httpauth.rb
148
149
  - lib/bettercap/sniffer/parsers/https.rb
149
150
  - lib/bettercap/sniffer/parsers/irc.rb
150
151
  - lib/bettercap/sniffer/parsers/mail.rb
152
+ - lib/bettercap/sniffer/parsers/mpd.rb
151
153
  - lib/bettercap/sniffer/parsers/nntp.rb
152
154
  - lib/bettercap/sniffer/parsers/ntlmss.rb
153
155
  - lib/bettercap/sniffer/parsers/post.rb
156
+ - lib/bettercap/sniffer/parsers/redis.rb
157
+ - lib/bettercap/sniffer/parsers/rlogin.rb
158
+ - lib/bettercap/sniffer/parsers/snpp.rb
154
159
  - lib/bettercap/sniffer/parsers/url.rb
155
160
  - lib/bettercap/sniffer/sniffer.rb
156
161
  - lib/bettercap/spoofers/arp.rb