pwn 0.5.171 → 0.5.172
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/.rubocop_todo.yml +4 -3
- data/Gemfile +3 -3
- data/README.md +3 -3
- data/lib/pwn/plugins/transparent_browser.rb +293 -39
- data/lib/pwn/version.rb +1 -1
- metadata +9 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7a28028e7963e92af030938974180fd92e06a97a26356b503605587d62d5c70b
|
|
4
|
+
data.tar.gz: e6d967fd284c4bde42b12430d247033814e1c3d3cc6a160cf66bee3b902991ff
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 68abce7493b7babaa9f2265da24497f9a3d521d1d608098426db9b9288104c4aa2def7c1a35be2ff3a58d46fa2e0e36b0638d5c323f796b51a77c53d81947009
|
|
7
|
+
data.tar.gz: 0db2a7cb852145907eec23779ded6cdaeb9286a9bdbf0847b81b02dde64536c2cf119ae5a8b7da13958d0bd85a53afe0672962f5fc19d2b9dd0fcc67757ab108
|
data/.rubocop_todo.yml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# This configuration was generated by
|
|
2
2
|
# `rubocop --auto-gen-config`
|
|
3
|
-
# on 2024-06-
|
|
3
|
+
# on 2024-06-20 17:51:21 UTC using RuboCop version 1.64.1.
|
|
4
4
|
# The point is for the user to remove these configuration records
|
|
5
5
|
# one by one as the offenses are removed from the code base.
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
|
@@ -41,7 +41,7 @@ Lint/NestedMethodDefinition:
|
|
|
41
41
|
Exclude:
|
|
42
42
|
- 'lib/pwn/plugins/repl.rb'
|
|
43
43
|
|
|
44
|
-
# Offense count:
|
|
44
|
+
# Offense count: 311
|
|
45
45
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
46
46
|
# Configuration parameters: AutoCorrect.
|
|
47
47
|
Lint/UselessAssignment:
|
|
@@ -81,7 +81,7 @@ Metrics/MethodLength:
|
|
|
81
81
|
Exclude:
|
|
82
82
|
- 'lib/pwn/banner/code_cave.rb'
|
|
83
83
|
|
|
84
|
-
# Offense count:
|
|
84
|
+
# Offense count: 10
|
|
85
85
|
# Configuration parameters: CountComments, Max, CountAsOne.
|
|
86
86
|
Metrics/ModuleLength:
|
|
87
87
|
Exclude:
|
|
@@ -94,6 +94,7 @@ Metrics/ModuleLength:
|
|
|
94
94
|
- 'lib/pwn/plugins/open_ai.rb'
|
|
95
95
|
- 'lib/pwn/plugins/packet.rb'
|
|
96
96
|
- 'lib/pwn/plugins/repl.rb'
|
|
97
|
+
- 'lib/pwn/plugins/transparent_browser.rb'
|
|
97
98
|
|
|
98
99
|
# Offense count: 1
|
|
99
100
|
# This cop supports safe autocorrection (--autocorrect).
|
data/Gemfile
CHANGED
|
@@ -20,7 +20,7 @@ gem 'barby', '0.6.9'
|
|
|
20
20
|
gem 'base32', '0.3.4'
|
|
21
21
|
gem 'brakeman', '6.1.2'
|
|
22
22
|
gem 'bson', '5.0.0'
|
|
23
|
-
gem 'bundler', '>=2.5.
|
|
23
|
+
gem 'bundler', '>=2.5.14'
|
|
24
24
|
gem 'bundler-audit', '0.9.1'
|
|
25
25
|
gem 'bunny', '2.22.0'
|
|
26
26
|
gem 'colorize', '1.1.0'
|
|
@@ -43,7 +43,7 @@ gem 'jenkins_api_client2', '1.9.0'
|
|
|
43
43
|
gem 'js-beautify', '0.1.8'
|
|
44
44
|
gem 'json', '2.7.2'
|
|
45
45
|
gem 'jsonpath', '1.1.5'
|
|
46
|
-
gem 'jwt', '2.8.
|
|
46
|
+
gem 'jwt', '2.8.2'
|
|
47
47
|
gem 'libusb', '0.7.1'
|
|
48
48
|
gem 'luhn', '1.0.2'
|
|
49
49
|
gem 'mail', '2.8.1'
|
|
@@ -85,7 +85,7 @@ gem 'ruby-nmap', '1.0.3'
|
|
|
85
85
|
gem 'ruby-saml', '1.16.0'
|
|
86
86
|
gem 'rvm', '1.11.3.9'
|
|
87
87
|
gem 'savon', '2.15.0'
|
|
88
|
-
gem 'selenium-devtools', '0.
|
|
88
|
+
gem 'selenium-devtools', '0.126.0'
|
|
89
89
|
gem 'serialport', '1.3.2'
|
|
90
90
|
# gem 'sinatra', '4.0.0'
|
|
91
91
|
gem 'slack-ruby-client', '2.3.0'
|
data/README.md
CHANGED
|
@@ -37,7 +37,7 @@ $ cd /opt/pwn
|
|
|
37
37
|
$ ./install.sh
|
|
38
38
|
$ ./install.sh ruby-gem
|
|
39
39
|
$ pwn
|
|
40
|
-
pwn[v0.5.
|
|
40
|
+
pwn[v0.5.172]:001 >>> PWN.help
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
[](https://youtu.be/G7iLUY4FzsI)
|
|
@@ -52,7 +52,7 @@ $ rvm use ruby-3.3.3@pwn
|
|
|
52
52
|
$ gem uninstall --all --executables pwn
|
|
53
53
|
$ gem install --verbose pwn
|
|
54
54
|
$ pwn
|
|
55
|
-
pwn[v0.5.
|
|
55
|
+
pwn[v0.5.172]:001 >>> PWN.help
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
If you're using a multi-user install of RVM do:
|
|
@@ -62,7 +62,7 @@ $ rvm use ruby-3.3.3@pwn
|
|
|
62
62
|
$ rvmsudo gem uninstall --all --executables pwn
|
|
63
63
|
$ rvmsudo gem install --verbose pwn
|
|
64
64
|
$ pwn
|
|
65
|
-
pwn[v0.5.
|
|
65
|
+
pwn[v0.5.172]:001 >>> PWN.help
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
PWN periodically upgrades to the latest version of Ruby which is reflected in `/opt/pwn/.ruby-version`. The easiest way to upgrade to the latest version of Ruby from a previous PWN installation is to run the following script:
|
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
require 'em/pure_ruby'
|
|
4
4
|
require 'faye/websocket'
|
|
5
|
+
require 'openssl'
|
|
5
6
|
require 'rest-client'
|
|
7
|
+
require 'securerandom'
|
|
6
8
|
require 'selenium/webdriver'
|
|
7
9
|
require 'selenium/devtools'
|
|
8
10
|
require 'socksify'
|
|
9
|
-
require '
|
|
11
|
+
require 'timeout'
|
|
10
12
|
require 'watir'
|
|
11
13
|
|
|
12
14
|
module PWN
|
|
@@ -20,6 +22,21 @@ module PWN
|
|
|
20
22
|
module TransparentBrowser
|
|
21
23
|
@@logger = PWN::Plugins::PWNLogger.create
|
|
22
24
|
|
|
25
|
+
# Supported Method Parameters::
|
|
26
|
+
# verify_devtools_browser(
|
|
27
|
+
# browser_obj: 'required - browser_obj returned from #open method',
|
|
28
|
+
# supported: 'optional - array of supported browser types (defaults to [:chrome, :headless_chrome, :firefox, :headless_firefox])'
|
|
29
|
+
# )
|
|
30
|
+
private_class_method def self.verify_devtools_browser(opts = {})
|
|
31
|
+
browser_obj = opts[:browser_obj]
|
|
32
|
+
supported = opts[:supported] ||= %i[chrome headless_chrome firefox headless_firefox]
|
|
33
|
+
|
|
34
|
+
browser_type = browser_obj[:type]
|
|
35
|
+
raise "ERROR: browser_type must be #{supported}" unless supported.include?(browser_type)
|
|
36
|
+
rescue StandardError => e
|
|
37
|
+
raise e
|
|
38
|
+
end
|
|
39
|
+
|
|
23
40
|
# Supported Method Parameters::
|
|
24
41
|
# browser_obj1 = PWN::Plugins::TransparentBrowser.open(
|
|
25
42
|
# browser_type: 'optional - :firefox|:chrome|:headless|:rest|:websocket (defaults to :chrome)',
|
|
@@ -261,41 +278,30 @@ module PWN
|
|
|
261
278
|
return nil
|
|
262
279
|
end
|
|
263
280
|
|
|
264
|
-
browser_obj[:devtools] = browser_obj[:browser].driver.devtools if with_devtools && (browser_obj[:type] == :chrome || browser_obj[:type] == :headless_chrome || browser_obj[:type] == :firefox || browser_obj[:type] == :headless_firefox)
|
|
265
|
-
|
|
266
|
-
browser_obj
|
|
267
|
-
rescue StandardError => e
|
|
268
|
-
raise e
|
|
269
|
-
end
|
|
270
|
-
|
|
271
|
-
# Supported Method Parameters::
|
|
272
|
-
# console_resp = PWN::Plugins::TransparentBrowser.devtools_console(
|
|
273
|
-
# browser_obj: browser_obj1,
|
|
274
|
-
# js: 'required - JavaScript expression to evaluate'
|
|
275
|
-
# )
|
|
276
|
-
|
|
277
|
-
public_class_method def self.devtools_console(opts = {})
|
|
278
|
-
browser_obj = opts[:browser_obj]
|
|
279
281
|
browser_type = browser_obj[:type]
|
|
282
|
+
supported = %i[chrome headless_chrome firefox headless_firefox]
|
|
283
|
+
if with_devtools && supported.include?(browser_type)
|
|
284
|
+
browser_obj[:browser].goto('about:blank')
|
|
285
|
+
rand_tab = SecureRandom.hex(8)
|
|
286
|
+
browser_obj[:browser].execute_script("document.title = '#{rand_tab}'")
|
|
287
|
+
|
|
288
|
+
browser_obj[:devtools] = browser_obj[:browser].driver.devtools
|
|
289
|
+
|
|
290
|
+
# browser_obj[:devtools].send_cmd('DOM.enable')
|
|
291
|
+
# browser_obj[:devtools].send_cmd('Log.enable')
|
|
292
|
+
# browser_obj[:devtools].send_cmd('Network.enable')
|
|
293
|
+
# browser_obj[:devtools].send_cmd('Page.enable')
|
|
294
|
+
# browser_obj[:devtools].send_cmd('Runtime.enable')
|
|
295
|
+
# browser_obj[:devtools].send_cmd('Security.enable')
|
|
296
|
+
|
|
297
|
+
# if browser_type == :chrome || browser_type == :headless_chrome
|
|
298
|
+
# browser_obj[:devtools].send_cmd('Debugger.enable')
|
|
299
|
+
# browser_obj[:devtools].send_cmd('DOMStorage.enable')
|
|
300
|
+
# browser_obj[:devtools].send_cmd('DOMSnapshot.enable')
|
|
301
|
+
# end
|
|
302
|
+
end
|
|
280
303
|
|
|
281
|
-
|
|
282
|
-
raise 'ERROR: browser_type must be :chrome, :headless_chrome, :firefox, or :headless_firefox' unless valid_browser_types.include?(browser_type)
|
|
283
|
-
|
|
284
|
-
js = opts[:js] ||= "alert('ACK from => #{self}')"
|
|
285
|
-
|
|
286
|
-
devtools = browser_obj[:devtools]
|
|
287
|
-
devtools.send_cmd('Runtime.enable')
|
|
288
|
-
devtools.send_cmd('Console.enable')
|
|
289
|
-
devtools.send_cmd('DOM.enable')
|
|
290
|
-
devtools.send_cmd('Page.enable')
|
|
291
|
-
devtools.send_cmd('Log.enable')
|
|
292
|
-
devtools.send_cmd('Debugger.enable')
|
|
293
|
-
|
|
294
|
-
js_exp = {
|
|
295
|
-
expression: js
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
devtools.send_cmd('Runtime.evaluate', **js_exp)
|
|
304
|
+
browser_obj
|
|
299
305
|
rescue StandardError => e
|
|
300
306
|
raise e
|
|
301
307
|
end
|
|
@@ -388,6 +394,218 @@ module PWN
|
|
|
388
394
|
raise e
|
|
389
395
|
end
|
|
390
396
|
|
|
397
|
+
# Supported Method Parameters::
|
|
398
|
+
# console_resp = PWN::Plugins::TransparentBrowser.console(
|
|
399
|
+
# browser_obj: browser_obj1,
|
|
400
|
+
# js: 'required - JavaScript expression to evaluate'
|
|
401
|
+
# )
|
|
402
|
+
|
|
403
|
+
public_class_method def self.console(opts = {})
|
|
404
|
+
browser_obj = opts[:browser_obj]
|
|
405
|
+
verify_devtools_browser(browser_obj: browser_obj)
|
|
406
|
+
|
|
407
|
+
js = opts[:js] ||= "alert('ACK from => #{self}')"
|
|
408
|
+
|
|
409
|
+
browser = browser_obj[:browser]
|
|
410
|
+
case js
|
|
411
|
+
when 'debugger', 'debugger;', 'debugger()', 'debugger();'
|
|
412
|
+
Timeout.timeout(1) { console_resp = browser.execute_script('debugger') }
|
|
413
|
+
when 'clear', 'clear;', 'clear()', 'clear();'
|
|
414
|
+
console_resp = browser.execute_script('console.clear()')
|
|
415
|
+
else
|
|
416
|
+
console_resp = browser.execute_script("console.log(#{js})")
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
console_resp
|
|
420
|
+
rescue Timeout::Error, Timeout::ExitException
|
|
421
|
+
console_resp
|
|
422
|
+
rescue StandardError => e
|
|
423
|
+
raise e
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
# Supported Method Parameters::
|
|
427
|
+
# tabs = PWN::Plugins::TransparentBrowser.list_tabs(
|
|
428
|
+
# browser_obj: 'required - browser_obj returned from #open method)'
|
|
429
|
+
# )
|
|
430
|
+
|
|
431
|
+
public_class_method def self.list_tabs(opts = {})
|
|
432
|
+
browser_obj = opts[:browser_obj]
|
|
433
|
+
verify_devtools_browser(browser_obj: browser_obj)
|
|
434
|
+
|
|
435
|
+
browser = browser_obj[:browser]
|
|
436
|
+
browser.windows.map do |tab|
|
|
437
|
+
active = false
|
|
438
|
+
active = true if browser.title == tab.title && browser.url == tab.url
|
|
439
|
+
{ title: tab.title, url: tab.url, active: active }
|
|
440
|
+
end
|
|
441
|
+
rescue StandardError => e
|
|
442
|
+
raise e
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
# Supported Method Parameters::
|
|
446
|
+
# browser_obj1 = PWN::Plugins::TransparentBrowser.switch_tab(
|
|
447
|
+
# browser_obj: 'required - browser_obj returned from #open method)',
|
|
448
|
+
# keyword: 'required - keyword in title or url used to switch tabs'
|
|
449
|
+
# )
|
|
450
|
+
|
|
451
|
+
public_class_method def self.switch_tab(opts = {})
|
|
452
|
+
browser_obj = opts[:browser_obj]
|
|
453
|
+
verify_devtools_browser(browser_obj: browser_obj)
|
|
454
|
+
|
|
455
|
+
keyword = opts[:keyword]
|
|
456
|
+
raise 'ERROR: keyword parameter is required' if keyword.nil?
|
|
457
|
+
|
|
458
|
+
browser = browser_obj[:browser]
|
|
459
|
+
all_tabs = browser.windows
|
|
460
|
+
all_tabs.select { |tab| tab.use if tab.title.include?(keyword) || tab.url.include?(keyword) }
|
|
461
|
+
rescue StandardError => e
|
|
462
|
+
raise e
|
|
463
|
+
end
|
|
464
|
+
|
|
465
|
+
# Supported Method Parameters::
|
|
466
|
+
# browser_obj1 = PWN::Plugins::TransparentBrowser.new_tab(
|
|
467
|
+
# browser_obj: 'required - browser_obj returned from #open method)',
|
|
468
|
+
# url: 'optional - URL to navigate to after opening new tab (Defaults to nil)'
|
|
469
|
+
# )
|
|
470
|
+
|
|
471
|
+
public_class_method def self.new_tab(opts = {})
|
|
472
|
+
browser_obj = opts[:browser_obj]
|
|
473
|
+
verify_devtools_browser(browser_obj: browser_obj)
|
|
474
|
+
|
|
475
|
+
url = opts[:url]
|
|
476
|
+
|
|
477
|
+
browser = browser_obj[:browser]
|
|
478
|
+
browser.execute_script('window.open()')
|
|
479
|
+
switch_tab(browser_obj: browser_obj, keyword: 'about:blank')
|
|
480
|
+
rand_tab = SecureRandom.hex(8)
|
|
481
|
+
browser.execute_script("document.title = '#{rand_tab}'")
|
|
482
|
+
browser.goto(url) unless url.nil?
|
|
483
|
+
rescue StandardError => e
|
|
484
|
+
raise e
|
|
485
|
+
end
|
|
486
|
+
|
|
487
|
+
# Supported Method Parameters::
|
|
488
|
+
# browser_obj1 = PWN::Plugins::TransparentBrowser.close_tab(
|
|
489
|
+
# browser_obj: 'required - browser_obj returned from #open method)'
|
|
490
|
+
# keyword: 'required - keyword in title or url used to close tabs'
|
|
491
|
+
# )
|
|
492
|
+
|
|
493
|
+
public_class_method def self.close_tab(opts = {})
|
|
494
|
+
browser_obj = opts[:browser_obj]
|
|
495
|
+
verify_devtools_browser(browser_obj: browser_obj)
|
|
496
|
+
|
|
497
|
+
keyword = opts[:keyword]
|
|
498
|
+
raise 'ERROR: keyword parameter is required' if keyword.nil?
|
|
499
|
+
|
|
500
|
+
browser = browser_obj[:browser]
|
|
501
|
+
all_tabs = browser.windows
|
|
502
|
+
all_tabs.select { |tab| tab.close if tab.title.include?(keyword) || tab.url.include?(keyword) }
|
|
503
|
+
rescue StandardError => e
|
|
504
|
+
raise e
|
|
505
|
+
end
|
|
506
|
+
|
|
507
|
+
# Supported Method Parameters::
|
|
508
|
+
# browser_obj1 = PWN::Plugins::TransparentBrowser.debugger(
|
|
509
|
+
# browser_obj: 'required - browser_obj returned from #open method)',
|
|
510
|
+
# action: 'optional - action to take :pause|:resume (Defaults to :pause)',
|
|
511
|
+
# url: 'optional - URL to navigate to after pausing debugger (Defaults to nil)'
|
|
512
|
+
# )
|
|
513
|
+
|
|
514
|
+
public_class_method def self.debugger(opts = {})
|
|
515
|
+
browser_obj = opts[:browser_obj]
|
|
516
|
+
supported = %i[chrome headless_chrome]
|
|
517
|
+
verify_devtools_browser(browser_obj: browser_obj, supported: supported)
|
|
518
|
+
browser = browser_obj[:browser]
|
|
519
|
+
action = opts[:action] ||= :pause
|
|
520
|
+
url = opts[:url]
|
|
521
|
+
|
|
522
|
+
devtools = browser_obj[:devtools]
|
|
523
|
+
|
|
524
|
+
case action.to_s.downcase.to_sym
|
|
525
|
+
when :pause
|
|
526
|
+
console('browser_obj': browser_obj, js: 'debugger')
|
|
527
|
+
|
|
528
|
+
# devtools.send_cmd('Debugger.enable')
|
|
529
|
+
# devtools.send_cmd(
|
|
530
|
+
# 'Debugger.setInstrumentationBreakpoint',
|
|
531
|
+
# instrumentation: 'beforeScriptExecution'
|
|
532
|
+
# )
|
|
533
|
+
|
|
534
|
+
# devtools.send_cmd(
|
|
535
|
+
# 'EventBreakpoints.setInstrumentationBreakpoint',
|
|
536
|
+
# eventName: 'load'
|
|
537
|
+
# )
|
|
538
|
+
|
|
539
|
+
# devtools.send_cmd(
|
|
540
|
+
# 'Debugger.setPauseOnExceptions',
|
|
541
|
+
# state: 'all'
|
|
542
|
+
# )
|
|
543
|
+
|
|
544
|
+
begin
|
|
545
|
+
Timeout.timeout(1) do
|
|
546
|
+
browser.refresh if url.nil?
|
|
547
|
+
browser.goto(url) unless url.nil?
|
|
548
|
+
end
|
|
549
|
+
rescue Timeout::Error
|
|
550
|
+
url
|
|
551
|
+
end
|
|
552
|
+
when :resume
|
|
553
|
+
devtools.send_cmd('Debugger.resume')
|
|
554
|
+
else
|
|
555
|
+
raise 'ERROR: action parameter must be :pause or :resume'
|
|
556
|
+
end
|
|
557
|
+
rescue StandardError => e
|
|
558
|
+
raise e
|
|
559
|
+
end
|
|
560
|
+
|
|
561
|
+
# Supported Method Parameters::
|
|
562
|
+
# browser_obj1 = PWN::Plugins::TransparentBrowser.step_into(
|
|
563
|
+
# browser_obj: 'required - browser_obj returned from #open method)'
|
|
564
|
+
# )
|
|
565
|
+
|
|
566
|
+
public_class_method def self.step_into(opts = {})
|
|
567
|
+
browser_obj = opts[:browser_obj]
|
|
568
|
+
supported = %i[chrome headless_chrome]
|
|
569
|
+
verify_devtools_browser(browser_obj: browser_obj, supported: supported)
|
|
570
|
+
|
|
571
|
+
devtools = browser_obj[:devtools]
|
|
572
|
+
devtools.send_cmd('Debugger.stepInto')
|
|
573
|
+
rescue StandardError => e
|
|
574
|
+
raise e
|
|
575
|
+
end
|
|
576
|
+
|
|
577
|
+
# Supported Method Parameters::
|
|
578
|
+
# browser_obj1 = PWN::Plugins::TransparentBrowser.step_out(
|
|
579
|
+
# browser_obj: 'required - browser_obj returned from #open method)'
|
|
580
|
+
# )
|
|
581
|
+
|
|
582
|
+
public_class_method def self.step_out(opts = {})
|
|
583
|
+
browser_obj = opts[:browser_obj]
|
|
584
|
+
supported = %i[chrome headless_chrome]
|
|
585
|
+
verify_devtools_browser(browser_obj: browser_obj, supported: supported)
|
|
586
|
+
|
|
587
|
+
devtools = browser_obj[:devtools]
|
|
588
|
+
devtools.send_cmd('Debugger.stepOut')
|
|
589
|
+
rescue StandardError => e
|
|
590
|
+
raise e
|
|
591
|
+
end
|
|
592
|
+
|
|
593
|
+
# Supported Method Parameters::
|
|
594
|
+
# browser_obj1 = PWN::Plugins::TransparentBrowser.step_over(
|
|
595
|
+
# browser_obj: 'required - browser_obj returned from #open method)'
|
|
596
|
+
# )
|
|
597
|
+
|
|
598
|
+
public_class_method def self.step_over(opts = {})
|
|
599
|
+
browser_obj = opts[:browser_obj]
|
|
600
|
+
supported = %i[chrome headless_chrome]
|
|
601
|
+
verify_devtools_browser(browser_obj: browser_obj, supported: supported)
|
|
602
|
+
|
|
603
|
+
devtools = browser_obj[:devtools]
|
|
604
|
+
devtools.send_cmd('Debugger.stepOver')
|
|
605
|
+
rescue StandardError => e
|
|
606
|
+
raise e
|
|
607
|
+
end
|
|
608
|
+
|
|
391
609
|
# Supported Method Parameters::
|
|
392
610
|
# browser_obj1 = PWN::Plugins::TransparentBrowser.close(
|
|
393
611
|
# browser_obj: 'required - browser_obj returned from #open method)'
|
|
@@ -513,11 +731,6 @@ module PWN
|
|
|
513
731
|
* End of DevTools Examples
|
|
514
732
|
********************************************************
|
|
515
733
|
|
|
516
|
-
console_resp = #{self}.devtools_console(
|
|
517
|
-
browser_obj: 'required - browser_obj returned from #open method)',
|
|
518
|
-
js: 'required - JavaScript expression to evaluate'
|
|
519
|
-
)
|
|
520
|
-
|
|
521
734
|
browser_obj1 = #{self}.dump_links(
|
|
522
735
|
browser_obj: 'required - browser_obj returned from #open method)'
|
|
523
736
|
)
|
|
@@ -532,6 +745,47 @@ module PWN
|
|
|
532
745
|
rand_sleep_float: 'optional - float timing in between keypress (defaults to 0.09)'
|
|
533
746
|
) {|char| browser_obj1.text_field(name: \"search\").send_keys(char) }
|
|
534
747
|
|
|
748
|
+
console_resp = #{self}.console(
|
|
749
|
+
browser_obj: 'required - browser_obj returned from #open method)',
|
|
750
|
+
js: 'required - JavaScript expression to evaluate'
|
|
751
|
+
)
|
|
752
|
+
|
|
753
|
+
tabs = #{self}.list_tabs(
|
|
754
|
+
browser_obj: 'required - browser_obj returned from #open method)'
|
|
755
|
+
)
|
|
756
|
+
|
|
757
|
+
browser_obj1 = #{self}.switch_tab(
|
|
758
|
+
browser_obj: 'required - browser_obj returned from #open method)',
|
|
759
|
+
keyword: 'required - keyword in title or url used to switch tabs'
|
|
760
|
+
)
|
|
761
|
+
|
|
762
|
+
browser_obj1 = #{self}.new_tab(
|
|
763
|
+
browser_obj: 'required - browser_obj returned from #open method)'
|
|
764
|
+
)
|
|
765
|
+
|
|
766
|
+
browser_obj1 = #{self}.close_tab(
|
|
767
|
+
browser_obj: 'required - browser_obj returned from #open method)',
|
|
768
|
+
keyword: 'required - keyword in title or url used to close tabs'
|
|
769
|
+
)
|
|
770
|
+
|
|
771
|
+
browser_obj1 = #{self}.debugger(
|
|
772
|
+
browser_obj: 'required - browser_obj returned from #open method)',
|
|
773
|
+
action: 'optional - action to take :pause|:resume (Defaults to :pause)',
|
|
774
|
+
url: 'optional - URL to navigate to after pausing debugger (Defaults to nil)'
|
|
775
|
+
)
|
|
776
|
+
|
|
777
|
+
browser_obj1 = #{self}.step_into(
|
|
778
|
+
browser_obj: 'required - browser_obj returned from #open method)'
|
|
779
|
+
)
|
|
780
|
+
|
|
781
|
+
browser_obj1 = #{self}.step_out(
|
|
782
|
+
browser_obj: 'required - browser_obj returned from #open method)'
|
|
783
|
+
)
|
|
784
|
+
|
|
785
|
+
browser_obj1 = #{self}.step_over(
|
|
786
|
+
browser_obj: 'required - browser_obj returned from #open method)'
|
|
787
|
+
)
|
|
788
|
+
|
|
535
789
|
browser_obj1 = #{self}.close(
|
|
536
790
|
browser_obj: 'required - browser_obj returned from #open method)'
|
|
537
791
|
)
|
data/lib/pwn/version.rb
CHANGED
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.5.
|
|
4
|
+
version: 0.5.172
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- 0day Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-06-
|
|
11
|
+
date: 2024-06-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -128,14 +128,14 @@ dependencies:
|
|
|
128
128
|
requirements:
|
|
129
129
|
- - ">="
|
|
130
130
|
- !ruby/object:Gem::Version
|
|
131
|
-
version: 2.5.
|
|
131
|
+
version: 2.5.14
|
|
132
132
|
type: :development
|
|
133
133
|
prerelease: false
|
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
135
|
requirements:
|
|
136
136
|
- - ">="
|
|
137
137
|
- !ruby/object:Gem::Version
|
|
138
|
-
version: 2.5.
|
|
138
|
+
version: 2.5.14
|
|
139
139
|
- !ruby/object:Gem::Dependency
|
|
140
140
|
name: bundler-audit
|
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -436,14 +436,14 @@ dependencies:
|
|
|
436
436
|
requirements:
|
|
437
437
|
- - '='
|
|
438
438
|
- !ruby/object:Gem::Version
|
|
439
|
-
version: 2.8.
|
|
439
|
+
version: 2.8.2
|
|
440
440
|
type: :runtime
|
|
441
441
|
prerelease: false
|
|
442
442
|
version_requirements: !ruby/object:Gem::Requirement
|
|
443
443
|
requirements:
|
|
444
444
|
- - '='
|
|
445
445
|
- !ruby/object:Gem::Version
|
|
446
|
-
version: 2.8.
|
|
446
|
+
version: 2.8.2
|
|
447
447
|
- !ruby/object:Gem::Dependency
|
|
448
448
|
name: libusb
|
|
449
449
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -1024,14 +1024,14 @@ dependencies:
|
|
|
1024
1024
|
requirements:
|
|
1025
1025
|
- - '='
|
|
1026
1026
|
- !ruby/object:Gem::Version
|
|
1027
|
-
version: 0.
|
|
1027
|
+
version: 0.126.0
|
|
1028
1028
|
type: :runtime
|
|
1029
1029
|
prerelease: false
|
|
1030
1030
|
version_requirements: !ruby/object:Gem::Requirement
|
|
1031
1031
|
requirements:
|
|
1032
1032
|
- - '='
|
|
1033
1033
|
- !ruby/object:Gem::Version
|
|
1034
|
-
version: 0.
|
|
1034
|
+
version: 0.126.0
|
|
1035
1035
|
- !ruby/object:Gem::Dependency
|
|
1036
1036
|
name: serialport
|
|
1037
1037
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -2320,7 +2320,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
2320
2320
|
- !ruby/object:Gem::Version
|
|
2321
2321
|
version: '0'
|
|
2322
2322
|
requirements: []
|
|
2323
|
-
rubygems_version: 3.5.
|
|
2323
|
+
rubygems_version: 3.5.14
|
|
2324
2324
|
signing_key:
|
|
2325
2325
|
specification_version: 4
|
|
2326
2326
|
summary: Automated Security Testing for CI/CD Pipelines & Beyond
|