bettercap 1.1.9 → 1.1.10

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +2 -2
  3. data/TODO.md +5 -2
  4. data/bin/bettercap +19 -11
  5. data/lib/bettercap.rb +5 -1
  6. data/lib/bettercap/base/ifirewall.rb +2 -0
  7. data/lib/bettercap/base/ispoofer.rb +2 -0
  8. data/lib/bettercap/context.rb +5 -2
  9. data/lib/bettercap/discovery/{arp.rb → agents/arp.rb} +15 -14
  10. data/lib/bettercap/discovery/{base.rb → agents/base.rb} +4 -4
  11. data/lib/bettercap/discovery/{icmp.rb → agents/icmp.rb} +2 -3
  12. data/lib/bettercap/discovery/{udp.rb → agents/udp.rb} +2 -2
  13. data/lib/bettercap/{discovery.rb → discovery/discovery.rb} +8 -1
  14. data/lib/bettercap/factories/firewall_factory.rb +2 -0
  15. data/lib/bettercap/factories/parser_factory.rb +11 -5
  16. data/lib/bettercap/factories/spoofer_factory.rb +3 -1
  17. data/lib/bettercap/firewalls/linux.rb +2 -0
  18. data/lib/bettercap/firewalls/osx.rb +2 -0
  19. data/lib/bettercap/firewalls/redirection.rb +2 -1
  20. data/lib/bettercap/httpd/server.rb +2 -3
  21. data/lib/bettercap/logger.rb +27 -10
  22. data/lib/bettercap/monkey/packetfu/utils.rb +5 -5
  23. data/lib/bettercap/network.rb +26 -16
  24. data/lib/bettercap/options.rb +27 -6
  25. data/lib/bettercap/proxy/certstore.rb +4 -3
  26. data/lib/bettercap/proxy/module.rb +2 -2
  27. data/lib/bettercap/proxy/proxy.rb +5 -5
  28. data/lib/bettercap/proxy/request.rb +2 -2
  29. data/lib/bettercap/proxy/response.rb +2 -0
  30. data/lib/bettercap/proxy/stream_logger.rb +15 -3
  31. data/lib/bettercap/proxy/streamer.rb +3 -1
  32. data/lib/bettercap/proxy/thread_pool.rb +4 -2
  33. data/lib/bettercap/shell.rb +2 -0
  34. data/lib/bettercap/sniffer/parsers/base.rb +3 -12
  35. data/lib/bettercap/sniffer/parsers/custom.rb +21 -0
  36. data/lib/bettercap/sniffer/parsers/ftp.rb +2 -0
  37. data/lib/bettercap/sniffer/parsers/httpauth.rb +4 -5
  38. data/lib/bettercap/sniffer/parsers/https.rb +3 -4
  39. data/lib/bettercap/sniffer/parsers/irc.rb +2 -0
  40. data/lib/bettercap/sniffer/parsers/mail.rb +2 -0
  41. data/lib/bettercap/sniffer/parsers/ntlmss.rb +3 -3
  42. data/lib/bettercap/sniffer/parsers/post.rb +7 -7
  43. data/lib/bettercap/sniffer/parsers/url.rb +11 -11
  44. data/lib/bettercap/sniffer/sniffer.rb +8 -2
  45. data/lib/bettercap/spoofers/arp.rb +15 -5
  46. data/lib/bettercap/spoofers/none.rb +2 -0
  47. data/lib/bettercap/target.rb +29 -10
  48. data/lib/bettercap/update_checker.rb +2 -0
  49. data/lib/bettercap/version.rb +1 -1
  50. metadata +8 -40
  51. data/Rakefile +0 -7
  52. data/test/factories/firewall_factory_test.rb +0 -54
  53. data/test/factories/parser_factory_test.rb +0 -36
  54. data/test/factories/spoofer_factory_test.rb +0 -15
  55. data/test/firewalls/linux_firewall_test.rb +0 -72
  56. data/test/firewalls/osx_firewall_test.rb +0 -72
  57. data/test/helpers/mock_shell.rb +0 -17
  58. data/test/logger_test.rb +0 -12
  59. data/test/network_test.rb +0 -14
  60. data/test/pcap/ftp.pcap +0 -0
  61. data/test/pcap/http.pcap +0 -0
  62. data/test/pcap/packets.pcap +0 -0
  63. data/test/proxy/response_test.rb +0 -56
  64. data/test/shell_test.rb +0 -15
  65. data/test/sniffer/parsers/base_parser_test.rb +0 -20
  66. data/test/sniffer/parsers/ftp_parser_test.rb +0 -27
  67. data/test/sniffer/parsers/url_parser_test.rb +0 -25
  68. data/test/target_test.rb +0 -24
  69. data/test/test_helper.rb +0 -47
