pwn 0.4.667 → 0.4.668

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
  SHA256:
3
- metadata.gz: 5a4f0feaba882e917c331a010d42bba31372d7d8ab264f2ba73be4722f865e10
4
- data.tar.gz: 19060d5bb2a8be71b62ac7ccdbf06e4d5685971547d80060b56315f7e4c3d7d1
3
+ metadata.gz: 81bb385ebabab222a3d4da59c7eda736aaac086600e3c9710d6680428e05c023
4
+ data.tar.gz: 3227d1e76969e9b89ed2b5ce7090f8f2407288f89aa157b2af33dd4138855e38
5
5
  SHA512:
6
- metadata.gz: 3e4d2c00b17b32b2042d7e76b7c9e9d92ba7d3de8edaeeb46a1975b26687f0a9404e0dd8d420a17cf26d278271f1fcd6f565e7ad279262e7925b2e88e51863d4
7
- data.tar.gz: 37492df2e12eb18cd4145373b9f34bc3a83624caa54187134f45db16c120dc4dc467255baa36fa72db851f4013f35aef5b501fa5fddf84a9e8705b52e4749a22
6
+ metadata.gz: 262b94064b575f5200f500c4ea41e42bde4050d82f95ce8675ea3166c2ee4370126bcdb7222b3e261496e283dd04d85b80b040d939587817a8606f6e3be15559
7
+ data.tar.gz: c2cfd0bc37664e45aca472b1f4682962ad675262fc39363e6830caf05ffaf2e34b27795efdf7b7395cd383e6edd5bcb9a19518162aa7a5de87337335dce83043
data/Gemfile CHANGED
@@ -72,7 +72,7 @@ gem 'ruby-nmap', '1.0.1'
72
72
  gem 'ruby-saml', '1.15.0'
73
73
  gem 'rvm', '1.11.3.9'
74
74
  gem 'savon', '2.14.0'
75
- gem 'selenium-devtools', '0.112.0'
75
+ gem 'selenium-devtools', '0.113.0'
76
76
  gem 'serialport', '1.3.2'
77
77
  gem 'sinatra', '3.0.6'
78
78
  gem 'slack-ruby-client', '2.1.0'
data/README.md CHANGED
@@ -37,7 +37,7 @@ $ rvm use ruby-3.2.2@pwn
37
37
  $ rvm list gemsets
38
38
  $ gem install --verbose pwn
39
39
  $ pwn
40
- pwn[v0.4.667]:001 >>> PWN.help
40
+ pwn[v0.4.668]:001 >>> PWN.help
41
41
  ```
42
42
 
43
43
  [![Installing the pwn Security Automation Framework](https://raw.githubusercontent.com/0dayInc/pwn/master/documentation/pwn_install.png)](https://youtu.be/G7iLUY4FzsI)
@@ -52,7 +52,7 @@ $ rvm use ruby-3.2.2@pwn
52
52
  $ gem uninstall --all --executables pwn
53
53
  $ gem install --verbose pwn
54
54
  $ pwn
55
- pwn[v0.4.667]:001 >>> PWN.help
55
+ pwn[v0.4.668]:001 >>> PWN.help
56
56
  ```
57
57
 
58
58
 
data/bin/pwn CHANGED
@@ -297,6 +297,5 @@ begin
297
297
  prompt: prompt
298
298
  )
299
299
  rescue StandardError => e
300
- puts 1111 if Pry.config.chat_gpt
301
300
  raise e
302
301
  end
@@ -46,7 +46,7 @@ def csv_diff(opts = {})
46
46
  c1_path = opts[:c1_path]
47
47
  c2_path = opts[:c2_path]
48
48
  diff_path = opts[:diff_path]
49
- include_csv_headers = opts[:include_csv_headers]
49
+ no_headers = opts[:no_headers]
50
50
  column_names_to_exclude = opts[:column_names_to_exclude].to_s.split(',')
51
51
 
52
52
  csv1 = CSV.read(c1_path)
@@ -102,10 +102,17 @@ def csv_diff(opts = {})
102
102
  # Write diff again with all columns.
103
103
  csv_headers_orig = larger_csv_orig.first.join(',')
104
104
  File.open(diff_path, 'w') do |f|
105
- f.puts csv_headers_orig if include_csv_headers
106
- larger_csv_orig.each do |line_arr|
107
- line = line_arr.join(',')
108
- f.puts line if diff_csv.include?(line_arr)
105
+ if no_headers
106
+ larger_csv_orig.each do |line_arr|
107
+ line = line_arr.join(',')
108
+ f.puts line if diff_csv.include?(line_arr)
109
+ end
110
+ else
111
+ f.puts csv_headers_orig
112
+ larger_csv_orig(1..-1).each do |line_arr|
113
+ line = line_arr.join(',')
114
+ f.puts line if diff_csv.include?(line_arr)
115
+ end
109
116
  end
110
117
  end
111
118
  end
@@ -115,14 +122,14 @@ c2_path = opts[:c2_path]
115
122
  diff_path = opts[:diff_path]
116
123
  column_names_to_exclude = opts[:column_names_to_exclude]
117
124
 
118
- include_csv_headers = false if opts[:no_headers]
119
- include_csv_headers ||= true
125
+ no_headers = true if opts[:no_headers]
126
+ no_headers ||= false
120
127
 
121
128
  # Compare which two is larger
122
129
  csv_diff(
123
130
  c1_path: c1_path,
124
131
  c2_path: c2_path,
125
132
  diff_path: diff_path,
126
- include_csv_headers: include_csv_headers,
133
+ no_headers: no_headers,
127
134
  column_names_to_exclude: column_names_to_exclude
128
135
  )
@@ -20,13 +20,9 @@ OptionParser.new do |options|
20
20
  opts[:output_results] = o
21
21
  end
22
22
 
23
- options.on('-pPROXY', '--proxy=PROXY', '<Optional - HTTP or Socks Proxy>') do |p|
23
+ options.on('-pPROXY', '--proxy=PROXY', '<Optional - HTTP or Socks Proxy || :tor>') do |p|
24
24
  opts[:proxy] = p
25
25
  end
26
-
27
- options.on('-T', '--[no-]with-tor', '<Optional - Proxy w/ TOR (Defaults to false)>') do |w|
28
- opts[:with_tor] = w
29
- end
30
26
  end.parse!
31
27
 
32
28
  if opts.empty?
@@ -37,13 +33,13 @@ end
37
33
  registrant_filter = opts[:registrant_filter].to_s.strip.chomp.scrub
38
34
  output_results = opts[:output_results].to_s.strip.chomp.scrub
39
35
  proxy = opts[:proxy].to_s.scrub.strip.chomp unless opts[:proxy].nil?
40
- with_tor = opts[:with_tor]
41
36
 
42
37
  begin
