pwn 0.4.383 → 0.4.386
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 +3 -3
- data/README.md +2 -2
- data/bin/pwn_domain_reversewhois +1 -1
- data/lib/pwn/plugins/transparent_browser.rb +70 -7
- data/lib/pwn/version.rb +1 -1
- data/lib/pwn/www/coinbase_pro.rb +135 -0
- data/lib/pwn/www.rb +1 -0
- data/spec/lib/pwn/www/coinbase_pro_spec.rb +15 -0
- metadata +11 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d9b485665b5ab58c1b6a395b6a3612ad1d9d0674d4f20a1243c7b76eb1995595
|
|
4
|
+
data.tar.gz: 5ff53b97446a9c0face611d86bf3e328cb424a832b9136e6d2ecb64c821a3bac
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2c8aed63d10f28f5f80326e94df77d21192db771bc8f326006c496a2968d079be1d0a445a1a8dd7f9a38fe35fe70746edbb8538e0acd74d71124aa775fe1cac0
|
|
7
|
+
data.tar.gz: 8d3fa53f9340dedbfc147e2a0d61520180f382b69ab41b42363b51fea34500e67f4afdf8ce6ff63162b8d2a5e1cc898a96ef845ab89fba243d5462e0a9a1c1d2
|
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,7 +45,7 @@ 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
50
|
gem 'pry-doc', '1.3.0'
|
|
51
51
|
gem 'rake', '13.0.6'
|
|
@@ -65,7 +65,7 @@ gem 'ruby-nmap', '0.10.0'
|
|
|
65
65
|
gem 'ruby-saml', '1.14.0'
|
|
66
66
|
gem 'rvm', '1.11.3.9'
|
|
67
67
|
gem 'savon', '2.12.1'
|
|
68
|
-
gem 'selenium-devtools', '0.
|
|
68
|
+
gem 'selenium-devtools', '0.100.0'
|
|
69
69
|
gem 'serialport', '1.3.2'
|
|
70
70
|
gem 'sinatra', '2.2.0'
|
|
71
71
|
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.386]: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.386]:001 >>> PWN.help
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
|
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
|
|
|
@@ -260,12 +261,12 @@ module PWN
|
|
|
260
261
|
|
|
261
262
|
# Supported Method Parameters::
|
|
262
263
|
# PWN::Plugins::TransparentBrowser.type_as_human(
|
|
263
|
-
#
|
|
264
|
+
# string: 'required - string to type as human',
|
|
264
265
|
# rand_sleep_float: 'optional - float timing in between keypress (defaults to 0.09)'
|
|
265
266
|
# )
|
|
266
267
|
|
|
267
268
|
public_class_method def self.type_as_human(opts = {})
|
|
268
|
-
|
|
269
|
+
string = opts[:string].to_s
|
|
269
270
|
|
|
270
271
|
rand_sleep_float = if opts[:rand_sleep_float]
|
|
271
272
|
opts[:rand_sleep_float].to_f
|
|
@@ -273,7 +274,7 @@ module PWN
|
|
|
273
274
|
0.09
|
|
274
275
|
end
|
|
275
276
|
|
|
276
|
-
|
|
277
|
+
string.each_char do |char|
|
|
277
278
|
yield char
|
|
278
279
|
sleep Random.rand(rand_sleep_float)
|
|
279
280
|
end
|
|
@@ -317,30 +318,92 @@ module PWN
|
|
|
317
318
|
with_devtools: 'optional - boolean (defaults to false)'
|
|
318
319
|
)
|
|
319
320
|
puts browser_obj1.public_methods
|
|
320
|
-
|
|
321
|
+
|
|
322
|
+
********************************************************
|
|
323
|
+
* DevTools Interaction Only works w/ Chrome
|
|
321
324
|
* All DevTools Commands can be found here:
|
|
322
325
|
* https://chromedevtools.github.io/devtools-protocol/
|
|
326
|
+
* Examples
|
|
323
327
|
devtools = browser_obj1.driver.devtools
|
|
324
328
|
puts devtools.public_methods
|
|
325
329
|
puts devtools.instance_variables
|
|
326
330
|
puts devtools.instance_variable_get('@messages')
|
|
331
|
+
|
|
332
|
+
* Tracing
|
|
327
333
|
devtools.send_cmd('Tracing.start')
|
|
328
334
|
devtools.send_cmd('Tracing.requestMemoryDump')
|
|
329
335
|
devtools.send_cmd('Tracing.end')
|
|
330
336
|
puts devtools.instance_variable_get('@messages')
|
|
337
|
+
|
|
338
|
+
* Network
|
|
331
339
|
devtools.send_cmd('Network.enable')
|
|
332
|
-
last_ws_resp = devtools.instance_variable_get('@messages').last if devtools.instance_variable_get('@messages')['method'] == 'Network.webSocketFrameReceived'
|
|
340
|
+
last_ws_resp = devtools.instance_variable_get('@messages').last if devtools.instance_variable_get('@messages').last['method'] == 'Network.webSocketFrameReceived'
|
|
333
341
|
puts last_ws_resp
|
|
334
342
|
devtools.send_cmd('Network.disable')
|
|
335
343
|
|
|
344
|
+
* Debugging DOM and Sending JavaScript to Console
|
|
345
|
+
devtools.send_cmd('Runtime.enable')
|
|
346
|
+
devtools.send_cmd('Console.enable')
|
|
347
|
+
devtools.send_cmd('DOM.enable')
|
|
348
|
+
devtools.send_cmd('Page.enable')
|
|
349
|
+
devtools.send_cmd('Log.enable')
|
|
350
|
+
devtools.send_cmd('Debugger.enable')
|
|
351
|
+
devtools.send_cmd('Debugger.pause')
|
|
352
|
+
step = 1
|
|
353
|
+
next_step = 60
|
|
354
|
+
loop do
|
|
355
|
+
devtools.send_cmd('Console.clearMessages')
|
|
356
|
+
devtools.send_cmd('Log.clear')
|
|
357
|
+
console_events = []
|
|
358
|
+
b.driver.on_log_event(:console) { |event| console_events.push(event) }
|
|
359
|
+
|
|
360
|
+
devtools.send_cmd('Debugger.stepInto')
|
|
361
|
+
puts \"Step: \#{step}\"
|
|
362
|
+
|
|
363
|
+
this_document = devtools.send_cmd('DOM.getDocument')
|
|
364
|
+
puts \"This #document:\\n\#{this_document}\\n\\n\\n\"
|
|
365
|
+
|
|
366
|
+
console_cmd = {
|
|
367
|
+
expression: 'for(var pop_var in window) { if (window.hasOwnProperty(pop_var) && window[pop_var] != null) console.log(pop_var + \" = \" + window[pop_var]); }'
|
|
368
|
+
}
|
|
369
|
+
puts devtools.send_cmd('Runtime.evaluate', **console_cmd)
|
|
370
|
+
|
|
371
|
+
print '-' * 180
|
|
372
|
+
print \"\\n\"
|
|
373
|
+
console_events.each do |event|
|
|
374
|
+
puts event.args
|
|
375
|
+
end
|
|
376
|
+
puts \"Console Response Length: \#{console_events.length}\"
|
|
377
|
+
console_events_digest = OpenSSL::Digest::SHA256.hexdigest(
|
|
378
|
+
console_events.inspect
|
|
379
|
+
)
|
|
380
|
+
puts \"Console Events Array SHA256 Digest: \#{console_events_digest}\"
|
|
381
|
+
print '-' * 180
|
|
382
|
+
puts \"\\n\\n\\n\"
|
|
383
|
+
|
|
384
|
+
print \"Next Step in \"
|
|
385
|
+
next_step.downto(1) {|n| print \"\#{n} \"; sleep 1 }
|
|
386
|
+
puts 'READY!'
|
|
387
|
+
step += 1
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
devtools.send_cmd('Debugger.disable')
|
|
391
|
+
devtools.send_cmd('Log.disable')
|
|
392
|
+
devtools.send_cmd('Page.disable')
|
|
393
|
+
devtools.send_cmd('DOM.disable')
|
|
394
|
+
devtools.send_cmd('Console.disable')
|
|
395
|
+
devtools.send_cmd('Runtime.disable')
|
|
396
|
+
* End of DevTools Examples
|
|
397
|
+
********************************************************
|
|
398
|
+
|
|
336
399
|
browser_obj1 = #{self}.linkout(
|
|
337
400
|
browser_obj: 'required - browser_obj returned from #open method)'
|
|
338
401
|
)
|
|
339
402
|
|
|
340
403
|
#{self}.type_as_human(
|
|
341
|
-
|
|
404
|
+
string: 'required - string to type as human',
|
|
342
405
|
rand_sleep_float: 'optional - float timing in between keypress (defaults to 0.09)'
|
|
343
|
-
) {|char| browser_obj1.text_field(name: \"
|
|
406
|
+
) {|char| browser_obj1.text_field(name: \"search\").send_keys(char) }
|
|
344
407
|
|
|
345
408
|
browser_obj1 = #{self}.close(
|
|
346
409
|
browser_obj: 'required - browser_obj returned from #open method)'
|
data/lib/pwn/version.rb
CHANGED
|
@@ -0,0 +1,135 @@
|
|
|
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
|
+
# )
|
|
32
|
+
|
|
33
|
+
public_class_method def self.login(opts = {})
|
|
34
|
+
browser_obj = opts[:browser_obj]
|
|
35
|
+
username = opts[:username].to_s.scrub.strip.chomp
|
|
36
|
+
password = opts[:password]
|
|
37
|
+
|
|
38
|
+
if password.nil?
|
|
39
|
+
password = PWN::Plugins::AuthenticationHelper.mask_password
|
|
40
|
+
else
|
|
41
|
+
password = opts[:password].to_s.scrub.strip.chomp
|
|
42
|
+
end
|
|
43
|
+
mfa = opts[:mfa]
|
|
44
|
+
|
|
45
|
+
browser_obj.goto('https://pro.coinbase.com')
|
|
46
|
+
|
|
47
|
+
# In case window is really small,
|
|
48
|
+
# click on hamburger menu
|
|
49
|
+
browser_obj.div(index: 9).click if browser_obj.div(index: 9).visible?
|
|
50
|
+
browser_obj.span(text: 'Sign in').wait_until(&:present?).click
|
|
51
|
+
browser_obj.text_field(name: 'email').wait_until(&:present?).set(username)
|
|
52
|
+
browser_obj.text_field(name: 'password').wait_until(&:present?).set(password)
|
|
53
|
+
browser_obj.button(text: 'Sign In').click!
|
|
54
|
+
|
|
55
|
+
if mfa
|
|
56
|
+
until browser_obj.url.include?('https://pro.coinbase.com')
|
|
57
|
+
browser_obj.text_field(name: 'token').wait_until(&:present?).set(PWN::Plugins::AuthenticationHelper.mfa(prompt: 'enter mfa token'))
|
|
58
|
+
browser_obj.button(text: 'Verify').click!
|
|
59
|
+
sleep 3
|
|
60
|
+
end
|
|
61
|
+
print "\n"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
browser_obj
|
|
65
|
+
rescue StandardError => e
|
|
66
|
+
raise e
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Supported Method Parameters::
|
|
70
|
+
# browser_obj = PWN::WWW::CoinbasePro.logout(
|
|
71
|
+
# browser_obj: 'required - browser_obj returned from #open method'
|
|
72
|
+
# )
|
|
73
|
+
|
|
74
|
+
public_class_method def self.logout(opts = {})
|
|
75
|
+
browser_obj = opts[:browser_obj]
|
|
76
|
+
browser_obj.goto('https://pro.coinbase.com/signout')
|
|
77
|
+
|
|
78
|
+
browser_obj
|
|
79
|
+
rescue StandardError => e
|
|
80
|
+
raise e
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Supported Method Parameters::
|
|
84
|
+
# browser_obj = PWN::WWW::CoinbasePro.close(
|
|
85
|
+
# browser_obj: 'required - browser_obj returned from #open method'
|
|
86
|
+
# )
|
|
87
|
+
|
|
88
|
+
public_class_method def self.close(opts = {})
|
|
89
|
+
browser_obj = opts[:browser_obj]
|
|
90
|
+
PWN::Plugins::TransparentBrowser.close(
|
|
91
|
+
browser_obj: browser_obj
|
|
92
|
+
)
|
|
93
|
+
rescue StandardError => e
|
|
94
|
+
raise e
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Author(s):: 0day Inc. <request.pentest@0dayinc.com>
|
|
98
|
+
|
|
99
|
+
public_class_method def self.authors
|
|
100
|
+
"AUTHOR(S):
|
|
101
|
+
0day Inc. <request.pentest@0dayinc.com>
|
|
102
|
+
"
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Display Usage for this Module
|
|
106
|
+
|
|
107
|
+
public_class_method def self.help
|
|
108
|
+
puts "USAGE:
|
|
109
|
+
browser_obj = #{self}.open(
|
|
110
|
+
browser_type: 'optional - :firefox|:chrome|:ie|:headless (Defaults to :firefox)',
|
|
111
|
+
proxy: 'optional - scheme://proxy_host:port',
|
|
112
|
+
with_tor: 'optional - boolean (defaults to false)'
|
|
113
|
+
)
|
|
114
|
+
puts browser_obj.public_methods
|
|
115
|
+
|
|
116
|
+
browser_obj = #{self}.login(
|
|
117
|
+
browser_obj: 'required - browser_obj returned from #open method',
|
|
118
|
+
username: 'required - username',
|
|
119
|
+
password: 'optional - passwd (will prompt if blank),
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
browser_obj = #{self}.logout(
|
|
123
|
+
browser_obj: 'required - browser_obj returned from #open method'
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
#{self}.close(
|
|
127
|
+
browser_obj: 'required - browser_obj returned from #open method'
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
#{self}.authors
|
|
131
|
+
"
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
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.386
|
|
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-03-
|
|
11
|
+
date: 2022-03-31 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
|
|
@@ -744,14 +744,14 @@ dependencies:
|
|
|
744
744
|
requirements:
|
|
745
745
|
- - '='
|
|
746
746
|
- !ruby/object:Gem::Version
|
|
747
|
-
version: 0.
|
|
747
|
+
version: 0.100.0
|
|
748
748
|
type: :runtime
|
|
749
749
|
prerelease: false
|
|
750
750
|
version_requirements: !ruby/object:Gem::Requirement
|
|
751
751
|
requirements:
|
|
752
752
|
- - '='
|
|
753
753
|
- !ruby/object:Gem::Version
|
|
754
|
-
version: 0.
|
|
754
|
+
version: 0.100.0
|
|
755
755
|
- !ruby/object:Gem::Dependency
|
|
756
756
|
name: serialport
|
|
757
757
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -1539,6 +1539,7 @@ files:
|
|
|
1539
1539
|
- lib/pwn/www/bing.rb
|
|
1540
1540
|
- lib/pwn/www/bug_crowd.rb
|
|
1541
1541
|
- lib/pwn/www/checkip.rb
|
|
1542
|
+
- lib/pwn/www/coinbase_pro.rb
|
|
1542
1543
|
- lib/pwn/www/duckduckgo.rb
|
|
1543
1544
|
- lib/pwn/www/facebook.rb
|
|
1544
1545
|
- lib/pwn/www/google.rb
|
|
@@ -1823,6 +1824,7 @@ files:
|
|
|
1823
1824
|
- spec/lib/pwn/www/bing_spec.rb
|
|
1824
1825
|
- spec/lib/pwn/www/bug_crowd.rb
|
|
1825
1826
|
- spec/lib/pwn/www/checkip_spec.rb
|
|
1827
|
+
- spec/lib/pwn/www/coinbase_pro_spec.rb
|
|
1826
1828
|
- spec/lib/pwn/www/duckduckgo_spec.rb
|
|
1827
1829
|
- spec/lib/pwn/www/facebook_spec.rb
|
|
1828
1830
|
- spec/lib/pwn/www/google_spec.rb
|
|
@@ -2083,6 +2085,7 @@ test_files:
|
|
|
2083
2085
|
- spec/lib/pwn/www/bing_spec.rb
|
|
2084
2086
|
- spec/lib/pwn/www/bug_crowd.rb
|
|
2085
2087
|
- spec/lib/pwn/www/checkip_spec.rb
|
|
2088
|
+
- spec/lib/pwn/www/coinbase_pro_spec.rb
|
|
2086
2089
|
- spec/lib/pwn/www/duckduckgo_spec.rb
|
|
2087
2090
|
- spec/lib/pwn/www/facebook_spec.rb
|
|
2088
2091
|
- spec/lib/pwn/www/google_spec.rb
|