pwn 0.5.418 → 0.5.421
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.yml +1 -1
- data/Gemfile +7 -7
- data/README.md +3 -3
- data/bin/pwn_sast +5 -5
- data/etc/pwn.yaml.EXAMPLE +3 -1
- data/lib/pwn/ai/grok.rb +14 -5
- data/lib/pwn/ai/ollama.rb +13 -13
- data/lib/pwn/ai/open_ai.rb +64 -5
- data/lib/pwn/plugins/burp_suite.rb +150 -2
- data/lib/pwn/plugins/repl.rb +109 -80
- data/lib/pwn/plugins/vault.rb +3 -0
- data/lib/pwn/plugins/zaproxy.rb +11 -18
- data/lib/pwn/reports/sast.rb +8 -6
- data/lib/pwn/version.rb +1 -1
- data/third_party/pwn_rdoc.jsonl +2 -2
- metadata +15 -15
data/lib/pwn/plugins/repl.rb
CHANGED
@@ -8,6 +8,96 @@ module PWN
|
|
8
8
|
module Plugins
|
9
9
|
# This module contains methods related to the pwn REPL Driver.
|
10
10
|
module REPL
|
11
|
+
# Supported Method Parameters::
|
12
|
+
# PWN::Plugins::REPL.load_config(
|
13
|
+
# pi: 'required - Pry Instance object',
|
14
|
+
# yaml_config_path: 'required - full path to pwn.yaml file',
|
15
|
+
# decryption_file: 'optional - full path to decryption YAML file'
|
16
|
+
# )
|
17
|
+
public_class_method def self.load_config(opts = {})
|
18
|
+
yaml_config_path = opts[:yaml_config_path]
|
19
|
+
|
20
|
+
return false unless yaml_config_path
|
21
|
+
|
22
|
+
pi = opts[:pi] ||= Pry
|
23
|
+
raise "ERROR: #{yaml_config_path} does not exist." unless File.exist?(yaml_config_path)
|
24
|
+
|
25
|
+
is_encrypted = PWN::Plugins::Vault.file_encrypted?(file: yaml_config_path)
|
26
|
+
|
27
|
+
if is_encrypted
|
28
|
+
# TODO: Implement "something you know, something you have, && something you are?"
|
29
|
+
decryption_file = opts[:decryption_file] ||= "#{Dir.home}/pwn.decryptor.yaml"
|
30
|
+
raise "ERROR: #{decryption_file} does not exist." unless File.exist?(decryption_file)
|
31
|
+
|
32
|
+
yaml_decryptor = YAML.load_file(decryption_file, symbolize_names: true)
|
33
|
+
|
34
|
+
key = opts[:key] ||= yaml_decryptor[:key] ||= ENV.fetch('PWN_DECRYPTOR_KEY')
|
35
|
+
key = PWN::Plugins::AuthenticationHelper.mask_password(prompt: 'Decryption Key') if key.nil?
|
36
|
+
|
37
|
+
iv = opts[:iv] ||= yaml_decryptor[:iv] ||= ENV.fetch('PWN_DECRYPTOR_IV')
|
38
|
+
iv = PWN::Plugins::AuthenticationHelper.mask_password(prompt: 'Decryption IV') if iv.nil?
|
39
|
+
|
40
|
+
yaml_config = PWN::Plugins::Vault.dump(
|
41
|
+
file: yaml_config_path,
|
42
|
+
key: key,
|
43
|
+
iv: iv
|
44
|
+
)
|
45
|
+
else
|
46
|
+
yaml_config = YAML.load_file(yaml_config_path, symbolize_names: true)
|
47
|
+
end
|
48
|
+
pi.config.p = yaml_config
|
49
|
+
Pry.config.p = yaml_config
|
50
|
+
|
51
|
+
valid_ai_engines = %i[
|
52
|
+
grok
|
53
|
+
openai
|
54
|
+
ollama
|
55
|
+
]
|
56
|
+
ai_engine = yaml_config[:ai_engine].to_s.downcase.to_sym
|
57
|
+
|
58
|
+
raise "ERROR: Unsupported AI Engine: #{ai_engine} in #{yaml_config_path}. Supported AI Engines:\n#{valid_ai_engines.inspect}" unless valid_ai_engines.include?(ai_engine)
|
59
|
+
|
60
|
+
pi.config.pwn_ai_engine = ai_engine
|
61
|
+
Pry.config.pwn_ai_engine = ai_engine
|
62
|
+
|
63
|
+
pi.config.pwn_ai_base_uri = pi.config.p[ai_engine][:base_uri]
|
64
|
+
Pry.config.pwn_ai_base_uri = pi.config.pwn_ai_base_uri
|
65
|
+
|
66
|
+
pi.config.pwn_ai_key = pi.config.p[ai_engine][:key]
|
67
|
+
Pry.config.pwn_ai_key = pi.config.pwn_ai_key
|
68
|
+
|
69
|
+
pi.config.pwn_ai_model = pi.config.p[ai_engine][:model]
|
70
|
+
Pry.config.pwn_ai_model = pi.config.pwn_ai_model
|
71
|
+
|
72
|
+
pi.config.pwn_ai_system_role_content = pi.config.p[ai_engine][:system_role_content]
|
73
|
+
Pry.config.pwn_ai_system_role_content = pi.config.pwn_ai_system_role_content
|
74
|
+
|
75
|
+
pi.config.pwn_ai_temp = pi.config.p[ai_engine][:temp]
|
76
|
+
Pry.config.pwn_ai_temp = pi.config.pwn_ai_temp
|
77
|
+
|
78
|
+
pi.config.pwn_asm_arch = pi.config.p[:asm][:arch]
|
79
|
+
Pry.config.pwn_asm_arch = pi.config.pwn_asm_arch
|
80
|
+
|
81
|
+
pi.config.pwn_asm_endian = pi.config.p[:asm][:endian]
|
82
|
+
Pry.config.pwn_asm_endian = pi.config.pwn_asm_endian
|
83
|
+
|
84
|
+
pi.config.pwn_irc = pi.config.p[:irc]
|
85
|
+
Pry.config.pwn_irc = pi.config.pwn_irc
|
86
|
+
|
87
|
+
pi.config.pwn_hunter = pi.config.p[:hunter][:api_key]
|
88
|
+
Pry.config.pwn_hunter = pi.config.pwn_hunter
|
89
|
+
|
90
|
+
pi.config.pwn_shodan = pi.config.p[:shodan][:api_key]
|
91
|
+
Pry.config.pwn_shodan = pi.config.pwn_shodan
|
92
|
+
|
93
|
+
pi.config.reload_config = false
|
94
|
+
Pry.config.reload_config = false
|
95
|
+
|
96
|
+
true
|
97
|
+
rescue StandardError => e
|
98
|
+
raise e
|
99
|
+
end
|
100
|
+
|
11
101
|
# Supported Method Parameters::
|
12
102
|
# PWN::Plugins::REPL.refresh_ps1_proc(
|
13
103
|
# mode: 'required - :splat or nil'
|
@@ -17,6 +107,8 @@ module PWN
|
|
17
107
|
mode = opts[:mode]
|
18
108
|
|
19
109
|
proc do |_target_self, _nest_level, pi|
|
110
|
+
load_config(opts) if Pry.config.reload_config
|
111
|
+
|
20
112
|
pi.config.pwn_repl_line += 1
|
21
113
|
line_pad = format(
|
22
114
|
'%0.3d',
|
@@ -69,6 +161,7 @@ module PWN
|
|
69
161
|
# PWN::Plugins::REPL.add_commands
|
70
162
|
|
71
163
|
public_class_method def self.add_commands
|
164
|
+
# Load any existing pwn.yaml configuration file
|
72
165
|
# Define Custom REPL Commands
|
73
166
|
Pry::Commands.create_command 'welcome-banner' do
|
74
167
|
description 'Display the random welcome banner, including basic usage.'
|
@@ -299,8 +392,7 @@ module PWN
|
|
299
392
|
|
300
393
|
response_history = ai_agents[dm_agent.to_sym][:response_history]
|
301
394
|
ai_engine = pi.config.pwn_ai_engine
|
302
|
-
|
303
|
-
ai_fqdn ||= ''
|
395
|
+
ai_base_uri = pi.config.pwn_ai_base_uri
|
304
396
|
ai_key = pi.config.pwn_ai_key
|
305
397
|
ai_key ||= ''
|
306
398
|
ai_temp = pi.config.pwn_ai_temp
|
@@ -341,6 +433,7 @@ module PWN
|
|
341
433
|
case ai_engine
|
342
434
|
when :grok
|
343
435
|
response = PWN::AI::Grok.chat(
|
436
|
+
base_uri: ai_base_uri,
|
344
437
|
token: ai_key,
|
345
438
|
model: model,
|
346
439
|
temp: ai_temp,
|
@@ -351,7 +444,7 @@ module PWN
|
|
351
444
|
)
|
352
445
|
when :ollama
|
353
446
|
response = PWN::AI::Ollama.chat(
|
354
|
-
|
447
|
+
base_uri: ai_base_uri,
|
355
448
|
token: ai_key,
|
356
449
|
model: model,
|
357
450
|
temp: ai_temp,
|
@@ -362,6 +455,7 @@ module PWN
|
|
362
455
|
)
|
363
456
|
when :openai
|
364
457
|
response = PWN::AI::OpenAI.chat(
|
458
|
+
base_uri: ai_base_uri,
|
365
459
|
token: ai_key,
|
366
460
|
model: model,
|
367
461
|
temp: ai_temp,
|
@@ -502,78 +596,8 @@ module PWN
|
|
502
596
|
|
503
597
|
# Initialize pwn.yaml Configuration using :before_session Hook
|
504
598
|
Pry.config.hooks.add_hook(:before_session, :init_opts) do |_output, _binding, pi|
|
505
|
-
|
506
|
-
|
507
|
-
raise "ERROR: #{yaml_config_path} does not exist." unless File.exist?(yaml_config_path)
|
508
|
-
|
509
|
-
is_encrypted = PWN::Plugins::Vault.file_encrypted?(file: yaml_config_path)
|
510
|
-
|
511
|
-
if is_encrypted
|
512
|
-
# TODO: Implement "something you know, something you have, && something you are?"
|
513
|
-
decryption_file = opts[:decryption_file] ||= "#{Dir.home}/pwn.decryptor.yaml"
|
514
|
-
yaml_decryptor = YAML.load_file(decryption_file, symbolize_names: true) if File.exist?(decryption_file)
|
515
|
-
|
516
|
-
key = opts[:key] ||= yaml_decryptor[:key] ||= ENV.fetch('PWN_DECRYPTOR_KEY')
|
517
|
-
key = PWN::Plugins::AuthenticationHelper.mask_password(prompt: 'Decryption Key') if key.nil?
|
518
|
-
|
519
|
-
iv = opts[:iv] ||= yaml_decryptor[:iv] ||= ENV.fetch('PWN_DECRYPTOR_IV')
|
520
|
-
iv = PWN::Plugins::AuthenticationHelper.mask_password(prompt: 'Decryption IV') if iv.nil?
|
521
|
-
|
522
|
-
yaml_config = PWN::Plugins::Vault.dump(
|
523
|
-
file: yaml_config_path,
|
524
|
-
key: key,
|
525
|
-
iv: iv
|
526
|
-
)
|
527
|
-
else
|
528
|
-
yaml_config = YAML.load_file(yaml_config_path, symbolize_names: true)
|
529
|
-
end
|
530
|
-
pi.config.p = yaml_config
|
531
|
-
Pry.config.p = yaml_config
|
532
|
-
|
533
|
-
valid_ai_engines = %i[
|
534
|
-
grok
|
535
|
-
openai
|
536
|
-
ollama
|
537
|
-
]
|
538
|
-
ai_engine = yaml_config[:ai_engine].to_s.downcase.to_sym
|
539
|
-
|
540
|
-
raise "ERROR: Unsupported AI Engine: #{ai_engine} in #{yaml_config_path}. Supported AI Engines:\n#{valid_ai_engines.inspect}" unless valid_ai_engines.include?(ai_engine)
|
541
|
-
|
542
|
-
pi.config.pwn_ai_engine = ai_engine
|
543
|
-
Pry.config.pwn_ai_engine = ai_engine
|
544
|
-
|
545
|
-
pi.config.pwn_ai_fqdn = pi.config.p[ai_engine][:fqdn]
|
546
|
-
Pry.config.pwn_ai_fqdn = pi.config.pwn_ai_fqdn
|
547
|
-
|
548
|
-
pi.config.pwn_ai_key = pi.config.p[ai_engine][:key]
|
549
|
-
Pry.config.pwn_ai_key = pi.config.pwn_ai_key
|
550
|
-
|
551
|
-
pi.config.pwn_ai_model = pi.config.p[ai_engine][:model]
|
552
|
-
Pry.config.pwn_ai_model = pi.config.pwn_ai_model
|
553
|
-
|
554
|
-
pi.config.pwn_ai_system_role_content = pi.config.p[ai_engine][:system_role_content]
|
555
|
-
Pry.config.pwn_ai_system_role_content = pi.config.pwn_ai_system_role_content
|
556
|
-
|
557
|
-
pi.config.pwn_ai_temp = pi.config.p[ai_engine][:temp]
|
558
|
-
Pry.config.pwn_ai_temp = pi.config.pwn_ai_temp
|
559
|
-
|
560
|
-
pi.config.pwn_asm_arch = pi.config.p[:asm][:arch]
|
561
|
-
Pry.config.pwn_asm_arch = pi.config.pwn_asm_arch
|
562
|
-
|
563
|
-
pi.config.pwn_asm_endian = pi.config.p[:asm][:endian]
|
564
|
-
Pry.config.pwn_asm_endian = pi.config.pwn_asm_endian
|
565
|
-
|
566
|
-
pi.config.pwn_irc = pi.config.p[:irc]
|
567
|
-
Pry.config.pwn_irc = pi.config.pwn_irc
|
568
|
-
|
569
|
-
pi.config.pwn_hunter = pi.config.p[:hunter][:api_key]
|
570
|
-
Pry.config.pwn_hunter = pi.config.pwn_hunter
|
571
|
-
|
572
|
-
pi.config.pwn_shodan = pi.config.p[:shodan][:api_key]
|
573
|
-
Pry.config.pwn_shodan = pi.config.pwn_shodan
|
574
|
-
|
575
|
-
true
|
576
|
-
end
|
599
|
+
opts[:pi] = pi
|
600
|
+
load_config(opts)
|
577
601
|
end
|
578
602
|
|
579
603
|
Pry.config.hooks.add_hook(:after_read, :pwn_asm_hook) do |request, pi|
|
@@ -633,9 +657,12 @@ module PWN
|
|
633
657
|
system_role_content = pi.config.pwn_ai_system_role_content
|
634
658
|
temp = pi.config.pwn_ai_temp
|
635
659
|
|
660
|
+
ai_base_uri = pi.config.pwn_ai_base_uri
|
661
|
+
|
636
662
|
case ai_engine
|
637
663
|
when :grok
|
638
664
|
response = PWN::AI::Grok.chat(
|
665
|
+
base_uri: ai_base_uri,
|
639
666
|
token: ai_key,
|
640
667
|
model: model,
|
641
668
|
system_role_content: system_role_content,
|
@@ -646,10 +673,8 @@ module PWN
|
|
646
673
|
spinner: true
|
647
674
|
)
|
648
675
|
when :ollama
|
649
|
-
fqdn = pi.config.pwn_ai_fqdn
|
650
|
-
|
651
676
|
response = PWN::AI::Ollama.chat(
|
652
|
-
|
677
|
+
base_uri: ai_base_uri,
|
653
678
|
token: ai_key,
|
654
679
|
model: model,
|
655
680
|
system_role_content: system_role_content,
|
@@ -661,6 +686,7 @@ module PWN
|
|
661
686
|
)
|
662
687
|
when :openai
|
663
688
|
response = PWN::AI::OpenAI.chat(
|
689
|
+
base_uri: ai_base_uri,
|
664
690
|
token: ai_key,
|
665
691
|
model: model,
|
666
692
|
system_role_content: system_role_content,
|
@@ -721,8 +747,11 @@ module PWN
|
|
721
747
|
# Define PS1 Prompt
|
722
748
|
Pry.config.pwn_repl_line = 0
|
723
749
|
Pry.config.prompt_name = :pwn
|
724
|
-
arrow_ps1_proc = refresh_ps1_proc
|
725
|
-
|
750
|
+
arrow_ps1_proc = refresh_ps1_proc(opts)
|
751
|
+
|
752
|
+
opts[:mode] = :splat
|
753
|
+
splat_ps1_proc = refresh_ps1_proc(opts)
|
754
|
+
|
726
755
|
ps1 = [arrow_ps1_proc, splat_ps1_proc]
|
727
756
|
prompt = Pry::Prompt.new(:pwn, 'PWN Prototyping REPL', ps1)
|
728
757
|
|
data/lib/pwn/plugins/vault.rb
CHANGED
@@ -172,6 +172,9 @@ module PWN
|
|
172
172
|
relative_editor = File.basename(editor)
|
173
173
|
system(relative_editor, file)
|
174
174
|
|
175
|
+
# If the Pry object exists, set reload_config to true
|
176
|
+
Pry.config.reload_config = true if defined?(Pry)
|
177
|
+
|
175
178
|
encrypt(
|
176
179
|
file: file,
|
177
180
|
key: key,
|
data/lib/pwn/plugins/zaproxy.rb
CHANGED
@@ -206,6 +206,7 @@ module PWN
|
|
206
206
|
api_key = zap_obj[:api_key].to_s.scrub
|
207
207
|
keyword = opts[:keyword]
|
208
208
|
return_as = opts[:return_as] ||= :base64
|
209
|
+
raise 'ERROR: return_as must be :base64 or :har' unless %i[base64 har].include?(return_as)
|
209
210
|
|
210
211
|
entries = []
|
211
212
|
start = 0
|
@@ -229,16 +230,16 @@ module PWN
|
|
229
230
|
start += count
|
230
231
|
end
|
231
232
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
json_request = site[:request].to_json
|
237
|
-
json_request.include?(keyword)
|
238
|
-
end
|
233
|
+
if keyword
|
234
|
+
entries = har_sitemap.select do |site|
|
235
|
+
json_request = site[:request].to_json
|
236
|
+
json_request.include?(keyword)
|
239
237
|
end
|
240
|
-
|
238
|
+
end
|
239
|
+
|
240
|
+
if return_as == :base64
|
241
241
|
# Deduplicate entries based on method + url
|
242
|
+
base64_entries = []
|
242
243
|
entries.each do |entry|
|
243
244
|
entry_hash = {}
|
244
245
|
req = entry[:request]
|
@@ -279,17 +280,9 @@ module PWN
|
|
279
280
|
entry_hash[:request] = encoded_req
|
280
281
|
entry_hash[:response] = encoded_res
|
281
282
|
entry_hash[:http_service] = http_service
|
282
|
-
|
283
|
+
base64_entries.push(entry_hash)
|
283
284
|
end
|
284
|
-
|
285
|
-
if keyword
|
286
|
-
entries = entries.select do |site|
|
287
|
-
deccoded_request = Base64.strict_decode64(site[:request])
|
288
|
-
deccoded_request.include?(keyword)
|
289
|
-
end
|
290
|
-
end
|
291
|
-
else
|
292
|
-
raise "ERROR: Invalid return_as option #{return_as}. Valid options are :base64 or :har"
|
285
|
+
entries = base64_entries
|
293
286
|
end
|
294
287
|
|
295
288
|
entries.uniq
|
data/lib/pwn/reports/sast.rb
CHANGED
@@ -18,9 +18,9 @@ module PWN
|
|
18
18
|
# ai_engine: 'optional - AI engine to use for analysis (:grok, :ollama, or :openai)',
|
19
19
|
# ai_model: 'optionnal - AI Model to Use for Respective AI Engine (e.g., grok-4i-0709, chargpt-4o-latest, llama-3.1, etc.)',
|
20
20
|
# ai_key: 'optional - AI Key/Token for Respective AI Engine',
|
21
|
-
#
|
21
|
+
# ai_base_uri: 'optional - AI FQDN (Only Required for "ollama" AI Engine)',
|
22
22
|
# ai_system_role_content: 'optional - AI System Role Content (Defaults to "Confidence score of 0-10 this is vulnerable (0 being not vulnerable, moving upwards in confidence of exploitation). Provide additional context to assist penetration tester assessment.")',
|
23
|
-
# ai_temp: 'optional - AI Temperature (Defaults to 0.
|
23
|
+
# ai_temp: 'optional - AI Temperature (Defaults to 0.1)'
|
24
24
|
# )
|
25
25
|
|
26
26
|
public_class_method def self.generate(opts = {})
|
@@ -37,15 +37,15 @@ module PWN
|
|
37
37
|
valid_ai_engines = %i[grok ollama openai]
|
38
38
|
raise "ERROR: Invalid AI Engine. Valid options are: #{valid_ai_engines.join(', ')}" unless valid_ai_engines.include?(ai_engine)
|
39
39
|
|
40
|
-
|
41
|
-
raise 'ERROR: FQDN for Ollama AI engine is required.' if ai_engine == :ollama &&
|
40
|
+
ai_base_uri = opts[:ai_base_uri]
|
41
|
+
raise 'ERROR: FQDN for Ollama AI engine is required.' if ai_engine == :ollama && ai_base_uri.nil?
|
42
42
|
|
43
43
|
ai_model = opts[:ai_model]
|
44
44
|
raise 'ERROR: AI Model is required for AI engine ollama.' if ai_engine == :ollama && ai_model.nil?
|
45
45
|
|
46
46
|
ai_key = opts[:ai_key] ||= PWN::Plugins::AuthenticationHelper.mask_password(prompt: "#{ai_engine} Token")
|
47
47
|
ai_system_role_content = opts[:ai_system_role_content] ||= 'Confidence score of 0-10 this is vulnerable (0 being not vulnerable, moving upwards in confidence of exploitation). Provide additional context to assist penetration tester assessment.'
|
48
|
-
ai_temp = opts[:ai_temp] ||= 0.
|
48
|
+
ai_temp = opts[:ai_temp] ||= 0.1
|
49
49
|
|
50
50
|
puts "Analyzing source code using AI engine: #{ai_engine}\nModel: #{ai_model}\nSystem Role Content: #{ai_system_role_content}\nTemperature: #{ai_temp}"
|
51
51
|
end
|
@@ -75,6 +75,7 @@ module PWN
|
|
75
75
|
case ai_engine
|
76
76
|
when :grok
|
77
77
|
response = PWN::AI::Grok.chat(
|
78
|
+
base_uri: ai_base_uri,
|
78
79
|
token: ai_key,
|
79
80
|
model: ai_model,
|
80
81
|
system_role_content: ai_system_role_content,
|
@@ -84,7 +85,7 @@ module PWN
|
|
84
85
|
)
|
85
86
|
when :ollama
|
86
87
|
response = PWN::AI::Ollama.chat(
|
87
|
-
|
88
|
+
base_uri: ai_base_uri,
|
88
89
|
token: ai_key,
|
89
90
|
model: ai_model,
|
90
91
|
system_role_content: ai_system_role_content,
|
@@ -94,6 +95,7 @@ module PWN
|
|
94
95
|
)
|
95
96
|
when :openai
|
96
97
|
response = PWN::AI::OpenAI.chat(
|
98
|
+
base_uri: ai_base_uri,
|
97
99
|
token: ai_key,
|
98
100
|
model: ai_model,
|
99
101
|
system_role_content: ai_system_role_content,
|
data/lib/pwn/version.rb
CHANGED
data/third_party/pwn_rdoc.jsonl
CHANGED
@@ -536,7 +536,7 @@
|
|
536
536
|
{"messages":[{"role":"user","content":"PWN::Plugins::BurpSuite.get_proxy_listeners Usage"},{"role":"assistant","content":"`PWN::Plugins::BurpSuite.get_proxy_listeners`: Supported Method Parameters\n\njson_proxy_listeners = PWN::Plugins::BurpSuite.get_proxy_listeners(\n\nburp_obj: 'required - burp_obj returned by #start method'\n\n)\n"}]}
|
537
537
|
{"messages":[{"role":"user","content":"PWN::Plugins::BurpSuite.get_repeater_tab Usage"},{"role":"assistant","content":"`PWN::Plugins::BurpSuite.get_repeater_tab`: Supported Method Parameters\n\nrepeater_tab = PWN::Plugins::BurpSuite.get_repeater_tab(\n\nburp_obj: 'required - burp_obj returned by #start method',\nid: 'required - id of the repeater tab to get'\n\n)\n"}]}
|
538
538
|
{"messages":[{"role":"user","content":"PWN::Plugins::BurpSuite.get_scan_issues Usage"},{"role":"assistant","content":"`PWN::Plugins::BurpSuite.get_scan_issues`: Supported Method Parameters\n\njson_scan_issues = PWN::Plugins::BurpSuite.get_scan_issues(\n\nburp_obj: 'required - burp_obj returned by #start method'\n\n)\n"}]}
|
539
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::BurpSuite.get_sitemap Usage"},{"role":"assistant","content":"`PWN::Plugins::BurpSuite.get_sitemap`: Supported Method Parameters\n\njson_sitemap = PWN::Plugins::BurpSuite.get_sitemap(\n\nburp_obj: 'required - burp_obj returned by #start method',\nkeyword: 'optional - keyword to filter sitemap entries (default: nil)'\n\n)\n"}]}
|
539
|
+
{"messages":[{"role":"user","content":"PWN::Plugins::BurpSuite.get_sitemap Usage"},{"role":"assistant","content":"`PWN::Plugins::BurpSuite.get_sitemap`: Supported Method Parameters\n\njson_sitemap = PWN::Plugins::BurpSuite.get_sitemap(\n\nburp_obj: 'required - burp_obj returned by #start method',\nkeyword: 'optional - keyword to filter sitemap entries (default: nil)',\nreturn_as: 'optional - :base64 or :har (defaults to :base64)'\n\n)\n"}]}
|
540
540
|
{"messages":[{"role":"user","content":"PWN::Plugins::BurpSuite.help Usage"},{"role":"assistant","content":"`PWN::Plugins::BurpSuite.help`: "}]}
|
541
541
|
{"messages":[{"role":"user","content":"PWN::Plugins::BurpSuite.import_openapi_to_sitemap Usage"},{"role":"assistant","content":"`PWN::Plugins::BurpSuite.import_openapi_to_sitemap`: "}]}
|
542
542
|
{"messages":[{"role":"user","content":"PWN::Plugins::BurpSuite.in_scope Usage"},{"role":"assistant","content":"`PWN::Plugins::BurpSuite.in_scope`: Supported Method Parameters\n\nuri_in_scope = PWN::Plugins::BurpSuite.in_scope(\n\nburp_obj: 'required - burp_obj returned by #start method',\nuri: 'required - URI to determine if in scope'\n\n)\n"}]}
|
@@ -1069,7 +1069,7 @@
|
|
1069
1069
|
{"messages":[{"role":"user","content":"PWN::Reports::Phone.generate Usage"},{"role":"assistant","content":"`PWN::Reports::Phone.generate`: Supported Method Parameters\n\nPWN::Reports::Phone.generate(\n\ndir_path: dir_path,\nresults_hash: results_hash\n\n)\n"}]}
|
1070
1070
|
{"messages":[{"role":"user","content":"PWN::Reports::Phone.help Usage"},{"role":"assistant","content":"`PWN::Reports::Phone.help`: "}]}
|
1071
1071
|
{"messages":[{"role":"user","content":"PWN::Reports::SAST.authors Usage"},{"role":"assistant","content":"`PWN::Reports::SAST.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
1072
|
-
{"messages":[{"role":"user","content":"PWN::Reports::SAST.generate Usage"},{"role":"assistant","content":"`PWN::Reports::SAST.generate`: Supported Method Parameters\n\nPWN::Reports::SAST.generate(\n\ndir_path: 'optional - Directory path to save the report (defaults to .)',\nresults_hash: 'optional - Hash containing the results of the SAST analysis (defaults to empty hash structure)',\nreport_name: 'optional - Name of the report file (defaults to current directory name)',\nai_engine: 'optional - AI engine to use for analysis (:grok, :ollama, or :openai)',\nai_model: 'optionnal - AI Model to Use for Respective AI Engine (e.g., grok-4i-0709, chargpt-4o-latest, llama-3.1, etc.)',\nai_key: 'optional - AI Key/Token for Respective AI Engine',\nai_fqdn: 'optional - AI FQDN (Only Required for \"ollama\" AI Engine)',\nai_system_role_content: 'optional - AI System Role Content (Defaults to \"
|
1072
|
+
{"messages":[{"role":"user","content":"PWN::Reports::SAST.generate Usage"},{"role":"assistant","content":"`PWN::Reports::SAST.generate`: Supported Method Parameters\n\nPWN::Reports::SAST.generate(\n\ndir_path: 'optional - Directory path to save the report (defaults to .)',\nresults_hash: 'optional - Hash containing the results of the SAST analysis (defaults to empty hash structure)',\nreport_name: 'optional - Name of the report file (defaults to current directory name)',\nai_engine: 'optional - AI engine to use for analysis (:grok, :ollama, or :openai)',\nai_model: 'optionnal - AI Model to Use for Respective AI Engine (e.g., grok-4i-0709, chargpt-4o-latest, llama-3.1, etc.)',\nai_key: 'optional - AI Key/Token for Respective AI Engine',\nai_fqdn: 'optional - AI FQDN (Only Required for \"ollama\" AI Engine)',\nai_system_role_content: 'optional - AI System Role Content (Defaults to \"Confidence score of 0-10 this is vulnerable (0 being not vulnerable, moving upwards in confidence of exploitation). Provide additional context to assist penetration tester assessment.\")',\nai_temp: 'optional - AI Temperature (Defaults to 0.1)'\n\n)\n"}]}
|
1073
1073
|
{"messages":[{"role":"user","content":"PWN::Reports::SAST.help Usage"},{"role":"assistant","content":"`PWN::Reports::SAST.help`: "}]}
|
1074
1074
|
{"messages":[{"role":"user","content":"PWN::Reports::URIBuster.authors Usage"},{"role":"assistant","content":"`PWN::Reports::URIBuster.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
1075
1075
|
{"messages":[{"role":"user","content":"PWN::Reports::URIBuster.generate Usage"},{"role":"assistant","content":"`PWN::Reports::URIBuster.generate`: Supported Method Parameters\n\nPWN::Reports::URIBuster.generate(\n\ndir_path: dir_path,\nresults_hash: results_hash\n\n)\n"}]}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.421
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 0day Inc.
|
@@ -15,14 +15,14 @@ dependencies:
|
|
15
15
|
requirements:
|
16
16
|
- - '='
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: 8.0.
|
18
|
+
version: 8.0.3
|
19
19
|
type: :runtime
|
20
20
|
prerelease: false
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
22
22
|
requirements:
|
23
23
|
- - '='
|
24
24
|
- !ruby/object:Gem::Version
|
25
|
-
version: 8.0.
|
25
|
+
version: 8.0.3
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: anemone
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
@@ -309,14 +309,14 @@ dependencies:
|
|
309
309
|
requirements:
|
310
310
|
- - '='
|
311
311
|
- !ruby/object:Gem::Version
|
312
|
-
version: 1.8.
|
312
|
+
version: 1.8.6
|
313
313
|
type: :runtime
|
314
314
|
prerelease: false
|
315
315
|
version_requirements: !ruby/object:Gem::Requirement
|
316
316
|
requirements:
|
317
317
|
- - '='
|
318
318
|
- !ruby/object:Gem::Version
|
319
|
-
version: 1.8.
|
319
|
+
version: 1.8.6
|
320
320
|
- !ruby/object:Gem::Dependency
|
321
321
|
name: gist
|
322
322
|
requirement: !ruby/object:Gem::Requirement
|
@@ -407,14 +407,14 @@ dependencies:
|
|
407
407
|
requirements:
|
408
408
|
- - '='
|
409
409
|
- !ruby/object:Gem::Version
|
410
|
-
version: 2.
|
410
|
+
version: 2.15.0
|
411
411
|
type: :runtime
|
412
412
|
prerelease: false
|
413
413
|
version_requirements: !ruby/object:Gem::Requirement
|
414
414
|
requirements:
|
415
415
|
- - '='
|
416
416
|
- !ruby/object:Gem::Version
|
417
|
-
version: 2.
|
417
|
+
version: 2.15.0
|
418
418
|
- !ruby/object:Gem::Dependency
|
419
419
|
name: jsonpath
|
420
420
|
requirement: !ruby/object:Gem::Requirement
|
@@ -505,14 +505,14 @@ dependencies:
|
|
505
505
|
requirements:
|
506
506
|
- - '='
|
507
507
|
- !ruby/object:Gem::Version
|
508
|
-
version: 0.0.
|
508
|
+
version: 0.0.126
|
509
509
|
type: :runtime
|
510
510
|
prerelease: false
|
511
511
|
version_requirements: !ruby/object:Gem::Requirement
|
512
512
|
requirements:
|
513
513
|
- - '='
|
514
514
|
- !ruby/object:Gem::Version
|
515
|
-
version: 0.0.
|
515
|
+
version: 0.0.126
|
516
516
|
- !ruby/object:Gem::Dependency
|
517
517
|
name: metasm
|
518
518
|
requirement: !ruby/object:Gem::Requirement
|
@@ -939,14 +939,14 @@ dependencies:
|
|
939
939
|
requirements:
|
940
940
|
- - '='
|
941
941
|
- !ruby/object:Gem::Version
|
942
|
-
version: 1.
|
942
|
+
version: 1.81.1
|
943
943
|
type: :runtime
|
944
944
|
prerelease: false
|
945
945
|
version_requirements: !ruby/object:Gem::Requirement
|
946
946
|
requirements:
|
947
947
|
- - '='
|
948
948
|
- !ruby/object:Gem::Version
|
949
|
-
version: 1.
|
949
|
+
version: 1.81.1
|
950
950
|
- !ruby/object:Gem::Dependency
|
951
951
|
name: rubocop-rake
|
952
952
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1065,14 +1065,14 @@ dependencies:
|
|
1065
1065
|
requirements:
|
1066
1066
|
- - '='
|
1067
1067
|
- !ruby/object:Gem::Version
|
1068
|
-
version:
|
1068
|
+
version: 3.0.0
|
1069
1069
|
type: :runtime
|
1070
1070
|
prerelease: false
|
1071
1071
|
version_requirements: !ruby/object:Gem::Requirement
|
1072
1072
|
requirements:
|
1073
1073
|
- - '='
|
1074
1074
|
- !ruby/object:Gem::Version
|
1075
|
-
version:
|
1075
|
+
version: 3.0.0
|
1076
1076
|
- !ruby/object:Gem::Dependency
|
1077
1077
|
name: socksify
|
1078
1078
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1107,14 +1107,14 @@ dependencies:
|
|
1107
1107
|
requirements:
|
1108
1108
|
- - '='
|
1109
1109
|
- !ruby/object:Gem::Version
|
1110
|
-
version: 2.7.
|
1110
|
+
version: 2.7.4
|
1111
1111
|
type: :runtime
|
1112
1112
|
prerelease: false
|
1113
1113
|
version_requirements: !ruby/object:Gem::Requirement
|
1114
1114
|
requirements:
|
1115
1115
|
- - '='
|
1116
1116
|
- !ruby/object:Gem::Version
|
1117
|
-
version: 2.7.
|
1117
|
+
version: 2.7.4
|
1118
1118
|
- !ruby/object:Gem::Dependency
|
1119
1119
|
name: thin
|
1120
1120
|
requirement: !ruby/object:Gem::Requirement
|