43
- if proxy != '' && with_tor
44
- browser_obj = PWN::Plugins::TransparentBrowser.open(browser_type: :headless, proxy: proxy, with_tor: true)
45
- elsif proxy != '' && with_tor.nil?
46
- browser_obj = PWN::Plugins::TransparentBrowser.open(browser_type: :headless, proxy: proxy)
38
+ if proxy
39
+ browser_obj = PWN::Plugins::TransparentBrowser.open(
40
+ browser_type: :headless,
41
+ proxy: proxy
42
+ )
47
43
  else
48
44
  browser_obj = PWN::Plugins::TransparentBrowser.open(browser_type: :headless)
49
45
  end
@@ -14,13 +14,9 @@ OptionParser.new do |options|
14
14
  opts[:regex] = r
15
15
  end
16
16
 
17
- options.on('-pPROXY', '--proxy=PROXY', '<Optional - HTTP or Socks Proxy>') do |p|
17
+ options.on('-pPROXY', '--proxy=PROXY', '<Optional - HTTP or Socks Proxy || :tor>') do |p|
18
18
  opts[:proxy] = p
19
19
  end
20
-
21
- options.on('-T', '--[no-]with-tor', '<Optional - Proxy w/ TOR (Defaults to false)>') do |w|
22
- opts[:with_tor] = w
23
- end
24
20
  end.parse!
25
21
 
26
22
  if opts.empty?
@@ -29,13 +25,11 @@ if opts.empty?
29
25
  end
30
26
 
31
27
  proxy = opts[:proxy]
32
- with_tor = opts[:with_tor]
33
28
  regex = opts[:regex]
34
29
 
35
30
  browser_obj = PWN::WWW::Pastebin.open(
36
31
  browser_type: :headless,
37
- proxy: proxy,
38
- with_tor: with_tor
32
+ proxy: proxy
39
33
  )
40
34
 
41
35
  begin
@@ -38,13 +38,9 @@ OptionParser.new do |options|
38
38
  opts[:mfa] = f
39
39
  end
40
40
 
41
- options.on('-pPROXY', '--proxy=PROXY', '<Optional - HTTP or Socks Proxy>') do |p|
41
+ options.on('-pPROXY', '--proxy=PROXY', '<Optional - HTTP or Socks Proxy || :tor>') do |p|
42
42
  opts[:proxy] = p
43
43
  end
44
-
45
- options.on('-T', '--[no-]with-tor', '<Optional - Proxy w/ TOR (Defaults to false)>') do |w|
46
- opts[:with_tor] = w
47
- end
48
44
  end.parse!
49
45
 
50
46
  if opts.empty?
@@ -88,7 +84,6 @@ else
88
84
  end
89
85
 
90
86
  proxy = opts[:proxy].to_s.scrub.strip.chomp unless opts[:proxy].nil?
91
- with_tor = opts[:with_tor]
92
87
 
93
88
  begin
94
89
  def get_web_cache_deception(opts = {})
@@ -157,18 +152,10 @@ begin
157
152
 
158
153
  puts "#{@green}Leveraging PWN::WWW::#{pwn_www_mod_str} to Obtain a Post AuhN State...#{@end_of_color}"
159
154
  if proxy
160
- if with_tor
161
- browser_obj = pwn_www_mod.open(
162
- browser_type: :chrome,
163
- proxy: proxy,
164
- with_tor: true
165
- )
166
- else
167
- browser_obj = pwn_www_mod.open(
168
- browser_type: :chrome,
169
- proxy: proxy
170
- )
171
- end
155
+ browser_obj = pwn_www_mod.open(
156
+ browser_type: :chrome,
157
+ proxy: proxy
158
+ )
172
159
  else
173
160
  browser_obj = pwn_www_mod.open(browser_type: :chrome)
174
161
  end
@@ -181,18 +168,10 @@ begin
181
168
  )
182
169
  puts "#{@green}complete.#{@end_of_color}\n\n\n"
183
170
  elsif pwn_www_mod_str == '' && proxy
184
- if with_tor
185
- browser_obj = PWN::Plugins::TransparentBrowser.open(
186
- browser_type: :chrome,
187
- proxy: proxy,
188
- with_tor: true
189
- )
190
- else
191
- browser_obj = PWN::Plugins::TransparentBrowser.open(
192
- browser_type: :chrome,
193
- proxy: proxy
194
- )
195
- end
171
+ browser_obj = PWN::Plugins::TransparentBrowser.open(
172
+ browser_type: :chrome,
173
+ proxy: proxy
174
+ )
196
175
  else
197
176
  browser_obj = PWN::Plugins::TransparentBrowser.open(browser_type: :chrome)
198
177
  end
data/bin/pwn_www_checkip CHANGED
@@ -10,28 +10,24 @@ OptionParser.new do |options|
10
10
  #{$PROGRAM_NAME} [opts]
11
11
  "
12
12
 
13
- options.on('-pPROXY', '--proxy=PROXY', '<Optional - HTTP or Socks Proxy>') do |p|
13
+ options.on('-pPROXY', '--proxy=PROXY', '<Optional - HTTP or Socks Proxy || :tor>') do |p|
14
14
  opts[:proxy] = p
15
15
  end
16
16
 
17
- options.on('-T', '--[no-]with-tor', '<Optional - Proxy w/ TOR (Defaults to false)>') do |w|
18
- opts[:with_tor] = w
19
- end
20
-
21
17
  options.on('-i', '--[no-]ipinfo', '<Optional - Return Details about Public IP Returned from CheckIP>') do |i|
22
18
  opts[:ipinfo] = i
23
19
  end
24
20
  end.parse!
25
21
 
26
22
  proxy = opts[:proxy].to_s.scrub.strip.chomp unless opts[:proxy].nil?
27
- with_tor = opts[:with_tor]
28
23
  ipinfo = opts[:ipinfo]
29
24
 
30
25
  begin
31
- if proxy != '' && with_tor
32
- browser_obj = PWN::Plugins::TransparentBrowser.open(browser_type: :rest, proxy: proxy, with_tor: true)::Request
33
- elsif proxy != '' && with_tor.nil?
34
- browser_obj = PWN::Plugins::TransparentBrowser.open(browser_type: :rest, proxy: proxy)::Request
26
+ if proxy
27
+ browser_obj = PWN::Plugins::TransparentBrowser.open(
28
+ browser_type: :rest,
29
+ proxy: proxy
30
+ )::Request
35
31
  else
36
32
  browser_obj = PWN::Plugins::TransparentBrowser.open(browser_type: :rest)::Request
37
33
  end
@@ -26,14 +26,10 @@ OptionParser.new do |options|
26
26
  opts[:browser_type] = b
27
27
  end
28
28
 
