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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 01e5e3df0ac88dc250a1802ee64b5cc2f86b5914a629b73962248d834edac063
4
- data.tar.gz: 3addee02b1cb5672ad73d9fcb37034e728411fa61285f5d489c58fe2d56cd505
3
+ metadata.gz: 69e0d57c1556e5adb3cfd5afe9c38f43dcf4158ec0dea58b76b05dade6124818
4
+ data.tar.gz: 28d847dcf1306254508beb5bed47486762d5051d0251586738619ee443d1fe8b
5
5
  SHA512:
6
- metadata.gz: 75b5d00ca3d50dc0047f57cea1fcf192fae4fdf25c25ba3432118e93f0346437bd64eb7d6dc78f7b5b10fb6b057914a8cd630f586a6d58c9e4d56b899b546234
7
- data.tar.gz: 74f07a6e5fce1dfa28a1e2bf67f59d71f007bfad73e2c3098a9b0931a9ff7fdaa0b06b559a9305c9378eff33361893af238e2e3e83562b6b7ed6f410afaa2222
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.0'
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.4'
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.99.1'
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.384]:001 >>> PWN.help
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.384]:001 >>> PWN.help
55
+ pwn[v0.4.387]:001 >>> PWN.help
56
56
  ```
57
57
 
58
58
 
data/bin/pwn CHANGED
@@ -3,6 +3,7 @@
3
3
 
4
4
  require 'pwn'
5
5
  require 'pry'
6
+ require 'pry_bond'
6
7
  require 'tty-prompt'
7
8
  require 'tty-reader'
8
9
 
@@ -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(q: registrant_filter) do |char|
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('-headless')
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
- # q: 'required - query string to randomize',
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
- query_string = opts[:q].to_s
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
- query_string.each_char do |char|
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
- this_call = devtools.instance_variable_get('@messages').last['params']['callFrames'].last if devtools.instance_variable_get('@messages').last['method'] == 'Debugger.paused'
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
- this_global = devtools.send_cmd(
362
- 'Runtime.evaluate',
363
- **console_cmd
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
- sleep 9
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
- q: 'required - query string to randomize',
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: \"q\").send_keys(char) }
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PWN
4
- VERSION = '0.4.384'
4
+ VERSION = '0.4.387'
5
5
  end
@@ -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.384
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-03-29 00:00:00.000000000 Z
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.0
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.0
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.4
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.4
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.99.1
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.99.1
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