bettercap 1.3.2 → 1.3.3

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