29
- options.on('-pPROXY', '--proxy=PROXY', '<Optional - HTTP or Socks Proxy>') do |p|
29
+ options.on('-pPROXY', '--proxy=PROXY', '<Optional - HTTP or Socks Proxy || :tor>') do |p|
30
30
  opts[:proxy] = p
31
31
  end
32
32
 
33
- options.on('-T', '--[no-]with-tor', '<Optional - Proxy w/ TOR (Defaults to false)>') do |w|
34
- opts[:with_tor] = w
35
- end
36
-
37
33
  options.on('-S', '--[no-]spider-fqdn', '<Optional - Spider Target FQDN>') do |s|
38
34
  opts[:spider] = s
39
35
  end
@@ -56,7 +52,6 @@ else
56
52
  end
57
53
 
58
54
  proxy = opts[:proxy].to_s.scrub.strip.chomp unless opts[:proxy].nil?
59
- with_tor = opts[:with_tor]
60
55
 
61
56
  if opts[:spider]
62
57
  spider = true
@@ -109,18 +104,10 @@ begin
109
104
  end
110
105
 
111
106
  if proxy
112
- if with_tor
113
- browser_obj = PWN::Plugins::TransparentBrowser.open(
114
- browser_type: browser_type,
115
- proxy: proxy,
116
- with_tor: true
117
- )
118
- else
119
- browser_obj = PWN::Plugins::TransparentBrowser.open(
120
- browser_type: browser_type,
121
- proxy: proxy
122
- )
123
- end
107
+ browser_obj = PWN::Plugins::TransparentBrowser.open(
108
+ browser_type: browser_type,
109
+ proxy: proxy
110
+ )
124
111
  else
125
112
  browser_obj = PWN::Plugins::TransparentBrowser.open(browser_type: browser_type)
126
113
  end
@@ -71,7 +71,7 @@ module PWN
71
71
  end
72
72
 
73
73
  # Supported Method Parameters::
74
- # PWN::Plugins::OwaspZap.start(
74
+ # zap_obj = PWN::Plugins::OwaspZap.start(
75
75
  # api_key: 'required - api key for API authorization',
76
76
  # zap_bin_path: 'optional - path to zap.sh file'
77
77
  # headless: 'optional - run zap headless if set to true',
@@ -467,17 +467,12 @@ module PWN
467
467
 
468
468
  # Supported Method Parameters::
469
469
  # PWN::Plugins::OwaspZap.stop(
470
- # :zap_obj => 'required - zap_obj returned from #open method'
470
+ # :zap_obj => 'required - zap_obj returned from #start method'
471
471
  # )
472
472
 
473
473
  public_class_method def self.stop(opts = {})
474
474
  zap_obj = opts[:zap_obj]
475
- unless zap_obj.nil?
476
- pid = zap_obj[:pid]
477
- # File.unlink(zap_obj[:stdout_log]) if File.exist?(zap_obj[:stdout_log])
478
-
479
- Process.kill('TERM', pid)
480
- end
475
+ Process.kill('TERM', zab_obj[:pid]) unless zap_obj.nil?
481
476
  rescue StandardError => e
482
477
  raise e
483
478
  end
@@ -538,7 +533,7 @@ module PWN
538
533
  )
539
534
 
540
535
  #{self}.stop(
541
- zap_obj: 'required - zap_obj returned from #open method'
536
+ zap_obj: 'required - zap_obj returned from #start method'
542
537
  )
543
538
 
544
539
  #{self}.authors
