pwn 0.5.305 → 0.5.307
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/README.md +3 -3
- data/lib/pwn/plugins/transparent_browser.rb +90 -17
- data/lib/pwn/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84d7508456ef5d3e90206c2c24e4c5cd5b9e00f2d0b73b1e173c9e728d5c73e0
|
4
|
+
data.tar.gz: ba77cd727eda78d699d225ed35e42440d33a46163413a98eee8351ba47d0036b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5503a807ca026473e5adead9b6e75224eb174851cc7ffda6e449fc6dd924448a9395f11ad4aa4709c58c23a78c9ae2323946d3ef241455ce5e9e2f4b85982ca
|
7
|
+
data.tar.gz: 758bc5954f798c8602738c0081aca0e072d670d9e54d95ec3e78ea9c3ea641de0cb2eb6fd261f5462e81814a2b4024daca875e4635fad31f4beee2f53fe24e94
|
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.307]:001 >>> PWN.help
|
41
41
|
```
|
42
42
|
|
43
43
|
[](https://youtu.be/G7iLUY4FzsI)
|
@@ -52,7 +52,7 @@ $ rvm use ruby-3.4.4@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.307]: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.4.4@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.307]: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:
|
@@ -169,7 +169,9 @@ module PWN
|
|
169
169
|
accept_insecure_certs: true
|
170
170
|
)
|
171
171
|
|
172
|
+
# This is required for BiDi support
|
172
173
|
options.web_socket_url = true
|
174
|
+
options.add_preference('remote.active-protocols', 3)
|
173
175
|
options.profile = this_profile
|
174
176
|
driver = Selenium::WebDriver.for(:firefox, options: options)
|
175
177
|
browser_obj[:browser] = Watir::Browser.new(driver)
|
@@ -196,8 +198,9 @@ module PWN
|
|
196
198
|
accept_insecure_certs: true
|
197
199
|
)
|
198
200
|
|
199
|
-
# This is for
|
200
|
-
|
201
|
+
# This is required for BiDi support
|
202
|
+
options.web_socket_url = true
|
203
|
+
options.add_preference('remote.active-protocols', 3)
|
201
204
|
options.profile = this_profile
|
202
205
|
driver = Selenium::WebDriver.for(:chrome, options: options)
|
203
206
|
browser_obj[:browser] = Watir::Browser.new(driver)
|
@@ -259,8 +262,9 @@ module PWN
|
|
259
262
|
accept_insecure_certs: true
|
260
263
|
)
|
261
264
|
|
262
|
-
# This is for
|
263
|
-
|
265
|
+
# This is required for BiDi support
|
266
|
+
options.web_socket_url = true
|
267
|
+
options.add_preference('remote.active-protocols', 3)
|
264
268
|
options.profile = this_profile
|
265
269
|
driver = Selenium::WebDriver.for(:firefox, options: options)
|
266
270
|
browser_obj[:browser] = Watir::Browser.new(driver)
|
@@ -283,8 +287,9 @@ module PWN
|
|
283
287
|
accept_insecure_certs: true
|
284
288
|
)
|
285
289
|
|
286
|
-
# This is for
|
287
|
-
|
290
|
+
# This is required for BiDi support
|
291
|
+
options.web_socket_url = true
|
292
|
+
options.add_preference('remote.active-protocols', 3)
|
288
293
|
options.profile = this_profile
|
289
294
|
driver = Selenium::WebDriver.for(:chrome, options: options)
|
290
295
|
browser_obj[:browser] = Watir::Browser.new(driver)
|
@@ -327,17 +332,15 @@ module PWN
|
|
327
332
|
if devtools_supported.include?(browser_type)
|
328
333
|
if devtools
|
329
334
|
driver = browser_obj[:browser].driver
|
330
|
-
browser_obj[:devtools] = driver.devtools
|
331
|
-
|
332
|
-
browser_obj[:devtools].send_cmd('DOM.enable')
|
333
|
-
browser_obj[:devtools].send_cmd('Log.enable')
|
334
|
-
browser_obj[:devtools].send_cmd('Network.enable')
|
335
|
-
browser_obj[:devtools].send_cmd('Page.enable')
|
336
|
-
browser_obj[:devtools].send_cmd('Runtime.enable')
|
337
|
-
browser_obj[:devtools].send_cmd('Security.enable')
|
338
|
-
|
339
335
|
chrome_browser_types = %i[chrome headless_chrome]
|
340
336
|
if chrome_browser_types.include?(browser_type)
|
337
|
+
browser_obj[:devtools] = driver.devtools
|
338
|
+
browser_obj[:devtools].send_cmd('DOM.enable')
|
339
|
+
browser_obj[:devtools].send_cmd('Log.enable')
|
340
|
+
browser_obj[:devtools].send_cmd('Network.enable')
|
341
|
+
browser_obj[:devtools].send_cmd('Page.enable')
|
342
|
+
browser_obj[:devtools].send_cmd('Runtime.enable')
|
343
|
+
browser_obj[:devtools].send_cmd('Security.enable')
|
341
344
|
browser_obj[:devtools].send_cmd('Debugger.enable')
|
342
345
|
browser_obj[:devtools].send_cmd('DOMStorage.enable')
|
343
346
|
browser_obj[:devtools].send_cmd('DOMSnapshot.enable')
|
@@ -345,6 +348,7 @@ module PWN
|
|
345
348
|
|
346
349
|
firefox_browser_types = %i[firefox headless_firefox]
|
347
350
|
if firefox_browser_types.include?(browser_type)
|
351
|
+
browser_obj[:devtools] = driver.bidi
|
348
352
|
# browser_obj[:devtools].send_cmd(
|
349
353
|
# 'EventBreakpoints.setInstrumentationBreakpoint',
|
350
354
|
# eventName: 'script'
|
@@ -352,7 +356,7 @@ module PWN
|
|
352
356
|
end
|
353
357
|
|
354
358
|
# Future BiDi API that's more universally supported across browsers
|
355
|
-
|
359
|
+
browser_obj[:bidi] = driver.bidi
|
356
360
|
|
357
361
|
jmp_devtools_panel(browser_obj: browser_obj, panel: :elements)
|
358
362
|
end
|
@@ -489,6 +493,67 @@ module PWN
|
|
489
493
|
raise e
|
490
494
|
end
|
491
495
|
|
496
|
+
# Supported Method Parameters::
|
497
|
+
# console_resp = PWN::Plugins::TransparentBrowser.enable_dom_mutations(
|
498
|
+
# browser_obj: browser_obj1,
|
499
|
+
# target: 'optional - target JavaScript node to observe (defaults to document.body)'
|
500
|
+
# )
|
501
|
+
|
502
|
+
public_class_method def self.enable_dom_mutations(opts = {})
|
503
|
+
browser_obj = opts[:browser_obj]
|
504
|
+
verify_devtools_browser(browser_obj: browser_obj)
|
505
|
+
|
506
|
+
target = opts[:target] ||= 'document.body'
|
507
|
+
|
508
|
+
js = "
|
509
|
+
// Select the target node to observe
|
510
|
+
const targetNode;
|
511
|
+
targetNode = document.getElementById('#{target}');
|
512
|
+
if (!targetNode) {
|
513
|
+
targetNode = document.body; // Fallback to body if target not found
|
514
|
+
}
|
515
|
+
|
516
|
+
// Configuration for observer
|
517
|
+
const config = { attributes: true, childList: true, subtree: true };
|
518
|
+
|
519
|
+
// Callback for mutations
|
520
|
+
const callback = (mutationList, observer) => {
|
521
|
+
for (const mutation of mutationList) {
|
522
|
+
if (mutation.type === 'childList') {
|
523
|
+
console.log('Child node added/removed:', mutation);
|
524
|
+
} else if (mutation.type === 'attributes') {
|
525
|
+
console.log(`Attribute ${mutation.attributeName} modified:`, mutation);
|
526
|
+
}
|
527
|
+
}
|
528
|
+
};
|
529
|
+
|
530
|
+
// Create and start observer
|
531
|
+
const observer = new MutationObserver(callback);
|
532
|
+
observer.observe(targetNode, config);
|
533
|
+
|
534
|
+
// Later, stop observing if needed
|
535
|
+
// observer.disconnect();
|
536
|
+
"
|
537
|
+
console(browser_obj: browser_obj, js: js)
|
538
|
+
rescue StandardError => e
|
539
|
+
raise e
|
540
|
+
end
|
541
|
+
|
542
|
+
# Supported Method Parameters::
|
543
|
+
# console_resp = PWN::Plugins::TransparentBrowser.disable_dom_mutations(
|
544
|
+
# browser_obj: browser_obj1
|
545
|
+
# )
|
546
|
+
|
547
|
+
public_class_method def self.disable_dom_mutations(opts = {})
|
548
|
+
browser_obj = opts[:browser_obj]
|
549
|
+
verify_devtools_browser(browser_obj: browser_obj)
|
550
|
+
|
551
|
+
js = 'observer.disconnect();'
|
552
|
+
console(browser_obj: browser_obj, js: js)
|
553
|
+
rescue StandardError => e
|
554
|
+
raise e
|
555
|
+
end
|
556
|
+
|
492
557
|
# Supported Method Parameters::
|
493
558
|
# PWN::Plugins::TransparentBrowser.update_about_config(
|
494
559
|
# browser_obj: browser_obj1,
|
@@ -981,7 +1046,7 @@ module PWN
|
|
981
1046
|
* All DevTools Commands can be found here:
|
982
1047
|
* https://chromedevtools.github.io/devtools-protocol/
|
983
1048
|
* Examples
|
984
|
-
devtools =
|
1049
|
+
devtools = browser_obj1[:devtools]
|
985
1050
|
puts devtools.public_methods
|
986
1051
|
puts devtools.instance_variables
|
987
1052
|
puts devtools.instance_variable_get('@session_id')
|
@@ -1077,6 +1142,14 @@ module PWN
|
|
1077
1142
|
js: 'required - JavaScript expression to evaluate'
|
1078
1143
|
)
|
1079
1144
|
|
1145
|
+
console_resp = #{self}.enable_dom_mutations(
|
1146
|
+
browser_obj: 'required - browser_obj returned from #open method)'
|
1147
|
+
)
|
1148
|
+
|
1149
|
+
console_resp = #{self}.disable_dom_mutations(
|
1150
|
+
browser_obj: 'required - browser_obj returned from #open method)'
|
1151
|
+
)
|
1152
|
+
|
1080
1153
|
#{self}.update_about_config(
|
1081
1154
|
browser_obj: 'required - browser_obj returned from #open method)',
|
1082
1155
|
key: 'required - key to update in about:config',
|
data/lib/pwn/version.rb
CHANGED