@@ -15,6 +15,7 @@ require 'bettercap/logger'
15
15
  require 'net/http'
16
16
  require 'json'
17
17
 
18
+ module BetterCap
18
19
  class UpdateChecker
19
20
  def self.check
20
21
  ver = self.get_latest_version
@@ -51,3 +52,4 @@ class UpdateChecker
51
52
  return json['version']
52
53
  end
53
54
  end
55
+ end
@@ -10,6 +10,6 @@ This project is released under the GPL 3 license.
10
10
 
11
11
  =end
12
12
  module BetterCap
13
- VERSION = '1.1.9'
13
+ VERSION = '1.1.10'
14
14
  BANNER = File.read( File.dirname(__FILE__) + '/banner' ).gsub( '#VERSION#', "v#{VERSION}")
15
15
  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.1.9
4
+ version: 1.1.10
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-01 00:00:00.000000000 Z
11
+ date: 2016-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -66,20 +66,6 @@ dependencies:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.0.1
69
- - !ruby/object:Gem::Dependency
70
- name: minitest
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - '>='
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - '>='
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
69
  description: A complete, modular, portable and easily extensible MITM framework.
84
70
  email: evilsocket@gmail.com
85
71
  executables:
@@ -91,16 +77,15 @@ files:
91
77
  - LICENSE.md
92
78
  - README.md
93
79
  - TODO.md
94
- - Rakefile
95
80
  - lib/bettercap/banner
96
81
  - lib/bettercap/base/ifirewall.rb
97
82
  - lib/bettercap/base/ispoofer.rb
98
83
  - lib/bettercap/context.rb
99
- - lib/bettercap/discovery/arp.rb
100
- - lib/bettercap/discovery/base.rb
101
- - lib/bettercap/discovery/icmp.rb
102
- - lib/bettercap/discovery/udp.rb
103
- - lib/bettercap/discovery.rb
84
+ - lib/bettercap/discovery/agents/arp.rb
85
+ - lib/bettercap/discovery/agents/base.rb
86
+ - lib/bettercap/discovery/agents/icmp.rb
87
+ - lib/bettercap/discovery/agents/udp.rb
88
+ - lib/bettercap/discovery/discovery.rb
104
89
  - lib/bettercap/error.rb
105
90
  - lib/bettercap/factories/firewall_factory.rb
106
91
  - lib/bettercap/factories/parser_factory.rb
@@ -124,6 +109,7 @@ files:
124
109
  - lib/bettercap/proxy/thread_pool.rb
125
110
  - lib/bettercap/shell.rb
126
111
  - lib/bettercap/sniffer/parsers/base.rb
112
+ - lib/bettercap/sniffer/parsers/custom.rb
127
113
  - lib/bettercap/sniffer/parsers/ftp.rb
128
114
  - lib/bettercap/sniffer/parsers/httpauth.rb
129
115
  - lib/bettercap/sniffer/parsers/https.rb
@@ -140,24 +126,6 @@ files:
140
126
  - lib/bettercap/version.rb
141
127
  - lib/bettercap.rb
142
128
  - bin/bettercap