@@ -0,0 +1,221 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pty'
4
+
5
+ module PWN
6
+ module Plugins
7
+ # This plugin processes images into readable text
8
+ module Tor
9
+ # Supported Method Parameters::
10
+ # tor_ctrl_cmd(
11
+ # tor_obj: 'required - tor_obj returned from #start method'
12
+ # cmd: 'required - Tor control command to execute',
13
+ # response_timeout: 'optional - float in seconds to timeout (default: 3.0)'
14
+ # )
15
+
16
+ private_class_method def self.tor_control_cmd(opts = {})
17
+ tor_obj = opts[:tor_obj]
18
+ cmd = opts[:cmd]
19
+ response_timeout = opts[:response_timeout]
20
+ response_timeout ||= 3.0
21
+
22
+ ctrl_ip = tor_obj[:ip]
23
+ ctrl_port = tor_obj[:ctrl_port]
24
+ cookie_authn = tor_obj[:cookie_authn]
25
+
26
+ sock_obj = PWN::Plugins::Sock.connect(
27
+ target: ctrl_ip,
28
+ port: ctrl_port
29
+ )
30
+
31
+ cmd_hist_arr = []
32
+ cmd_hash = { cmd: "AUTHENTICATE #{cookie_authn}\r\n" }
33
+ sock_obj.write(cmd_hash[:cmd])
34
+ does_respond = sock_obj.wait_readable(response_timeout)
35
+ if does_respond
36
+ response = sock_obj.readline.chomp
37
+ cmd_hash[:resp] = response
38
+ cmd_hist_arr.push(cmd_hash)
39
+ if response == '250 OK'
40
+ cmd_hash = { cmd: "#{cmd}\r\n" }
41
+ sock_obj.write(cmd_hash[:cmd])
42
+ does_respond = sock_obj.wait_readable(response_timeout)
43
+ if does_respond
44
+ response = sock_obj.readline.chomp
45
+ cmd_hash[:resp] = response
46
+ cmd_hist_arr.push(cmd_hash)
47
+ if response == '250 OK'
48
+ cmd_hash = { cmd: "QUIT\r\n" }
49
+ sock_obj.write(cmd_hash[:cmd])
50
+ does_respond = sock_obj.wait_readable(response_timeout)
51
+ if does_respond
52
+ response = sock_obj.readline.chomp
53
+ else
54
+ response = '900 NO CMD RESPONSE'
55
+ end
56
+ end
57
+ else
58
+ response = '900 NO CMD RESPONSE'
59
+ end
60
+ cmd_hash[:resp] = response
61
+ cmd_hist_arr.push(cmd_hash)
62
+ end
63
+ else
64
+ response = '700 NO AUTHENTICATE RESPONSE'
65
+ cmd_hash[:resp] = response
66
+ cmd_hist_arr.push(cmd_hash)
67
+ end
68
+ sock_obj = PWN::Plugins::Sock.disconnect(sock_obj: sock_obj)
69
+
70
+ cmd_hist_arr
71
+ rescue StandardError => e
72
+ stop(tor_obj: tor_obj)
73
+ end
74
+
75
+ # Supported Method Parameters::
76
+ # tor_obj = PWN::Plugins::Tor.start(
77
+ # ip: 'optional - IP address to listen (default: 127.0.0.1)',
78
+ # port: 'optional - socks port to listen (default: 1024-65535)',
79
+ # ctrl_port: 'optional - tor control port to listen (default: 1024-65535)',
80
+ # data_dir: 'optional - directory to keep tor session data (default: /tmp/tor_pwn-TIMESTAMP)'
81
+ # )
82
+
83
+ public_class_method def self.start(opts = {})
84
+ ip = opts[:ip]
85
+ ip ||= '127.0.0.1'
86
+ port = opts[:port].to_i
87
+ port = PWN::Plugins::Sock.get_random_unused_port if port.zero?
88
+ ctrl_port = opts[:ctrl_port].to_i
89
+ if ctrl_port.zero?
90
+ loop do
91
+ ctrl_port = PWN::Plugins::Sock.get_random_unused_port
92
+ break if ctrl_port != port
93
+ end
94
+ end
95
+ timestamp = Time.now.strftime('%Y-%m-%d_%H-%M-%S.%N%z')
96
+ data_dir = opts[:data_dir]
97
+ data_dir ||= "/tmp/tor_pwn-#{timestamp}"
98
+ FileUtils.mkdir_p(data_dir)
99
+
100
+ socks_proxy = "#{ip}:#{port}"
101
+ pid_file = "#{data_dir}/tor.pid"
102
+ cookie_authn_file = "#{data_dir}/control_auth_cookie"
103
+ session_log_path = "#{data_dir}/stdout-session.log"
104
+ session_log = File.new(session_log_path, 'w')
105
+ session_log.sync = true
106
+ session_log.fsync
107
+
108
+ fork_pid = Process.fork do
109
+ pty = PTY.spawn(
110
+ 'tor',
111
+ 'DataDirectory',
112
+ data_dir,
113
+ 'SocksPort',
114
+ socks_proxy,
115
+ 'ControlPort',
116
+ ctrl_port.to_s,
117
+ 'CookieAuthentication',
118
+ '1'
119
+ ) do |stdout, _stdin, pid|
120
+ File.write(pid_file, pid)
121
+ stdout.each do |line|
122
+ session_log.puts line
123
+ end
124
+ end
125
+ rescue StandardError => e
126
+ puts 'Tor exiting with errors...'
127
+ FileUtils.rm_rf(data_dir)
128
+ raise e
129
+ end
130
+ Process.detach(fork_pid)
131
+
132
+ loop do
133
+ pid_ready = File.exist?(pid_file)
134
+ cookie_authn_ready = File.exist?(cookie_authn_file)
135
+ sleep 0.1
136
+ break if pid_ready && cookie_authn_ready
137
+ end
138
+
139
+ cookie_authn = `hexdump -e '32/1 "%02x"' #{cookie_authn_file}`
140
+ tor_obj = {
141
+ parent_pid: fork_pid,
142
+ child_pid: File.read(pid_file).to_i,
143
+ ip: ip,
144
+ port: port,
145
+ ctrl_port: ctrl_port,
146
+ data_dir: data_dir,
147
+ cookie_authn: cookie_authn
148
+ }
149
+ rescue StandardError, SystemExit => e
150
+ stop(tor_obj) unless tor_obj.nil?
151
+ raise e
152
+ end
153
+
154
+ # Supported Method Parameters::
155
+ # PWN::Plugins::Tor.switch_exit_node(
156
+ # tor_obj: 'required - tor_obj returned from #start method',
157
+ # response_timeout: 'optional - float in seconds to timeout (default: 3.0)'
158
+ # )
159
+
160
+ public_class_method def self.switch_exit_node(opts = {})
161
+ tor_obj = opts[:tor_obj]
162
+ response_timeout = opts[:response_timeout]
163
+ tor_control_cmd(
164
+ tor_obj: tor_obj,
165
+ cmd: 'SIGNAL NEWNYM',
166
+ response_timeout: response_timeout
167
+ )
168
+ rescue StandardError => e
169
+ raise e
170
+ end
171
+
172
+ # Supported Method Parameters::
173
+ # PWN::Plugins::Tor.stop(
174
+ # tor_obj: 'required - tor_obj returned from #start method'
175
+ # )
176
+
177
+ public_class_method def self.stop(opts = {})
178
+ tor_obj = opts[:tor_obj]
179
+ unless tor_obj.nil?
180
+ FileUtils.rm_rf(tor_obj[:data_dir])
181
+ Process.kill('TERM', tor_obj[:child_pid])
182
+ Process.kill('TERM', tor_obj[:parent_pid])
183
+ end
184
+ rescue StandardError => e
185
+ raise e
186
+ end
187
+
188
+ # Author(s):: 0day Inc. <request.pentest@0dayinc.com>
189
+
190
+ public_class_method def self.authors
191
+ "AUTHOR(S):
192
+ 0day Inc. <request.pentest@0dayinc.com>
193
+ "
194
+ end
195
+
196
+ # Display Usage for this Module
197
+
198
+ public_class_method def self.help
199
+ puts "USAGE:
200
+ tor_obj = #{self}.start(
201
+ ip: 'optional - IP address to listen (default: 127.0.0.1)',
202
+ port: 'optional - socks port to listen (default: 9050)',
203
+ ctrl_port: 'optional - tor control port to listen (default: 9051)',
204
+ data_dir: 'optional - directory to keep tor session data (default: /tmp/tor_pwn-TIMESTAMP)'
205
+ )
206
+
207
+ #{self}.switch_exit_node(
208
+ tor_obj: 'required - tor_obj returned from #start method',
209
+ response_timeout: 'optional - float in seconds to timeout (default: 3.0)'
210
+ )
211
+
212
+ #{self}.stop(
213
+ tor_obj: 'required - tor_obj returned from #start method'
214
+ )
215
+
216
+ #{self}.authors
217
+ "
218
+ end
219
+ end
220
+ end
221
+ end
@@ -9,6 +9,17 @@ require 'openssl'
9
9
  require 'em/pure_ruby'
10
10
  require 'faye/websocket'
11
11
 
12
+ # Monkey Patch Watir
13
+ module Watir
14
+ # Browser Class to allow tor_obj from PWN::Plugins::Tor.start
15
+ # to populate attr_accessor :tor_obj
16
+ # This was done this way soley to maintain backwards compatibility
17
+ # with how browser_obj is returned.
18
+ class Browser
19
+ attr_accessor :tor_obj
20
+ end
21
+ end
22
+
12
23
  module PWN
13
24
  module Plugins
14
25
  # This plugin rocks. Chrome, Firefox, PhantomJS, IE, REST Client,
@@ -23,8 +34,7 @@ module PWN
23
34
  # Supported Method Parameters::
24
35
  # browser_obj1 = PWN::Plugins::TransparentBrowser.open(
25
36
  # browser_type: :firefox|:chrome|:headless|:rest|:websocket,
26
- # proxy: 'optional - scheme://proxy_host:port',
27
- # with_tor: 'optional - boolean (defaults to false)'
37
+ # proxy: 'optional - scheme://proxy_host:port || :tor',
28
38
  # with_devtools: 'optional - boolean (defaults to false)'
