pwn 0.4.384 → 0.4.387
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![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.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
|