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 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