29
39
  # )
30
40
 
@@ -32,7 +42,13 @@ module PWN
32
42
  this_browser = nil
33
43
  browser_type = opts[:browser_type]
34
44
  proxy = opts[:proxy].to_s unless opts[:proxy].nil?
35
- opts[:with_tor] ? (with_tor = true) : (with_tor = false)
45
+
46
+ tor_obj = nil
47
+ if opts[:proxy] == :tor
48
+ tor_obj = PWN::Plugins::Tor.start if opts[:proxy] == :tor
49
+ proxy = "socks5://#{tor_obj[:ip]}:#{tor_obj[:port]}"
50
+ end
51
+
36
52
  opts[:with_devtools] ? (with_devtools = true) : (with_devtools = false)
37
53
 
38
54
  # Let's crank up the default timeout from 30 seconds to 15 min for slow sites
@@ -77,10 +93,10 @@ module PWN
77
93
  if proxy
78
94
  this_profile['network.proxy.type'] = 1
79
95
  this_profile['network.proxy.allow_hijacking_localhost'] = true
80
- if with_tor
96
+ if tor_obj
81
97
  this_profile['network.proxy.socks_version'] = 5
82
- this_profile['network.proxy.socks'] = URI(proxy).host
83
- this_profile['network.proxy.socks_port'] = URI(proxy).port
98
+ this_profile['network.proxy.socks'] = tor_obj[:ip]
99
+ this_profile['network.proxy.socks_port'] = tor_obj[:port]
84
100
  else
85
101
  this_profile['network.proxy.ftp'] = URI(proxy).host
86
102
  this_profile['network.proxy.ftp_port'] = URI(proxy).port
@@ -110,7 +126,7 @@ module PWN
110
126
  switches.push('--disable-notifications')
111
127
 
112
128
  if proxy
113
- switches.push("--host-resolver-rules='MAP * 0.0.0.0 , EXCLUDE #{URI(proxy).host}'") if with_tor
129
+ switches.push("--host-resolver-rules='MAP * 0.0.0.0 , EXCLUDE #{tor_obj[:ip]}'") if tor_obj
114
130
  switches.push("--proxy-server=#{proxy}")
115
131
  end
116
132
 
@@ -167,10 +183,10 @@ module PWN
167
183
  if proxy
168
184
  this_profile['network.proxy.type'] = 1
169
185
  this_profile['network.proxy.allow_hijacking_localhost'] = true
170
- if with_tor
186
+ if tor_obj
171
187
  this_profile['network.proxy.socks_version'] = 5
172
- this_profile['network.proxy.socks'] = URI(proxy).host
173
- this_profile['network.proxy.socks_port'] = URI(proxy).port
188
+ this_profile['network.proxy.socks'] = tor_obj[:ip]
189
+ this_profile['network.proxy.socks_port'] = tor_obj[:port]
174
190
  else
175
191
  this_profile['network.proxy.ftp'] = URI(proxy).host
176
192
  this_profile['network.proxy.ftp_port'] = URI(proxy).port
@@ -183,7 +199,6 @@ module PWN
183
199
 
184
200
  options = Selenium::WebDriver::Firefox::Options.new(args: ['-headless'], accept_insecure_certs: true)
185
201
  options.profile = this_profile
186
- # driver = Selenium::WebDriver.for(:firefox, capabilities: options)
187
202
  driver = Selenium::WebDriver.for(:firefox, options: options)
188
203
  this_browser = Watir::Browser.new(driver)
189
204
 
@@ -198,7 +213,7 @@ module PWN
198
213
  switches.push('--disable-notifications')
199
214
 
200
215
  if proxy
201
- switches.push("--host-resolver-rules='MAP * 0.0.0.0 , EXCLUDE #{URI(proxy).host}'") if with_tor
216
+ switches.push("--host-resolver-rules='MAP * 0.0.0.0 , EXCLUDE #{tor_obj[:ip]}'") if tor_obj
202
217
  switches.push("--proxy-server=#{proxy}")
203
218
  end
204
219
 
@@ -208,16 +223,15 @@ module PWN
208
223
  )
209
224
 
210
225
  options.profile = this_profile
211
- # driver = Selenium::WebDriver.for(:chrome, capabilities: options)
212
226
  driver = Selenium::WebDriver.for(:chrome, options: options)
213
227
  this_browser = Watir::Browser.new(driver)
214
228
 
215
229
  when :rest
216
230
  this_browser = RestClient
217
231
  if proxy
218
- if with_tor
219
- TCPSocket.socks_server = URI(proxy).host
220
- TCPSocket.socks_port = URI(proxy).port
232
+ if tor_obj
233
+ TCPSocket.socks_server = tor_obj[:ip]
234
+ TCPSocket.socks_port = tor_obj[:port]
221
235
  else
222
236
  this_browser.proxy = proxy
223
237
  end
@@ -225,9 +239,9 @@ module PWN
225
239
 
226
240
  when :websocket
227
241
  if proxy
228
- if with_tor
229
- TCPSocket.socks_server = URI(proxy).host
230
- TCPSocket.socks_port = URI(proxy).port
242
+ if tor_obj
243
+ TCPSocket.socks_server = tor_obj[:ip]
244
+ TCPSocket.socks_port = tor_obj[:port]
231
245
  end
232
246
  proxy_opts = { origin: proxy }
233
247
  tls_opts = { verify_peer: false }
@@ -247,6 +261,7 @@ module PWN
247
261
  return nil
248
262
  end
249
263
 
264
+ this_browser.tor_obj = tor_obj if tor_obj
250
265
  this_browser
251
266
  rescue StandardError => e
252
267
  raise e
@@ -300,6 +315,11 @@ module PWN
300
315
  public_class_method def self.close(opts = {})
301
316
  this_browser_obj = opts[:browser_obj]
302
317
 
318
+ if this_browser_obj.respond_to?('tor_obj')
319
+ tor_obj = this_browser_obj.tor_obj
320
+ PWN::Plugins::Tor.stop(tor_obj: tor_obj)
321
+ end
322
+
303
323
  unless this_browser_obj.to_s.include?('RestClient')
304
324
  # Close the browser unless this_browser_obj.nil? (thus the &)
305
325
  this_browser_obj&.close
@@ -323,8 +343,7 @@ module PWN
323
343
  puts "USAGE:
324
344
  browser_obj1 = #{self}.open(
325
345
  browser_type: :firefox|:chrome|:headless_chrome|:headless_firefox|:rest|:websocket,
326
- proxy: 'optional scheme://proxy_host:port',
327
- with_tor: 'optional boolean (defaults to false)',
346
+ proxy: 'optional scheme://proxy_host:port || :tor',
328
347
  with_devtools: 'optional - boolean (defaults to false)'