143
- - test/factories/firewall_factory_test.rb
144
- - test/factories/parser_factory_test.rb
145
- - test/factories/spoofer_factory_test.rb
146
- - test/firewalls/linux_firewall_test.rb
147
- - test/firewalls/osx_firewall_test.rb
148
- - test/helpers/mock_shell.rb
149
- - test/logger_test.rb
150
- - test/network_test.rb
151
- - test/pcap/ftp.pcap
152
- - test/pcap/http.pcap
153
- - test/pcap/packets.pcap
154
- - test/proxy/response_test.rb
155
- - test/shell_test.rb
156
- - test/sniffer/parsers/base_parser_test.rb
157
- - test/sniffer/parsers/ftp_parser_test.rb
158
- - test/sniffer/parsers/url_parser_test.rb
159
- - test/target_test.rb
160
- - test/test_helper.rb
161
129
  homepage: http://github.com/evilsocket/bettercap
162
130
  licenses:
163
131
  - GPL3
data/Rakefile DELETED
@@ -1,7 +0,0 @@
1
- require 'rake/testtask'
2
-
3
- Rake::TestTask.new do |t|
4
- t.libs << 'test'
5
- t.libs << 'lib/bettercap'
6
- t.pattern = "test/**/*_test.rb"
7
- end
@@ -1,54 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'factories/firewall_factory'
3
-
4
- class FirewallFactoryTest < MiniTest::Test
5
- # TODO: Fix the tests for the Mac and Linux firewall initialization. Right now
6
- # they are being created in a way which executes a shell command, causing
7
- # tests to fail.
8
-
9
- # def test_mac_firewall
10
- # FirewallFactory.clear_firewall
11
- #
12
- # override_ruby_platform('darwin') do
13
- # firewall = FirewallFactory.get_firewall
14
- # assert_equal firewall.class, OSXFirewall
15
- # end
16
- # end
17
-
18
- # def test_linux_firewall
19
- # FirewallFactory.clear_firewall
20
- #
21
- # override_ruby_platform('linux') do
22
- # firewall = FirewallFactory.get_firewall
23
- # assert_equal firewall.class, LinuxFirewall
24
- # end
25
- # end
26
-
27
- def test_unknown_firewall
28
- FirewallFactory.clear_firewall
29
-
30
- override_ruby_platform('ms') do
31
- assert_raises BetterCap::Error do
32
- FirewallFactory.get_firewall
33
- end
34
- end
35
- end
36
-
37
- private
38
-
39
- def override_ruby_platform(platform)
40
- actual_platform = RUBY_PLATFORM
41
-
42
- begin
43
- redefine_const :RUBY_PLATFORM, platform
44
- yield
45
- ensure
46
- redefine_const :RUBY_PLATFORM, actual_platform
47
- end
48
- end
49
-
50
- def redefine_const(const, value)
51
- Object.send(:remove_const, const) if Object.const_defined?(const)
52
- Object.const_set(const, value)
53
- end
54
- end
@@ -1,36 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'factories/parser_factory'
3
-
4
- class ParserFactoryTest < MiniTest::Test
5
- def test_getting_available_parsers
6
- available_parsers = ParserFactory.available
7
- assert available_parsers.include?('FTP')
8
- end
9
-
10
- def test_successful_cmdline_parser_name
11
- parsers = ParserFactory.from_cmdline('ftp,https')
12
- assert_equal parsers, ['FTP', 'HTTPS']
13
- end
14
-
15
- def test_failed_cmdline_parser_name
16
- assert_raises BetterCap::Error do
17
- ParserFactory.from_cmdline 'unknown'
18
- end
19
- end
20
-
21
- def test_no_cmdline_parser_provided
22
- assert_raises BetterCap::Error do
23
- ParserFactory.from_cmdline nil
24
- end
25
- end
26
-
27
- def test_successfully_loading_parsers
28
- loaded = ParserFactory.load_by_names 'FTP'
29
- assert_equal loaded.first.class, FtpParser
30
- end
31
-
32
- def test_unsuccessfully_loading_parsers
33
- loaded = ParserFactory.load_by_names 'unknown'
34
- assert_empty loaded
35
- end
36
- end
@@ -1,15 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'factories/spoofer_factory'
3
-
4
- class SpooferFactoryTest < MiniTest::Test
5
- def test_getting_available_parsers
6
- spoofers = SpooferFactory.available
7
- assert spoofers.include?('ARP')
8
- end
9
-
10
- def test_unsuccessful_name
11
- assert_raises BetterCap::Error do
12
- SpooferFactory.get_by_name 'unknown'
13
- end
14
- end
15
- end
@@ -1,72 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'test_helper'
3
- require 'firewalls/linux'
4
- require 'helpers/mock_shell'
5
-
6
- class OSXFirewallTest < MiniTest::Test
7
- def test_enabling_forwarding
8
- firewall = stubbed_firewall(LinuxFirewall).new
9
- result = firewall.enable_forwarding true
10
-
11
- assert_equal result, 'echo 1 > /proc/sys/net/ipv4/ip_forward'
12
- end
13
-
14
- def test_disabling_forwarding
15
- firewall = stubbed_firewall(LinuxFirewall).new
16
- result = firewall.enable_forwarding false
17
-
18
- assert_equal result, 'echo 0 > /proc/sys/net/ipv4/ip_forward'
19
- end
20
-
21
- def test_enabling_icmp_broadcast
22
- firewall = stubbed_firewall(LinuxFirewall).new
23
- result = firewall.enable_icmp_bcast true
24
-
25
- assert_equal result, 'echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts'
26
- end
27
-
28
- def test_disabling_icmp_broadcast
29
- firewall = stubbed_firewall(LinuxFirewall).new
30
- result = firewall.enable_icmp_bcast false
31
-
32
- assert_equal result, 'echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts'
33
- end
34
-
35
- def test_whether_forwarding_is_enabled
36
- expected_output = '1'
37
- MockShell.stub :execute, expected_output do
38
-
39
- firewall = stubbed_firewall(LinuxFirewall).new
40
- result = firewall.forwarding_enabled?
41
-
42
- assert result
43
-
44
- end
45
- end
46
-
47
- def test_whether_forwarding_is_disabled
48
- expected_output = '0'
49
- MockShell.stub :execute, expected_output do
50
-
51
- firewall = stubbed_firewall(LinuxFirewall).new
52
- result = firewall.forwarding_enabled?
53
-
54
- refute result
55
-
56
- end
57
- end
58
-
59
- def test_enabling_the_firewall
60
- firewall = stubbed_firewall(LinuxFirewall).new
61
- result = firewall.enable true
62
-
63
- assert_equal result, 'pfctl -e >/dev/null 2>&1'
64
- end
65
-
66
- def test_disabling_the_firewall
67
- firewall = stubbed_firewall(LinuxFirewall).new
68
- result = firewall.enable false
69
-
70
- assert_equal result, 'pfctl -d >/dev/null 2>&1'
71
- end
72
- end
@@ -1,72 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'test_helper'
3
- require 'firewalls/osx'
4
- require 'helpers/mock_shell'
5
-
6
- class OSXFirewallTest < MiniTest::Test
7
- def test_enabling_forwarding
8
- firewall = stubbed_firewall(OSXFirewall).new
9
- result = firewall.enable_forwarding true
10
-
11
- assert_equal result, 'sysctl -w net.inet.ip.forwarding=1'
12
- end
13
-
14
- def test_disabling_forwarding
15
- firewall = stubbed_firewall(OSXFirewall).new
16
- result = firewall.enable_forwarding false
17
-
18
- assert_equal result, 'sysctl -w net.inet.ip.forwarding=0'
19
- end
20
-
21
- def test_enabling_icmp_broadcast
22
- firewall = stubbed_firewall(OSXFirewall).new
23
- result = firewall.enable_icmp_bcast true
24
-
25
- assert_equal result, 'sysctl -w net.inet.icmp.bmcastecho=1'
26
- end
27
-
28
- def test_disabling_icmp_broadcast
29
- firewall = stubbed_firewall(OSXFirewall).new
30
- result = firewall.enable_icmp_bcast false
31
-
32
- assert_equal result, 'sysctl -w net.inet.icmp.bmcastecho=0'
33
- end
34
-
35
- def test_whether_forwarding_is_enabled
36
- expected_output = 'net.inet.ip.forwarding: 1'
37
- MockShell.stub :execute, expected_output do
38
-
39
- firewall = stubbed_firewall(OSXFirewall).new
40
- result = firewall.forwarding_enabled?
41
-
42
- assert result
43
-
44
- end
45
- end
46
-
47
- def test_whether_forwarding_is_disabled
48
- expected_output = 'net.inet.ip.forwarding: 0'
49
- MockShell.stub :execute, expected_output do
50
-
51
- firewall = stubbed_firewall(OSXFirewall).new
52
- result = firewall.forwarding_enabled?
53
-
54
- refute result
55
-
56
- end
57
- end
58
-
59
- def test_enabling_the_firewall
60
- firewall = stubbed_firewall(OSXFirewall).new
61
- result = firewall.enable true
62
-
63
- assert_equal result, 'pfctl -e >/dev/null 2>&1'
64
- end
65
-
66
- def test_disabling_the_firewall
67
- firewall = stubbed_firewall(OSXFirewall).new
68
- result = firewall.enable false
69
-
70
- assert_equal result, 'pfctl -d >/dev/null 2>&1'
71
- end
72
- end
@@ -1,17 +0,0 @@
1
- module MockShell
2
- class << self
3
- # For easy testing, this method just returns back the command it is given.
4
- # The real Shell class will return the output string.
5
- def execute(command)
6
- return command
7
- end
8
-
9
- def ifconfig(iface = '')
10
- self.execute("LANG=en && ifconfig #{iface}")
11
- end
12
-
13
- def arp
14
- self.execute('LANG=en && arp -a')
15
- end
16
- end
17
- end
@@ -1,12 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'test_helper'
3
- require 'logger'
4
-
5
- class LoggerTest < MiniTest::Test
6
- def test_writing_with_a_logfile
7
- silence do |output|
8
- Logger.raw 'Test log message'
9
- assert_equal output.read, "Test log message\n"
10
- end
11
- end
12
- end
@@ -1,14 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'network'
3
-
4
- class NetworkTest < MiniTest::Test
5
- def test_valid_ip_address
6
- valid = Network.is_ip? '127.0.0.1'
7
- assert valid
8
- end
9
-
10
- def test_invalid_ip_address
11
- addresses = ['bad-ip', '255.255.255.255.255', '255.255', '999.999.999.999', 123]
12
- addresses.each { |address| refute Network.is_ip?(address) }
13
- end
14
- end
Binary file
Binary file
Binary file
@@ -1,56 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'proxy/response'
3
-
4
- class TestProxyResponse < MiniTest::Test
5
- def test_response_status_parsing
6
- response = response_with_line 'HTTP/1.1 200 OK'
7
- assert_equal response.headers, ['HTTP/1.1 200 OK']
8
- assert_equal response.code, '200 OK'
9
- end
10
-
11
- def test_content_type_parsing
12
- response = response_with_line 'Content-Type: text/xml'
13
- assert_equal response.headers, ['Content-Type: text/xml']
14
- assert_equal response.content_type, 'text/xml'
15
- end
16
-
17
- def test_content_length_parsing
18
- response = response_with_line 'Content-Length: 1024'
19
- assert_equal response.headers, ['Content-Length: 1024']
20
- assert_equal response.content_length, 1024
21
- end
22
-
23
- def test_reaching_end_of_headers
24
- response = response_with_line 'HTTP/1.1 200 OK'
25
- refute response.headers_done
26
-
27
- response << ''
28
- assert response.headers_done
29
- end
30
-
31
- def test_parsing_response_body
32
- body = 'This line goes into the body'
33
-
34
- response = response_with_line 'HTTP/1.1 200 OK'
35
- response << ''
36
- response << body
37
-
38
- assert_equal response.body, body
39
- end
40
-
41
- def test_textual
42
- text_response = response_with_line 'Content-Type: text/xml'
43
- image_response = response_with_line 'Content-Type: image/png'
44
-
45
- assert text_response.textual?
46
- refute image_response.textual?
47
- end
48
-
49
- private
50
-
51
- def response_with_line(line)
52
- response = Proxy::Response.new
53
- response << line
54
- response
55
- end
56
- end