pwn 0.4.384 → 0.4.387
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 +4 -4
- data/Gemfile +4 -3
- data/README.md +2 -2
- data/bin/pwn +1 -0
- data/bin/pwn_domain_reversewhois +1 -1
- data/lib/pwn/plugins/transparent_browser.rb +47 -17
- data/lib/pwn/version.rb +1 -1
- data/lib/pwn/www/coinbase_pro.rb +134 -0
- data/lib/pwn/www.rb +1 -0
- data/spec/lib/pwn/www/coinbase_pro_spec.rb +15 -0
- metadata +25 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 69e0d57c1556e5adb3cfd5afe9c38f43dcf4158ec0dea58b76b05dade6124818
|
4
|
+
data.tar.gz: 28d847dcf1306254508beb5bed47486762d5051d0251586738619ee443d1fe8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a581d275147b239b3b022fdcfb2b436acb3e2bd70489bb59fffc03522645539440d07218c3a8d4502b8015a23e70a3329670ad62d298d57cdc485e0cf1cc4c4c
|
7
|
+
data.tar.gz: 1575cebddfe1b9d9667afc53f1de79c26e633721c0688c6638dc53eac856e1636f2ea16ebede288a714c5d0c93eb2982ca67d65befbb106458ed6eb6c2807df6
|
data/Gemfile
CHANGED
@@ -34,7 +34,7 @@ gem 'jsonpath', '1.1.0'
|
|
34
34
|
gem 'jwt', '2.3.0'
|
35
35
|
gem 'luhn', '1.0.2'
|
36
36
|
gem 'mail', '2.7.1'
|
37
|
-
gem 'mongo', '2.17.
|
37
|
+
gem 'mongo', '2.17.1'
|
38
38
|
gem 'msfrpc-client', '1.1.2'
|
39
39
|
gem 'net-ldap', '0.17.0'
|
40
40
|
gem 'net-openvpn', '0.8.7'
|
@@ -45,8 +45,9 @@ gem 'oily_png', '1.2.1'
|
|
45
45
|
gem 'os', '1.1.4'
|
46
46
|
gem 'packetfu', '1.1.13'
|
47
47
|
gem 'pdf-reader', '2.9.2'
|
48
|
-
gem 'pg', '1.3.
|
48
|
+
gem 'pg', '1.3.5'
|
49
49
|
gem 'pry', '0.14.1'
|
50
|
+
gem 'pry-bond', '0.0.1'
|
50
51
|
gem 'pry-doc', '1.3.0'
|
51
52
|
gem 'rake', '13.0.6'
|
52
53
|
gem 'rb-readline', '0.5.5'
|
@@ -65,7 +66,7 @@ gem 'ruby-nmap', '0.10.0'
|
|
65
66
|
gem 'ruby-saml', '1.14.0'
|
66
67
|
gem 'rvm', '1.11.3.9'
|
67
68
|
gem 'savon', '2.12.1'
|
68
|
-
gem 'selenium-devtools', '0.
|
69
|
+
gem 'selenium-devtools', '0.100.0'
|
69
70
|
gem 'serialport', '1.3.2'
|
70
71
|
gem 'sinatra', '2.2.0'
|
71
72
|
gem 'slack-ruby-client', '1.0.0'
|
data/README.md
CHANGED
@@ -37,7 +37,7 @@ $ rvm use ruby-3.1.1@pwn
|
|
37
37
|
$ rvm list gemsets
|
38
38
|
$ gem install --verbose pwn
|
39
39
|
$ pwn
|
40
|
-
pwn[v0.4.
|
40
|
+
pwn[v0.4.387]:001 >>> PWN.help
|
41
41
|
```
|
42
42
|
|
43
43
|
[](https://youtu.be/G7iLUY4FzsI)
|
@@ -52,7 +52,7 @@ $ rvm use ruby-3.1.1@pwn
|
|
52
52
|
$ gem uninstall --all --executables pwn
|
53
53
|
$ gem install --verbose pwn
|
54
54
|
$ pwn
|
55
|
-
pwn[v0.4.
|
55
|
+
pwn[v0.4.387]:001 >>> PWN.help
|
56
56
|
```
|
57
57
|
|
58
58
|
|
data/bin/pwn
CHANGED
data/bin/pwn_domain_reversewhois
CHANGED
@@ -66,7 +66,7 @@ begin
|
|
66
66
|
browser_obj.goto('https://domainbigdata.com')
|
67
67
|
|
68
68
|
# Type Registrant Filter in Char-by-Char to Ensure Everyone is Happy ;)
|
69
|
-
PWN::Plugins::TransparentBrowser.type_as_human(
|
69
|
+
PWN::Plugins::TransparentBrowser.type_as_human(string: registrant_filter) do |char|
|
70
70
|
browser_obj.text_field(id: 'txtSearchTopPage').wait_until(&:present?).send_keys(char)
|
71
71
|
end
|
72
72
|
browser_obj.button(id: 'btnTopSearch').wait_until(&:present?).click
|
@@ -5,6 +5,7 @@ require 'selenium/webdriver'
|
|
5
5
|
require 'selenium/devtools'
|
6
6
|
require 'rest-client'
|
7
7
|
require 'socksify'
|
8
|
+
require 'openssl'
|
8
9
|
require 'em/pure_ruby'
|
9
10
|
require 'faye/websocket'
|
10
11
|
|
@@ -104,6 +105,9 @@ module PWN
|
|
104
105
|
this_profile['download.default_directory'] = '~/Downloads'
|
105
106
|
|
106
107
|
switches = []
|
108
|
+
switches.push('--start-maximized')
|
109
|
+
switches.push('--disable-notifications')
|
110
|
+
|
107
111
|
if proxy
|
108
112
|
switches.push("--host-resolver-rules='MAP * 0.0.0.0 , EXCLUDE #{URI(proxy).host}'") if with_tor
|
109
113
|
switches.push("--proxy-server=#{proxy}")
|
@@ -186,7 +190,10 @@ module PWN
|
|
186
190
|
this_profile['download.default_directory'] = '~/Downloads'
|
187
191
|
|
188
192
|
switches = []
|
189
|
-
switches.push('
|
193
|
+
switches.push('--headless')
|
194
|
+
switches.push('--start-maximized')
|
195
|
+
switches.push('--disable-notifications')
|
196
|
+
|
190
197
|
if proxy
|
191
198
|
switches.push("--host-resolver-rules='MAP * 0.0.0.0 , EXCLUDE #{URI(proxy).host}'") if with_tor
|
192
199
|
switches.push("--proxy-server=#{proxy}")
|
@@ -260,12 +267,12 @@ module PWN
|
|
260
267
|
|
261
268
|
# Supported Method Parameters::
|
262
269
|
# PWN::Plugins::TransparentBrowser.type_as_human(
|
263
|
-
#
|
270
|
+
# string: 'required - string to type as human',
|
264
271
|
# rand_sleep_float: 'optional - float timing in between keypress (defaults to 0.09)'
|
265
272
|
# )
|
266
273
|
|
267
274
|
public_class_method def self.type_as_human(opts = {})
|
268
|
-
|
275
|
+
string = opts[:string].to_s
|
269
276
|
|
270
277
|
rand_sleep_float = if opts[:rand_sleep_float]
|
271
278
|
opts[:rand_sleep_float].to_f
|
@@ -273,7 +280,7 @@ module PWN
|
|
273
280
|
0.09
|
274
281
|
end
|
275
282
|
|
276
|
-
|
283
|
+
string.each_char do |char|
|
277
284
|
yield char
|
278
285
|
sleep Random.rand(rand_sleep_float)
|
279
286
|
end
|
@@ -342,32 +349,55 @@ module PWN
|
|
342
349
|
|
343
350
|
* Debugging DOM and Sending JavaScript to Console
|
344
351
|
devtools.send_cmd('Runtime.enable')
|
352
|
+
devtools.send_cmd('Console.enable')
|
345
353
|
devtools.send_cmd('DOM.enable')
|
354
|
+
devtools.send_cmd('Page.enable')
|
346
355
|
devtools.send_cmd('Log.enable')
|
347
356
|
devtools.send_cmd('Debugger.enable')
|
348
357
|
devtools.send_cmd('Debugger.pause')
|
349
|
-
console_cmd = {
|
350
|
-
expression: 'console.log(global);'
|
351
|
-
}
|
352
358
|
step = 1
|
359
|
+
next_step = 60
|
353
360
|
loop do
|
361
|
+
devtools.send_cmd('Console.clearMessages')
|
362
|
+
devtools.send_cmd('Log.clear')
|
363
|
+
console_events = []
|
364
|
+
b.driver.on_log_event(:console) { |event| console_events.push(event) }
|
365
|
+
|
354
366
|
devtools.send_cmd('Debugger.stepInto')
|
355
367
|
puts \"Step: \#{step}\"
|
356
|
-
|
357
|
-
puts \"Function Name: \#{this_call['functionName']}\"
|
368
|
+
|
358
369
|
this_document = devtools.send_cmd('DOM.getDocument')
|
359
370
|
puts \"This #document:\\n\#{this_document}\\n\\n\\n\"
|
360
371
|
|
361
|
-
|
362
|
-
'
|
363
|
-
|
364
|
-
)
|
365
|
-
puts \"This #global:\\n\#{this_global}\\n\\n\\n\"
|
372
|
+
console_cmd = {
|
373
|
+
expression: 'for(var pop_var in window) { if (window.hasOwnProperty(pop_var) && window[pop_var] != null) console.log(pop_var + \" = \" + window[pop_var]); }'
|
374
|
+
}
|
375
|
+
puts devtools.send_cmd('Runtime.evaluate', **console_cmd)
|
366
376
|
|
367
|
-
|
377
|
+
print '-' * 180
|
378
|
+
print \"\\n\"
|
379
|
+
console_events.each do |event|
|
380
|
+
puts event.args
|
381
|
+
end
|
382
|
+
puts \"Console Response Length: \#{console_events.length}\"
|
383
|
+
console_events_digest = OpenSSL::Digest::SHA256.hexdigest(
|
384
|
+
console_events.inspect
|
385
|
+
)
|
386
|
+
puts \"Console Events Array SHA256 Digest: \#{console_events_digest}\"
|
387
|
+
print '-' * 180
|
388
|
+
puts \"\\n\\n\\n\"
|
389
|
+
|
390
|
+
print \"Next Step in \"
|
391
|
+
next_step.downto(1) {|n| print \"\#{n} \"; sleep 1 }
|
392
|
+
puts 'READY!'
|
393
|
+
step += 1
|
368
394
|
end
|
395
|
+
|
369
396
|
devtools.send_cmd('Debugger.disable')
|
397
|
+
devtools.send_cmd('Log.disable')
|
398
|
+
devtools.send_cmd('Page.disable')
|
370
399
|
devtools.send_cmd('DOM.disable')
|
400
|
+
devtools.send_cmd('Console.disable')
|
371
401
|
devtools.send_cmd('Runtime.disable')
|
372
402
|
* End of DevTools Examples
|
373
403
|
********************************************************
|
@@ -377,9 +407,9 @@ module PWN
|
|
377
407
|
)
|
378
408
|
|
379
409
|
#{self}.type_as_human(
|
380
|
-
|
410
|
+
string: 'required - string to type as human',
|
381
411
|
rand_sleep_float: 'optional - float timing in between keypress (defaults to 0.09)'
|
382
|
-
) {|char| browser_obj1.text_field(name: \"
|
412
|
+
) {|char| browser_obj1.text_field(name: \"search\").send_keys(char) }
|
383
413
|
|
384
414
|
browser_obj1 = #{self}.close(
|
385
415
|
browser_obj: 'required - browser_obj returned from #open method)'
|
data/lib/pwn/version.rb
CHANGED
@@ -0,0 +1,134 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
module PWN
|
6
|
+
module WWW
|
7
|
+
# This plugin supports tradingview.com actions.
|
8
|
+
module CoinbasePro
|
9
|
+
# Supported Method Parameters::
|
10
|
+
# browser_obj = PWN::WWW::CoinbasePro.open(
|
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)'
|
14
|
+
# )
|
15
|
+
|
16
|
+
public_class_method def self.open(opts = {})
|
17
|
+
browser_obj = PWN::Plugins::TransparentBrowser.open(opts)
|
18
|
+
|
19
|
+
browser_obj.goto('https://pro.coinbase.com')
|
20
|
+
|
21
|
+
browser_obj
|
22
|
+
rescue StandardError => e
|
23
|
+
raise e
|
24
|
+
end
|
25
|
+
|
26
|
+
# Supported Method Parameters::
|
27
|
+
# browser_obj = PWN::WWW::CoinbasePro.login(
|
28
|
+
# browser_obj: 'required - browser_obj returned from #open method',
|
29
|
+
# username: 'required - username',
|
30
|
+
# password: 'optional - passwd (will prompt if blank)',
|
31
|
+
# mfa: 'optional - if true prompt for mfa token (defaults to false)'
|
32
|
+
# )
|
33
|
+
|
34
|
+
public_class_method def self.login(opts = {})
|
35
|
+
browser_obj = opts[:browser_obj]
|
36
|
+
username = opts[:username].to_s.scrub.strip.chomp
|
37
|
+
password = opts[:password]
|
38
|
+
|
39
|
+
if password.nil?
|
40
|
+
password = PWN::Plugins::AuthenticationHelper.mask_password
|
41
|
+
else
|
42
|
+
password = opts[:password].to_s.scrub.strip.chomp
|
43
|
+
end
|
44
|
+
mfa = opts[:mfa]
|
45
|
+
|
46
|
+
browser_obj.goto('https://pro.coinbase.com')
|
47
|
+
|
48
|
+
browser_obj.span(text: 'Sign in').wait_until(&:present?).click
|
49
|
+
browser_obj.text_field(name: 'email').wait_until(&:present?).set(username)
|
50
|
+
browser_obj.text_field(name: 'password').wait_until(&:present?).set(password)
|
51
|
+
browser_obj.button(text: 'Sign In').click!
|
52
|
+
|
53
|
+
if mfa
|
54
|
+
until browser_obj.url.include?('https://pro.coinbase.com')
|
55
|
+
browser_obj.text_field(name: 'token').wait_until(&:present?).set(PWN::Plugins::AuthenticationHelper.mfa(prompt: 'enter mfa token'))
|
56
|
+
browser_obj.button(text: 'Verify').click!
|
57
|
+
sleep 3
|
58
|
+
end
|
59
|
+
print "\n"
|
60
|
+
end
|
61
|
+
|
62
|
+
browser_obj
|
63
|
+
rescue StandardError => e
|
64
|
+
raise e
|
65
|
+
end
|
66
|
+
|
67
|
+
# Supported Method Parameters::
|
68
|
+
# browser_obj = PWN::WWW::CoinbasePro.logout(
|
69
|
+
# browser_obj: 'required - browser_obj returned from #open method'
|
70
|
+
# )
|
71
|
+
|
72
|
+
public_class_method def self.logout(opts = {})
|
73
|
+
browser_obj = opts[:browser_obj]
|
74
|
+
browser_obj.goto('https://pro.coinbase.com/signout')
|
75
|
+
|
76
|
+
browser_obj
|
77
|
+
rescue StandardError => e
|
78
|
+
raise e
|
79
|
+
end
|
80
|
+
|
81
|
+
# Supported Method Parameters::
|
82
|
+
# browser_obj = PWN::WWW::CoinbasePro.close(
|
83
|
+
# browser_obj: 'required - browser_obj returned from #open method'
|
84
|
+
# )
|
85
|
+
|
86
|
+
public_class_method def self.close(opts = {})
|
87
|
+
browser_obj = opts[:browser_obj]
|
88
|
+
PWN::Plugins::TransparentBrowser.close(
|
89
|
+
browser_obj: browser_obj
|
90
|
+
)
|
91
|
+
rescue StandardError => e
|
92
|
+
raise e
|
93
|
+
end
|
94
|
+
|
95
|
+
# Author(s):: 0day Inc. <request.pentest@0dayinc.com>
|
96
|
+
|
97
|
+
public_class_method def self.authors
|
98
|
+
"AUTHOR(S):
|
99
|
+
0day Inc. <request.pentest@0dayinc.com>
|
100
|
+
"
|
101
|
+
end
|
102
|
+
|
103
|
+
# Display Usage for this Module
|
104
|
+
|
105
|
+
public_class_method def self.help
|
106
|
+
puts "USAGE:
|
107
|
+
browser_obj = #{self}.open(
|
108
|
+
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)'
|
111
|
+
)
|
112
|
+
puts browser_obj.public_methods
|
113
|
+
|
114
|
+
browser_obj = #{self}.login(
|
115
|
+
browser_obj: 'required - browser_obj returned from #open method',
|
116
|
+
username: 'required - username',
|
117
|
+
password: 'optional - passwd (will prompt if blank),
|
118
|
+
mfa: 'optional - if true prompt for mfa token (defaults to false)'
|
119
|
+
)
|
120
|
+
|
121
|
+
browser_obj = #{self}.logout(
|
122
|
+
browser_obj: 'required - browser_obj returned from #open method'
|
123
|
+
)
|
124
|
+
|
125
|
+
#{self}.close(
|
126
|
+
browser_obj: 'required - browser_obj returned from #open method'
|
127
|
+
)
|
128
|
+
|
129
|
+
#{self}.authors
|
130
|
+
"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
data/lib/pwn/www.rb
CHANGED
@@ -9,6 +9,7 @@ module PWN
|
|
9
9
|
autoload :Bing, 'pwn/www/bing'
|
10
10
|
autoload :BugCrowd, 'pwn/www/bug_crowd'
|
11
11
|
autoload :Checkip, 'pwn/www/checkip.rb'
|
12
|
+
autoload :CoinbasePro, 'pwn/www/coinbase_pro.rb'
|
12
13
|
autoload :Duckduckgo, 'pwn/www/duckduckgo'
|
13
14
|
autoload :Facebook, 'pwn/www/facebook'
|
14
15
|
autoload :Google, 'pwn/www/google'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe PWN::WWW::CoinbasePro do
|
6
|
+
it 'should display information for authors' do
|
7
|
+
authors_response = PWN::WWW::CoinbasePro
|
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::WWW::CoinbasePro
|
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.
|
4
|
+
version: 0.4.387
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 0day Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -310,14 +310,14 @@ dependencies:
|
|
310
310
|
requirements:
|
311
311
|
- - '='
|
312
312
|
- !ruby/object:Gem::Version
|
313
|
-
version: 2.17.
|
313
|
+
version: 2.17.1
|
314
314
|
type: :runtime
|
315
315
|
prerelease: false
|
316
316
|
version_requirements: !ruby/object:Gem::Requirement
|
317
317
|
requirements:
|
318
318
|
- - '='
|
319
319
|
- !ruby/object:Gem::Version
|
320
|
-
version: 2.17.
|
320
|
+
version: 2.17.1
|
321
321
|
- !ruby/object:Gem::Dependency
|
322
322
|
name: msfrpc-client
|
323
323
|
requirement: !ruby/object:Gem::Requirement
|
@@ -464,14 +464,14 @@ dependencies:
|
|
464
464
|
requirements:
|
465
465
|
- - '='
|
466
466
|
- !ruby/object:Gem::Version
|
467
|
-
version: 1.3.
|
467
|
+
version: 1.3.5
|
468
468
|
type: :runtime
|
469
469
|
prerelease: false
|
470
470
|
version_requirements: !ruby/object:Gem::Requirement
|
471
471
|
requirements:
|
472
472
|
- - '='
|
473
473
|
- !ruby/object:Gem::Version
|
474
|
-
version: 1.3.
|
474
|
+
version: 1.3.5
|
475
475
|
- !ruby/object:Gem::Dependency
|
476
476
|
name: pry
|
477
477
|
requirement: !ruby/object:Gem::Requirement
|
@@ -486,6 +486,20 @@ dependencies:
|
|
486
486
|
- - '='
|
487
487
|
- !ruby/object:Gem::Version
|
488
488
|
version: 0.14.1
|
489
|
+
- !ruby/object:Gem::Dependency
|
490
|
+
name: pry-bond
|
491
|
+
requirement: !ruby/object:Gem::Requirement
|
492
|
+
requirements:
|
493
|
+
- - '='
|
494
|
+
- !ruby/object:Gem::Version
|
495
|
+
version: 0.0.1
|
496
|
+
type: :runtime
|
497
|
+
prerelease: false
|
498
|
+
version_requirements: !ruby/object:Gem::Requirement
|
499
|
+
requirements:
|
500
|
+
- - '='
|
501
|
+
- !ruby/object:Gem::Version
|
502
|
+
version: 0.0.1
|
489
503
|
- !ruby/object:Gem::Dependency
|
490
504
|
name: pry-doc
|
491
505
|
requirement: !ruby/object:Gem::Requirement
|
@@ -744,14 +758,14 @@ dependencies:
|
|
744
758
|
requirements:
|
745
759
|
- - '='
|
746
760
|
- !ruby/object:Gem::Version
|
747
|
-
version: 0.
|
761
|
+
version: 0.100.0
|
748
762
|
type: :runtime
|
749
763
|
prerelease: false
|
750
764
|
version_requirements: !ruby/object:Gem::Requirement
|
751
765
|
requirements:
|
752
766
|
- - '='
|
753
767
|
- !ruby/object:Gem::Version
|
754
|
-
version: 0.
|
768
|
+
version: 0.100.0
|
755
769
|
- !ruby/object:Gem::Dependency
|
756
770
|
name: serialport
|
757
771
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1539,6 +1553,7 @@ files:
|
|
1539
1553
|
- lib/pwn/www/bing.rb
|
1540
1554
|
- lib/pwn/www/bug_crowd.rb
|
1541
1555
|
- lib/pwn/www/checkip.rb
|
1556
|
+
- lib/pwn/www/coinbase_pro.rb
|
1542
1557
|
- lib/pwn/www/duckduckgo.rb
|
1543
1558
|
- lib/pwn/www/facebook.rb
|
1544
1559
|
- lib/pwn/www/google.rb
|
@@ -1823,6 +1838,7 @@ files:
|
|
1823
1838
|
- spec/lib/pwn/www/bing_spec.rb
|
1824
1839
|
- spec/lib/pwn/www/bug_crowd.rb
|
1825
1840
|
- spec/lib/pwn/www/checkip_spec.rb
|
1841
|
+
- spec/lib/pwn/www/coinbase_pro_spec.rb
|
1826
1842
|
- spec/lib/pwn/www/duckduckgo_spec.rb
|
1827
1843
|
- spec/lib/pwn/www/facebook_spec.rb
|
1828
1844
|
- spec/lib/pwn/www/google_spec.rb
|
@@ -2083,6 +2099,7 @@ test_files:
|
|
2083
2099
|
- spec/lib/pwn/www/bing_spec.rb
|
2084
2100
|
- spec/lib/pwn/www/bug_crowd.rb
|
2085
2101
|
- spec/lib/pwn/www/checkip_spec.rb
|
2102
|
+
- spec/lib/pwn/www/coinbase_pro_spec.rb
|
2086
2103
|
- spec/lib/pwn/www/duckduckgo_spec.rb
|
2087
2104
|
- spec/lib/pwn/www/facebook_spec.rb
|
2088
2105
|
- spec/lib/pwn/www/google_spec.rb
|