329
348
  )
330
349
  puts browser_obj1.public_methods
data/lib/pwn/plugins.rb CHANGED
@@ -58,6 +58,7 @@ module PWN
58
58
  autoload :Spider, 'pwn/plugins/spider'
59
59
  autoload :SSN, 'pwn/plugins/ssn'
60
60
  autoload :ThreadPool, 'pwn/plugins/thread_pool'
61
+ autoload :Tor, 'pwn/plugins/tor'
61
62
  autoload :TransparentBrowser, 'pwn/plugins/transparent_browser'
62
63
  autoload :TwitterAPI, 'pwn/plugins/twitter_api'
63
64
  autoload :URIScheme, 'pwn/plugins/uri_scheme'
data/lib/pwn/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PWN
4
- VERSION = '0.4.667'
4
+ VERSION = '0.4.668'
5
5
  end
@@ -9,8 +9,7 @@ module PWN
9
9
  # Supported Method Parameters::
10
10
  # browser_obj = PWN::WWW::AppCobaltIO.open(
11
11
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
12
- # proxy: 'optional - scheme://proxy_host:port',
13
- # with_tor: 'optional - boolean (defaults to false)'
12
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
14
13
  # )
15
14
 
16
15
  public_class_method def self.open(opts = {})
@@ -109,8 +108,7 @@ module PWN
109
108
  puts "USAGE:
110
109
  browser_obj = #{self}.open(
111
110
  browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
112
- proxy: 'optional - scheme://proxy_host:port',
113
- with_tor: 'optional - boolean (defaults to false)'
111
+ proxy: 'optional - scheme://proxy_host:port || :tor'
114
112
  )
115
113
  puts browser_obj.public_methods
116
114
 
data/lib/pwn/www/bing.rb CHANGED
@@ -7,8 +7,7 @@ module PWN
7
7
  # Supported Method Parameters::
8
8
  # browser_obj = PWN::WWW::Bing.open(
9
9
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
10
- # proxy: 'optional scheme://proxy_host:port',
11
- # with_tor: 'optional boolean (defaults to false)'
10
+ # proxy: 'optional scheme://proxy_host:port || :tor'
12
11
  # )
13
12
 
14
13
  public_class_method def self.open(opts = {})
@@ -67,8 +66,7 @@ module PWN
67
66
  puts "USAGE:
68
67
  browser_obj = #{self}.open(
69
68
  browser_type: 'optional :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
70
- proxy: 'optional scheme://proxy_host:port',
71
- with_tor: 'optional boolean (defaults to false)'
69
+ proxy: 'optional scheme://proxy_host:port || :tor'
72
70
  )
73
71
  puts browser_obj.public_methods
74
72
 
@@ -9,8 +9,7 @@ module PWN
9
9
  # Supported Method Parameters::
10
10
  # browser_obj = PWN::WWW::BugCrowd.open(
11
11
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
12
- # proxy: 'optional - scheme://proxy_host:port',
13
- # with_tor: 'optional - boolean (defaults to false)'
12
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
14
13
  # )
15
14
 
16
15
  public_class_method def self.open(opts = {})
@@ -106,8 +105,7 @@ module PWN
106
105
  puts "USAGE:
107
106
  browser_obj = #{self}.open(
108
107
  browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
109
- proxy: 'optional - scheme://proxy_host:port',
110
- with_tor: 'optional - boolean (defaults to false)'
108
+ proxy: 'optional - scheme://proxy_host:port || :tor'
111
109
  )
112
110
  puts browser_obj.public_methods
113
111
 
@@ -10,8 +10,7 @@ module PWN
10
10
  # Supported Method Parameters::
11
11
  # browser_obj = PWN::WWW::Checkip.open(
12
12
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
13
- # proxy: 'optional - scheme://proxy_host:port',
14
- # with_tor: 'optional - boolean (defaults to false)'
13
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
15
14
  # )
16
15
 
17
16
  public_class_method def self.open(opts = {})
@@ -54,8 +53,7 @@ module PWN
54
53
  puts "USAGE:
55
54
  browser_obj = #{self}.open(
56
55
  browser_type: 'optional :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
57
- proxy: 'optional - scheme://proxy_host:port',
58
- with_tor: 'optional - boolean (defaults to false)'
56
+ proxy: 'optional - scheme://proxy_host:port || :tor'
59
57
  )
60
58
  puts browser_obj.public_methods
61
59
 
@@ -9,8 +9,7 @@ module PWN
9
9
  # Supported Method Parameters::
10
10
  # browser_obj = PWN::WWW::CoinbasePro.open(
11
11
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
12
- # proxy: 'optional - scheme://proxy_host:port',
13
- # with_tor: 'optional - boolean (defaults to false)'
12
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
14
13
  # )
15
14
 
16
15
  public_class_method def self.open(opts = {})
@@ -106,8 +105,7 @@ module PWN
106
105
  puts "USAGE:
107
106
  browser_obj = #{self}.open(
108
107
  browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
109
- proxy: 'optional - scheme://proxy_host:port',
110
- with_tor: 'optional - boolean (defaults to false)'
108
+ proxy: 'optional - scheme://proxy_host:port || :tor'
111
109
  )
112
110
  puts browser_obj.public_methods
113
111
 
@@ -7,8 +7,7 @@ module PWN
7
7
  # Supported Method Parameters::
8
8
  # browser_obj = PWN::WWW::Duckduckgo.open(
9
9
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
10
- # proxy: 'optional - scheme://proxy_host:port',
11
- # with_tor: 'optional - boolean (defaults to false)'
10
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
12
11
  # )
13
12
 
14
13
  public_class_method def self.open(opts = {})
@@ -85,8 +84,7 @@ module PWN
85
84
  puts "USAGE:
86
85
  browser_obj = #{self}.open(
87
86
  browser_type: 'optional :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
88
- proxy: 'optional - scheme://proxy_host:port',
89
- with_tor: 'optional - boolean (defaults to false)'
87
+ proxy: 'optional - scheme://proxy_host:port || :tor'
90
88
  )
91
89
  puts browser_obj.public_methods
92
90
 
@@ -9,8 +9,7 @@ module PWN
9
9
  # Supported Method Parameters::
10
10
  # browser_obj = PWN::WWW::Facebook.open(
11
11
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
12
- # proxy: 'optional - scheme://proxy_host:port',
13
- # with_tor: 'optional - boolean (defaults to false)'
12
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
14
13
  # )
15
14
 
16
15
  public_class_method def self.open(opts = {})
@@ -95,8 +94,7 @@ module PWN
95
94
  puts "USAGE:
96
95
  browser_obj = #{self}.open(
97
96
  browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
98
- proxy: 'optional - scheme://proxy_host:port',
99
- with_tor: 'optional - boolean (defaults to false)'
97
+ proxy: 'optional - scheme://proxy_host:port || :tor'
100
98
  )
101
99
  puts browser_obj.public_methods
102
100
 
@@ -7,8 +7,7 @@ module PWN
7
7
  # Supported Method Parameters::
8
8
  # browser_obj = PWN::WWW::Google.open(
9
9
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
10
- # proxy: 'optional - scheme://proxy_host:port',
11
- # with_tor: 'optional - boolean (defaults to false)'
10
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
12
11
  # )
13
12
 
14
13
  public_class_method def self.open(opts = {})
@@ -87,8 +86,7 @@ module PWN
87
86
  puts "USAGE:
88
87
  browser_obj = #{self}.open(
89
88
  browser_type: 'optional :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
90
- proxy: 'optional - scheme://proxy_host:port',
91
- with_tor: 'optional - boolean (defaults to false)'
89
+ proxy: 'optional - scheme://proxy_host:port || :tor'
92
90
  )
93
91
  puts browser_obj.public_methods
94
92
 
@@ -9,8 +9,7 @@ module PWN
9
9
  # Supported Method Parameters::
10
10
  # browser_obj = PWN::WWW::HackerOne.open(
11
11
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
12
- # proxy: 'optional - scheme://proxy_host:port',
13
- # with_tor: 'optional - boolean (defaults to false)'
12
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
14
13
  # )
15
14
 
16
15
  public_class_method def self.open(opts = {})
@@ -95,8 +94,7 @@ module PWN
95
94
  puts "USAGE:
96
95
  browser_obj = #{self}.open(
97
96
  browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
98
- proxy: 'optional - scheme://proxy_host:port',
99
- with_tor: 'optional - boolean (defaults to false)'
97
+ proxy: 'optional - scheme://proxy_host:port || :tor'
100
98
  )
101
99
  puts browser_obj.public_methods
102
100
 
@@ -9,8 +9,7 @@ module PWN
9
9
  # Supported Method Parameters::
10
10
  # browser_obj = PWN::WWW::Linkedin.open(
11
11
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
12
- # proxy: 'optional - scheme://proxy_host:port',
13
- # with_tor: 'optional - boolean (defaults to false)'
12
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
14
13
  # )
15
14
 
16
15
  public_class_method def self.open(opts = {})
@@ -95,8 +94,7 @@ module PWN
95
94
  puts "USAGE:
96
95
  browser_obj = #{self}.open(
97
96
  browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
98
- proxy: 'optional - scheme://proxy_host:port',
99
- with_tor: 'optional - boolean (defaults to false)'
97
+ proxy: 'optional - scheme://proxy_host:port || :tor'
100
98
  )
101
99
  puts browser_obj.public_methods
102
100
 
@@ -9,8 +9,7 @@ module PWN
9
9
  # Supported Method Parameters::
10
10
  # browser_obj = PWN::WWW::Pandora.open(
11
11
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
12
- # proxy: 'optional - scheme://proxy_host:port',
13
- # with_tor: 'optional - boolean (defaults to false)'
12
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
14
13
  # )
15
14
 
16
15
  public_class_method def self.open(opts = {})
@@ -95,8 +94,7 @@ module PWN
95
94
  puts "USAGE:
96
95
  browser_obj = #{self}.open(
97
96
  browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
98
- proxy: 'optional - scheme://proxy_host:port',
99
- with_tor: 'optional - boolean (defaults to false)'
97
+ proxy: 'optional - scheme://proxy_host:port || :tor'
100
98
  )
101
99
  puts browser_obj.public_methods
102
100
 
@@ -7,8 +7,7 @@ module PWN
7
7
  # Supported Method Parameters::
8
8
  # browser_obj = PWN::WWW::Pastebin.open(
9
9
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
10
- # proxy: 'optional - scheme://proxy_host:port',
11
- # with_tor: 'optional - boolean (defaults to false)'
10
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
12
11
  # )
13
12
 
14
13
  public_class_method def self.open(opts = {})
@@ -63,8 +62,7 @@ module PWN
63
62
  puts "USAGE:
64
63
  browser_obj = #{self}.open(
65
64
  browser_type: 'optional :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
66
- proxy: 'optional - scheme://proxy_host:port',
67
- with_tor: 'optional - boolean (defaults to false)'
65
+ proxy: 'optional - scheme://proxy_host:port || :tor'
68
66
  )
69
67
  puts browser_obj.public_methods
70
68
 
@@ -9,8 +9,7 @@ module PWN
9
9
  # Supported Method Parameters::
10
10
  # browser_obj = PWN::WWW::Paypal.open(
11
11
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
12
- # proxy: 'optional - scheme://proxy_host:port',
13
- # with_tor: 'optional - boolean (defaults to false)'
12
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
14
13
  # )
15
14
 
16
15
  public_class_method def self.open(opts = {})
@@ -163,8 +162,7 @@ module PWN
163
162
  puts "USAGE:
164
163
  browser_obj = #{self}.open(
165
164
  browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
166
- proxy: 'optional - scheme://proxy_host:port',
167
- with_tor: 'optional - boolean (defaults to false)'
165
+ proxy: 'optional - scheme://proxy_host:port || :tor'
168
166
  )
169
167
  puts browser_obj.public_methods
170
168
 
@@ -9,8 +9,7 @@ module PWN
9
9
  # Supported Method Parameters::
10
10
  # browser_obj = PWN::WWW::Synack.open(
11
11
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
12
- # proxy: 'optional - scheme://proxy_host:port',
13
- # with_tor: 'optional - boolean (defaults to false)'
12
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
14
13
  # )
15
14
 
16
15
  public_class_method def self.open(opts = {})
@@ -106,8 +105,7 @@ module PWN
106
105
  puts "USAGE:
107
106
  browser_obj = #{self}.open(
108
107
  browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
109
- proxy: 'optional - scheme://proxy_host:port',
110
- with_tor: 'optional - boolean (defaults to false)'
108
+ proxy: 'optional - scheme://proxy_host:port || :tor'
111
109
  )
112
110
  puts browser_obj.public_methods
113
111
 
data/lib/pwn/www/torch.rb CHANGED
@@ -7,8 +7,7 @@ module PWN
7
7
  # Supported Method Parameters::
8
8
  # browser_obj = PWN::WWW::Torch.open(
9
9
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
10
- # proxy: 'optional - scheme://proxy_host:port',
11
- # with_tor: 'optional - boolean (defaults to false)'
10
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
12
11
  # )
13
12
 
14
13
  public_class_method def self.open(opts = {})
@@ -81,8 +80,7 @@ module PWN
81
80
  puts "USAGE:
82
81
  browser_obj = #{self}.open(
83
82
  browser_type: 'optional :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
84
- proxy: 'optional - scheme://proxy_host:port',
85
- with_tor: 'optional - boolean (defaults to false)'
83
+ proxy: 'optional - scheme://proxy_host:port || :tor'
86
84
  )
87
85
  puts browser_obj.public_methods
88
86
 
@@ -9,8 +9,7 @@ module PWN
9
9
  # Supported Method Parameters::
10
10
  # browser_obj = PWN::WWW::TradingView.open(
11
11
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
12
- # proxy: 'optional - scheme://proxy_host:port',
13
- # with_tor: 'optional - boolean (defaults to false)'
12
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
14
13
  # )
15
14
 
16
15
  public_class_method def self.open(opts = {})
@@ -98,8 +97,7 @@ module PWN
98
97
  puts "USAGE:
99
98
  browser_obj = #{self}.open(
100
99
  browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
101
- proxy: 'optional - scheme://proxy_host:port',
102
- with_tor: 'optional - boolean (defaults to false)'
100
+ proxy: 'optional - scheme://proxy_host:port || :tor'
103
101
  )
104
102
  puts browser_obj.public_methods
105
103
 
@@ -9,8 +9,7 @@ module PWN
9
9
  # Supported Method Parameters::
10
10
  # browser_obj = PWN::WWW::Twitter.open(
11
11
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
12
- # proxy: 'optional - scheme://proxy_host:port',
13
- # with_tor: 'optional - boolean (defaults to false)'
12
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
14
13
  # )
15
14
 
16
15
  public_class_method def self.open(opts = {})
@@ -106,8 +105,7 @@ module PWN
106
105
  puts "USAGE:
107
106
  browser_obj = #{self}.open(
108
107
  browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
109
- proxy: 'optional - scheme://proxy_host:port',
110
- with_tor: 'optional - boolean (defaults to false)'
108
+ proxy: 'optional - scheme://proxy_host:port || :tor'
111
109
  )
112
110
  puts browser_obj.public_methods
113
111
 
data/lib/pwn/www/uber.rb CHANGED
@@ -9,8 +9,7 @@ module PWN
9
9
  # Supported Method Parameters::
10
10
  # browser_obj = PWN::WWW::Uber.open(
11
11
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
12
- # proxy: 'optional - scheme://proxy_host:port',
13
- # with_tor: 'optional - boolean (defaults to false)'
12
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
14
13
  # )
15
14
 
16
15
  public_class_method def self.open(opts = {})
@@ -95,8 +94,7 @@ module PWN
95
94
  puts "USAGE:
96
95
  browser_obj = #{self}.open(
97
96
  browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
98
- proxy: 'optional - scheme://proxy_host:port',
99
- with_tor: 'optional - boolean (defaults to false)'
97
+ proxy: 'optional - scheme://proxy_host:port || :tor'
100
98
  )
101
99
  puts browser_obj.public_methods
102
100
 
@@ -9,8 +9,7 @@ module PWN
9
9
  # Supported Method Parameters::
10
10
  # browser_obj = PWN::WWW::Upwork.open(
11
11
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
12
- # proxy: 'optional - scheme://proxy_host:port',
13
- # with_tor: 'optional - boolean (defaults to false)'
12
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
14
13
  # )
15
14
 
16
15
  public_class_method def self.open(opts = {})
@@ -95,8 +94,7 @@ module PWN
95
94
  puts "USAGE:
96
95
  browser_obj = #{self}.open(
97
96
  browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
98
- proxy: 'optional - scheme://proxy_host:port',
99
- with_tor: 'optional - boolean (defaults to false)'
97
+ proxy: 'optional - scheme://proxy_host:port || :tor'
100
98
  )
101
99
  puts browser_obj.public_methods
102
100
 
@@ -7,8 +7,7 @@ module PWN
7
7
  # Supported Method Parameters::
8
8
  # browser_obj = PWN::WWW::Youtube.open(
9
9
  # browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
10
- # proxy: 'optional - scheme://proxy_host:port',
11
- # with_tor: 'optional - boolean (defaults to false)'
10
+ # proxy: 'optional - scheme://proxy_host:port || :tor'
12
11
  # )
13
12
 
14
13
  public_class_method def self.open(opts = {})
@@ -67,8 +66,7 @@ module PWN
67
66
  puts "USAGE:
68
67
  browser_obj =#{self}.open(
69
68
  browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
70
- proxy: 'optional - scheme://proxy_host:port',
71
- with_tor: 'optional - boolean (defaults to false)'
69
+ proxy: 'optional - scheme://proxy_host:port || :tor'
72
70
  )
73
71
  puts 'browser_obj.public_methods'
74
72
 
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe PWN::Plugins::Tor do
6
+ it 'should display information for authors' do
7
+ authors_response = PWN::Plugins::Tor
8
+ expect(authors_response).to respond_to :authors
9
+ end
10
+
11
+ it 'should display information for existing help method' do
12
+ help_response = PWN::Plugins::Tor
13
+ expect(help_response).to respond_to :help
14
+ end
15
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.667
4
+ version: 0.4.668
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-01 00:00:00.000000000 Z
11
+ date: 2023-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -870,14 +870,14 @@ dependencies:
870
870
  requirements:
871
871
  - - '='
872
872
  - !ruby/object:Gem::Version
873
- version: 0.112.0
873
+ version: 0.113.0
874
874
  type: :runtime
875
875
  prerelease: false
876
876
  version_requirements: !ruby/object:Gem::Requirement
877
877
  requirements:
878
878
  - - '='
879
879
  - !ruby/object:Gem::Version
880
- version: 0.112.0
880
+ version: 0.113.0
881
881
  - !ruby/object:Gem::Dependency
882
882
  name: serialport
883
883
  requirement: !ruby/object:Gem::Requirement
@@ -1683,6 +1683,7 @@ files:
1683
1683
  - lib/pwn/plugins/spider.rb
1684
1684
  - lib/pwn/plugins/ssn.rb
1685
1685
  - lib/pwn/plugins/thread_pool.rb
1686
+ - lib/pwn/plugins/tor.rb
1686
1687
  - lib/pwn/plugins/transparent_browser.rb
1687
1688
  - lib/pwn/plugins/twitter_api.rb
1688
1689
  - lib/pwn/plugins/uri_scheme.rb
@@ -1991,6 +1992,7 @@ files:
1991
1992
  - spec/lib/pwn/plugins/spider_spec.rb
1992
1993
  - spec/lib/pwn/plugins/ssn_spec.rb
1993
1994
  - spec/lib/pwn/plugins/thread_pool_spec.rb
1995
+ - spec/lib/pwn/plugins/tor_spec.rb
1994
1996
  - spec/lib/pwn/plugins/transparent_browser_spec.rb
1995
1997
  - spec/lib/pwn/plugins/twitter_api_spec.rb
1996
1998
  - spec/lib/pwn/plugins/uri_scheme_spec.rb