pwn 0.5.453 → 0.5.455
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/bin/pwn +4 -15
- data/bin/pwn_android_war_dialer +1 -10
- data/bin/pwn_aws_describe_resources +1 -10
- data/bin/pwn_bdba_groups +1 -10
- data/bin/pwn_bdba_scan +1 -10
- data/bin/pwn_burp_suite_pro_active_rest_api_scan +1 -10
- data/bin/pwn_burp_suite_pro_active_scan +1 -10
- data/bin/pwn_char_base64_encoding +1 -10
- data/bin/pwn_char_dec_encoding +1 -10
- data/bin/pwn_char_hex_escaped_encoding +1 -10
- data/bin/pwn_char_html_entity_encoding +1 -10
- data/bin/pwn_char_unicode_escaped_encoding +1 -10
- data/bin/pwn_char_url_encoding +1 -10
- data/bin/pwn_crt_sh +1 -10
- data/bin/pwn_defectdojo_engagement_create +1 -10
- data/bin/pwn_defectdojo_importscan +1 -10
- data/bin/pwn_defectdojo_reimportscan +1 -10
- data/bin/pwn_diff_csv_files_w_column_exclude +1 -6
- data/bin/pwn_domain_reversewhois +1 -10
- data/bin/pwn_fuzz_net_app_proto +1 -10
- data/bin/pwn_gqrx_scanner +1 -10
- data/bin/pwn_jenkins_create_job +1 -10
- data/bin/pwn_jenkins_create_view +1 -10
- data/bin/pwn_jenkins_install_plugin +1 -10
- data/bin/pwn_jenkins_thinBackup_aws_s3 +1 -10
- data/bin/pwn_jenkins_update_plugins +1 -10
- data/bin/pwn_jenkins_useradd +1 -10
- data/bin/pwn_mail_agent +1 -10
- data/bin/pwn_nessus_cloud_scan_crud +1 -10
- data/bin/pwn_nessus_cloud_vulnscan +1 -10
- data/bin/pwn_nexpose +1 -10
- data/bin/pwn_nmap_discover_tcp_udp +1 -10
- data/bin/pwn_openvas_vulnscan +1 -10
- data/bin/pwn_pastebin_sample_filter +1 -10
- data/bin/pwn_phone +2 -11
- data/bin/pwn_rdoc_to_jsonl +5 -7
- data/bin/pwn_sast +1 -25
- data/bin/pwn_serial_check_voicemail +1 -10
- data/bin/pwn_serial_msr206 +4 -6
- data/bin/pwn_serial_son_micro_sm132_rfid +4 -6
- data/bin/pwn_shodan_graphql_introspection +1 -6
- data/bin/pwn_shodan_search +1 -10
- data/bin/pwn_simple_http_server +4 -5
- data/bin/pwn_web_cache_deception +1 -10
- data/bin/pwn_www_checkip +7 -5
- data/bin/pwn_www_uri_buster +1 -10
- data/bin/pwn_xss_dom_vectors +1 -10
- data/bin/pwn_zaproxy_active_rest_api_scan +1 -10
- data/bin/pwn_zaproxy_active_scan +1 -10
- data/lib/pwn/ai/introspection.rb +3 -1
- data/lib/pwn/config.rb +103 -47
- data/lib/pwn/driver.rb +85 -0
- data/lib/pwn/plugins/repl.rb +7 -10
- data/lib/pwn/plugins/transparent_browser.rb +1 -1
- data/lib/pwn/version.rb +1 -1
- data/lib/pwn.rb +5 -4
- data/spec/lib/pwn/driver_spec.rb +15 -0
- data/third_party/pwn_rdoc.jsonl +11 -5
- metadata +7 -21
- data/etc/pwn.decryptor.yaml.EXAMPLE +0 -5
- data/etc/pwn.yaml.EXAMPLE +0 -71
data/lib/pwn/ai/introspection.rb
CHANGED
|
@@ -45,7 +45,9 @@ module PWN
|
|
|
45
45
|
system_role_content: system_role_content,
|
|
46
46
|
spinner: false
|
|
47
47
|
)
|
|
48
|
-
|
|
48
|
+
response = response[:choices].last[:content] if response.is_a?(Hash) &&
|
|
49
|
+
response.key?(:choices) &&
|
|
50
|
+
response[:choices].last.keys.include?(:content)
|
|
49
51
|
when :openai
|
|
50
52
|
response = PWN::AI::OpenAI.chat(
|
|
51
53
|
request: request.chomp,
|
data/lib/pwn/config.rb
CHANGED
|
@@ -7,10 +7,46 @@ module PWN
|
|
|
7
7
|
# Used to manage PWN configuration settings within PWN drivers.
|
|
8
8
|
module Config
|
|
9
9
|
# Supported Method Parameters::
|
|
10
|
-
#
|
|
11
|
-
|
|
10
|
+
# PWN::Config.redact_sensitive_artifacts(
|
|
11
|
+
# config: 'optional - Hash to redact sensitive artifacts from. Defaults to PWN::Env'
|
|
12
|
+
# )
|
|
13
|
+
public_class_method def self.redact_sensitive_artifacts(opts = {})
|
|
14
|
+
config = opts[:config] ||= PWN::Env
|
|
15
|
+
|
|
16
|
+
sensitive_keys = %i[api_key key pass password psk token]
|
|
17
|
+
|
|
18
|
+
# Transform values at the current level: redact sensitive keys
|
|
19
|
+
config.transform_values.with_index do |v, k|
|
|
20
|
+
if sensitive_keys.include?(config.keys[k])
|
|
21
|
+
'>>> REDACTED >>> USE `pwn-vault` FOR ADMINISTRATION <<< REDACTED <<<'
|
|
22
|
+
else
|
|
23
|
+
v.is_a?(Hash) ? redact_sensitive_artifacts(config: v) : v
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
rescue StandardError => e
|
|
27
|
+
raise e
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Supported Method Parameters::
|
|
31
|
+
# env = PWN::Config.init_driver_options
|
|
32
|
+
public_class_method def self.init_driver_options
|
|
33
|
+
env = {
|
|
34
|
+
driver_opts: {
|
|
35
|
+
pwn_env_path: nil,
|
|
36
|
+
pwn_dec_path: nil
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
PWN.const_set(:Env, env)
|
|
40
|
+
# puts '[*] Loaded driver options.'
|
|
41
|
+
rescue StandardError => e
|
|
42
|
+
raise e
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Supported Method Parameters::
|
|
46
|
+
# env = PWN::Config.default_env
|
|
47
|
+
public_class_method def self.default_env(opts = {})
|
|
12
48
|
pwn_env_path = opts[:pwn_env_path]
|
|
13
|
-
pwn_dec_path = "#{
|
|
49
|
+
pwn_dec_path = "#{pwn_env_path}.decryptor"
|
|
14
50
|
|
|
15
51
|
puts "
|
|
16
52
|
[*] NOTICE:
|
|
@@ -26,38 +62,38 @@ module PWN
|
|
|
26
62
|
"
|
|
27
63
|
env = {
|
|
28
64
|
ai: {
|
|
29
|
-
active:
|
|
65
|
+
active: 'grok',
|
|
30
66
|
introspection: false,
|
|
31
67
|
grok: {
|
|
32
|
-
base_uri:
|
|
33
|
-
key:
|
|
34
|
-
model:
|
|
35
|
-
system_role_content:
|
|
36
|
-
temp:
|
|
68
|
+
base_uri: 'optional - Base URI for Grok - Use private base OR defaults to https://api.x.ai/v1',
|
|
69
|
+
key: 'required - OpenAI API Key',
|
|
70
|
+
model: 'optional - Grok model to use',
|
|
71
|
+
system_role_content: 'You are an ethically hacking OpenAI agent.',
|
|
72
|
+
temp: 'optional - OpenAI temperature'
|
|
37
73
|
},
|
|
38
74
|
openai: {
|
|
39
|
-
base_uri:
|
|
40
|
-
key:
|
|
41
|
-
model:
|
|
42
|
-
system_role_content:
|
|
43
|
-
temp:
|
|
75
|
+
base_uri: 'optional - Base URI for OpenAI - Use private base OR defaults to https://api.openai.com/v1',
|
|
76
|
+
key: 'required - OpenAI API Key',
|
|
77
|
+
model: 'optional - OpenAI model to use',
|
|
78
|
+
system_role_content: 'You are an ethically hacking OpenAI agent.',
|
|
79
|
+
temp: 'optional - OpenAI temperature'
|
|
44
80
|
},
|
|
45
81
|
ollama: {
|
|
46
|
-
base_uri:
|
|
47
|
-
key:
|
|
48
|
-
model:
|
|
49
|
-
system_role_content:
|
|
50
|
-
temp:
|
|
82
|
+
base_uri: 'required - Base URI for Open WebUI - e.g. https://ollama.local',
|
|
83
|
+
key: 'required - Open WebUI API Key Under Settings >> Account >> JWT Token',
|
|
84
|
+
model: 'required - Ollama model to use',
|
|
85
|
+
system_role_content: 'You are an ethically hacking Ollama agent.',
|
|
86
|
+
temp: 'optional - Ollama temperature'
|
|
51
87
|
}
|
|
52
88
|
},
|
|
53
89
|
plugins: {
|
|
54
|
-
asm: { arch:
|
|
90
|
+
asm: { arch: PWN::Plugins::DetectOS.arch, endian: PWN::Plugins::DetectOS.endian.to_s },
|
|
55
91
|
blockchain: {
|
|
56
92
|
bitcoin: {
|
|
57
|
-
rpc_host:
|
|
93
|
+
rpc_host: 'localhost',
|
|
58
94
|
rpc_port: 8332,
|
|
59
|
-
rpc_user:
|
|
60
|
-
rpc_pass:
|
|
95
|
+
rpc_user: 'bitcoin RPC Username',
|
|
96
|
+
rpc_pass: 'bitcoin RPC Password'
|
|
61
97
|
}
|
|
62
98
|
},
|
|
63
99
|
irc: {
|
|
@@ -84,9 +120,23 @@ module PWN
|
|
|
84
120
|
},
|
|
85
121
|
hunter: { api_key: 'hunter.how API Key' },
|
|
86
122
|
meshtastic: {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
123
|
+
mqtt: {
|
|
124
|
+
host: 'mqtt.meshtastic.org',
|
|
125
|
+
port: 1883,
|
|
126
|
+
user: 'meshdev',
|
|
127
|
+
pass: 'large4cats'
|
|
128
|
+
},
|
|
129
|
+
channel: {
|
|
130
|
+
LongFast: {
|
|
131
|
+
psk: 'AQ==',
|
|
132
|
+
region: 'US/<STATE>',
|
|
133
|
+
channel_topic: '2/e/#'
|
|
134
|
+
},
|
|
135
|
+
PWN: {
|
|
136
|
+
psk: 'required - PSK for pwn channel',
|
|
137
|
+
region: 'US/<STATE>',
|
|
138
|
+
channel_topic: '2/e/PWN/#'
|
|
139
|
+
}
|
|
90
140
|
}
|
|
91
141
|
},
|
|
92
142
|
shodan: { api_key: 'SHODAN API Key' }
|
|
@@ -116,7 +166,7 @@ module PWN
|
|
|
116
166
|
# Supported Method Parameters::
|
|
117
167
|
# PWN::Config.refresh_env(
|
|
118
168
|
# pwn_env_path: 'optional - Path to pwn.yaml file. Defaults to ~/.pwn/pwn.yaml',
|
|
119
|
-
# pwn_dec_path: 'optional - Path to pwn.decryptor
|
|
169
|
+
# pwn_dec_path: 'optional - Path to pwn.yaml.decryptor file. Defaults to ~/.pwn/pwn.yaml.decryptor'
|
|
120
170
|
# )
|
|
121
171
|
|
|
122
172
|
public_class_method def self.refresh_env(opts = {})
|
|
@@ -124,30 +174,27 @@ module PWN
|
|
|
124
174
|
FileUtils.mkdir_p(pwn_env_root)
|
|
125
175
|
|
|
126
176
|
pwn_env_path = opts[:pwn_env_path] ||= "#{pwn_env_root}/pwn.yaml"
|
|
127
|
-
return
|
|
177
|
+
return default_env(pwn_env_path: pwn_env_path) unless File.exist?(pwn_env_path)
|
|
128
178
|
|
|
129
179
|
is_encrypted = PWN::Plugins::Vault.file_encrypted?(file: pwn_env_path)
|
|
180
|
+
raise "PWN Environment (#{pwn_env_path}) is not encrypted! Use PWN::Vault.create(file: '#{pwn_env_path}', decryptor_file: '#{pwn_env_path}.decryptor') to encrypt it." unless is_encrypted
|
|
130
181
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
raise "PWN Decryptor (#{pwn_dec_path}) does not exist!" unless File.exist?(pwn_dec_path)
|
|
182
|
+
pwn_dec_path = opts[:pwn_dec_path] ||= "#{pwn_env_path}.decryptor"
|
|
183
|
+
raise "PWN Decryptor (#{pwn_dec_path}) does not exist!" unless File.exist?(pwn_dec_path)
|
|
134
184
|
|
|
135
|
-
|
|
185
|
+
pwn_decryptor = YAML.load_file(pwn_dec_path, symbolize_names: true)
|
|
136
186
|
|
|
137
|
-
|
|
138
|
-
|
|
187
|
+
key = opts[:key] ||= pwn_decryptor[:key] ||= ENV.fetch('PWN_DECRYPTOR_KEY')
|
|
188
|
+
key = PWN::Plugins::AuthenticationHelper.mask_password(prompt: 'Decryption Key') if key.nil?
|
|
139
189
|
|
|
140
|
-
|
|
141
|
-
|
|
190
|
+
iv = opts[:iv] ||= pwn_decryptor[:iv] ||= ENV.fetch('PWN_DECRYPTOR_IV')
|
|
191
|
+
iv = PWN::Plugins::AuthenticationHelper.mask_password(prompt: 'Decryption IV') if iv.nil?
|
|
142
192
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
else
|
|
149
|
-
env = YAML.load_file(pwn_env_path, symbolize_names: true)
|
|
150
|
-
end
|
|
193
|
+
env = PWN::Plugins::Vault.dump(
|
|
194
|
+
file: pwn_env_path,
|
|
195
|
+
key: key,
|
|
196
|
+
iv: iv
|
|
197
|
+
)
|
|
151
198
|
|
|
152
199
|
valid_ai_engines = PWN::AI.help.reject { |e| e.downcase == :introspection }.map(&:downcase)
|
|
153
200
|
|
|
@@ -185,9 +232,18 @@ module PWN
|
|
|
185
232
|
pwn_dec_path: pwn_dec_path
|
|
186
233
|
}
|
|
187
234
|
|
|
188
|
-
|
|
235
|
+
# Assign the refreshed env to PWN::Env
|
|
189
236
|
PWN.send(:remove_const, :Env) if PWN.const_defined?(:Env)
|
|
190
237
|
PWN.const_set(:Env, env.freeze)
|
|
238
|
+
|
|
239
|
+
# Redact sensitive artifacts from PWN::Env and store in PWN::EnvRedacted
|
|
240
|
+
env_redacted = redact_sensitive_artifacts(config: env)
|
|
241
|
+
PWN.send(:remove_const, :EnvRedacted) if PWN.const_defined?(:EnvRedacted)
|
|
242
|
+
PWN.const_set(:EnvRedacted, env_redacted.freeze)
|
|
243
|
+
|
|
244
|
+
Pry.config.refresh_pwn_env = false if defined?(Pry)
|
|
245
|
+
|
|
246
|
+
puts "[*] PWN::Env loaded via: #{pwn_env_path}\n"
|
|
191
247
|
rescue StandardError => e
|
|
192
248
|
raise e
|
|
193
249
|
end
|
|
@@ -204,13 +260,13 @@ module PWN
|
|
|
204
260
|
|
|
205
261
|
public_class_method def self.help
|
|
206
262
|
puts "USAGE:
|
|
207
|
-
#{self}.
|
|
263
|
+
#{self}.default_env(
|
|
208
264
|
pwn_env_path: 'optional - Path to pwn.yaml file. Defaults to ~/.pwn/pwn.yaml'
|
|
209
265
|
)
|
|
210
266
|
|
|
211
267
|
#{self}.refresh_env(
|
|
212
268
|
pwn_env_path: 'optional - Path to pwn.yaml file. Defaults to ~/.pwn/pwn.yaml',
|
|
213
|
-
|
|
269
|
+
pwn_dec_path: 'optional - Path to pwn.yaml.decryptor file. Defaults to ~/.pwn/pwn.yaml.decryrptor'
|
|
214
270
|
)
|
|
215
271
|
|
|
216
272
|
#{self}.authors
|
data/lib/pwn/driver.rb
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'optparse'
|
|
4
|
+
|
|
5
|
+
module PWN
|
|
6
|
+
# Used to consume options passed into PWN drivers and load PWN::Env
|
|
7
|
+
class Driver
|
|
8
|
+
# Add OptionParser options to PWN::Env
|
|
9
|
+
class Parser < OptionParser
|
|
10
|
+
attr_accessor :auto_opts_help,
|
|
11
|
+
:opts
|
|
12
|
+
|
|
13
|
+
def initialize
|
|
14
|
+
super
|
|
15
|
+
@opts = PWN::Env[:driver_opts]
|
|
16
|
+
@auto_opts_help = true
|
|
17
|
+
|
|
18
|
+
banner = "USAGE: #{File.basename($PROGRAM_NAME)} [opts]\n"
|
|
19
|
+
on(
|
|
20
|
+
'-YPATH',
|
|
21
|
+
'--pwn_env=PATH',
|
|
22
|
+
'<Optional - PWN::Env YAML file path (Default: ~/.pwn/pwn.yaml)>'
|
|
23
|
+
) do |o|
|
|
24
|
+
@opts[:pwn_env_path] = o
|
|
25
|
+
end
|
|
26
|
+
on(
|
|
27
|
+
'-ZPATH',
|
|
28
|
+
'--pwn_dec=PATH',
|
|
29
|
+
'<Optional - Out-of-Band YAML file path (Default: ~/.pwn/pwn.decryptor.yaml)>'
|
|
30
|
+
) do |o|
|
|
31
|
+
@opts[:pwn_dec_path] = o
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def parse!
|
|
36
|
+
super(ARGV, into: @opts)
|
|
37
|
+
# puts @opts
|
|
38
|
+
|
|
39
|
+
PWN::Config.refresh_env(
|
|
40
|
+
pwn_env_path: @opts[:pwn_env_path],
|
|
41
|
+
pwn_dec_path: @opts[:pwn_dec_path]
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
if @auto_opts_help && @opts.keys.join(' ') == 'pwn_env_path pwn_dec_path'
|
|
45
|
+
puts `#{File.basename($PROGRAM_NAME)} --help`
|
|
46
|
+
exit 1
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Author(s):: 0day Inc. <support@0dayinc.com>
|
|
52
|
+
|
|
53
|
+
public_class_method def self.authors
|
|
54
|
+
"AUTHOR(S):
|
|
55
|
+
0day Inc. <support@0dayinc.com>
|
|
56
|
+
"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Display Usage for this Module
|
|
60
|
+
|
|
61
|
+
public_class_method def self.help
|
|
62
|
+
puts "USAGE:
|
|
63
|
+
# Load default driver options into PWN::Env
|
|
64
|
+
opts = PWN::Env[:driver_opts]
|
|
65
|
+
#{self}::Parser.new.parse(&:on).parse!
|
|
66
|
+
|
|
67
|
+
# Add more options by passing a block to the parser
|
|
68
|
+
opts = PWN::Env[:driver_opts]
|
|
69
|
+
#{self}::Parser.new do |options|
|
|
70
|
+
# Boolean option
|
|
71
|
+
options.on('-b', '--boolean') do |o|
|
|
72
|
+
opts[:boolean] = o
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# String option
|
|
76
|
+
options.on('-sSTRING', '--string=STRING') do |o|
|
|
77
|
+
opts[:string] = o
|
|
78
|
+
end
|
|
79
|
+
end.parse!
|
|
80
|
+
|
|
81
|
+
#{self}.authors
|
|
82
|
+
"
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
data/lib/pwn/plugins/repl.rb
CHANGED
|
@@ -489,6 +489,7 @@ module PWN
|
|
|
489
489
|
# Define REPL Hooks
|
|
490
490
|
# Welcome Banner Hook
|
|
491
491
|
Pry.config.hooks.add_hook(:before_session, :welcome) do |output, _binding, _pi|
|
|
492
|
+
Pry.config.refresh_pwn_env = false
|
|
492
493
|
output.puts PWN::Banner.welcome
|
|
493
494
|
end
|
|
494
495
|
|
|
@@ -597,11 +598,11 @@ module PWN
|
|
|
597
598
|
end
|
|
598
599
|
|
|
599
600
|
# Supported Method Parameters::
|
|
600
|
-
# PWN::Plugins::REPL.start
|
|
601
|
-
|
|
602
|
-
|
|
601
|
+
# PWN::Plugins::REPL.start
|
|
602
|
+
|
|
603
|
+
public_class_method def self.start
|
|
604
|
+
opts = PWN::Env[:driver_opts]
|
|
603
605
|
|
|
604
|
-
public_class_method def self.start(opts = {})
|
|
605
606
|
# Monkey Patch Pry, add commands, && hooks
|
|
606
607
|
PWN::Plugins::MonkeyPatch.pry
|
|
607
608
|
pwn_env_root = "#{Dir.home}/.pwn"
|
|
@@ -646,13 +647,9 @@ module PWN
|
|
|
646
647
|
|
|
647
648
|
#{self}.add_commands
|
|
648
649
|
|
|
649
|
-
#{self}.add_hooks
|
|
650
|
-
opts: 'required - Hash object passed in via pwn OptParser'
|
|
651
|
-
)
|
|
650
|
+
#{self}.add_hooks
|
|
652
651
|
|
|
653
|
-
#{self}.start
|
|
654
|
-
opts: 'required - Hash object passed in via pwn OptParser'
|
|
655
|
-
)
|
|
652
|
+
#{self}.start
|
|
656
653
|
|
|
657
654
|
#{self}.authors
|
|
658
655
|
"
|
data/lib/pwn/version.rb
CHANGED
data/lib/pwn.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'json'
|
|
4
|
-
require 'optparse'
|
|
5
4
|
require 'pwn/version'
|
|
6
5
|
require 'yaml'
|
|
7
6
|
|
|
@@ -16,21 +15,23 @@ module PWN
|
|
|
16
15
|
autoload :Banner, 'pwn/banner'
|
|
17
16
|
autoload :Blockchain, 'pwn/blockchain'
|
|
18
17
|
autoload :Config, 'pwn/config'
|
|
18
|
+
autoload :Driver, 'pwn/driver'
|
|
19
19
|
autoload :FFI, 'pwn/ffi'
|
|
20
20
|
autoload :Plugins, 'pwn/plugins'
|
|
21
21
|
autoload :Reports, 'pwn/reports'
|
|
22
22
|
autoload :SAST, 'pwn/sast'
|
|
23
23
|
autoload :WWW, 'pwn/www'
|
|
24
24
|
|
|
25
|
+
# Initialize Options for Drivers
|
|
26
|
+
|
|
27
|
+
PWN::Config.init_driver_options
|
|
28
|
+
|
|
25
29
|
# Display a List of Every PWN Module
|
|
26
30
|
|
|
27
31
|
public_class_method def self.help
|
|
28
32
|
constants.sort
|
|
29
33
|
end
|
|
30
34
|
|
|
31
|
-
# Initialize PWN configuration file
|
|
32
|
-
# PWN::Env is the constant that stores the configuration data
|
|
33
|
-
PWN::Config.refresh_env
|
|
34
35
|
rescue StandardError => e
|
|
35
36
|
puts e.backtrace
|
|
36
37
|
raise e
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe PWN::Driver do
|
|
6
|
+
it 'should display information for authors' do
|
|
7
|
+
authors_response = PWN::Driver
|
|
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::Driver
|
|
13
|
+
expect(help_response).to respond_to :help
|
|
14
|
+
end
|
|
15
|
+
end
|
data/third_party/pwn_rdoc.jsonl
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
{"messages":[{"role":"user","content":"PWN::AI::Grok.help Usage"},{"role":"assistant","content":"`PWN::AI::Grok.help`: "}]}
|
|
8
8
|
{"messages":[{"role":"user","content":"PWN::AI::Introspection.authors Usage"},{"role":"assistant","content":"`PWN::AI::Introspection.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
9
9
|
{"messages":[{"role":"user","content":"PWN::AI::Introspection.help Usage"},{"role":"assistant","content":"`PWN::AI::Introspection.help`: "}]}
|
|
10
|
-
{"messages":[{"role":"user","content":"PWN::AI::Introspection.
|
|
10
|
+
{"messages":[{"role":"user","content":"PWN::AI::Introspection.reflect_on Usage"},{"role":"assistant","content":"`PWN::AI::Introspection.reflect_on`: Supported Method Parameters\n\nresponse = PWN::AI::Introspection.reflect_on(\n\nrequest: 'required - String - What you want the AI to reflect on',\nsystem_role_content: 'optional - context to set up the model behavior for reflection'\n\n)\n"}]}
|
|
11
11
|
{"messages":[{"role":"user","content":"PWN::AI::Ollama.authors Usage"},{"role":"assistant","content":"`PWN::AI::Ollama.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
12
12
|
{"messages":[{"role":"user","content":"PWN::AI::Ollama.chat Usage"},{"role":"assistant","content":"`PWN::AI::Ollama.chat`: Supported Method Parameters\n\nresponse = PWN::AI::Ollama.chat(\n\nrequest: 'required - message to ChatGPT'\nmodel: 'optional - model to use for text generation (defaults to PWN::Env[:ai][:ollama][:model])',\ntemp: 'optional - creative response float (deafults to PWN::Env[:ai][:ollama][:temp])',\nsystem_role_content: 'optional - context to set up the model behavior for conversation (Default: PWN::Env[:ai][:ollama][:system_role_content])',\nresponse_history: 'optional - pass response back in to have a conversation',\nspeak_answer: 'optional speak answer using PWN::Plugins::Voice.text_to_speech (Default: nil)',\ntimeout: 'optional timeout in seconds (defaults to 300)',\nspinner: 'optional - display spinner (defaults to false)'\n\n)\n"}]}
|
|
13
13
|
{"messages":[{"role":"user","content":"PWN::AI::Ollama.get_models Usage"},{"role":"assistant","content":"`PWN::AI::Ollama.get_models`: Supported Method Parameters\n\nresponse = PWN::AI::Ollama.get_models\n"}]}
|
|
@@ -458,9 +458,15 @@
|
|
|
458
458
|
{"messages":[{"role":"user","content":"PWN::Blockchain::ETH.get_latest_block Usage"},{"role":"assistant","content":"`PWN::Blockchain::ETH.get_latest_block`: Supported Method Parameters\n\nlatest_block = PWN::Blockchain::ETH.get_latest_block(\n\ntoken: 'optional - API token for higher rate limits'\n\n)\n"}]}
|
|
459
459
|
{"messages":[{"role":"user","content":"PWN::Blockchain::ETH.help Usage"},{"role":"assistant","content":"`PWN::Blockchain::ETH.help`: "}]}
|
|
460
460
|
{"messages":[{"role":"user","content":"PWN::Config.authors Usage"},{"role":"assistant","content":"`PWN::Config.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
461
|
+
{"messages":[{"role":"user","content":"PWN::Config.default_env Usage"},{"role":"assistant","content":"`PWN::Config.default_env`: Supported Method Parameters\n\nenv = PWN::Config.default_env\n"}]}
|
|
461
462
|
{"messages":[{"role":"user","content":"PWN::Config.help Usage"},{"role":"assistant","content":"`PWN::Config.help`: "}]}
|
|
462
|
-
{"messages":[{"role":"user","content":"PWN::Config.
|
|
463
|
+
{"messages":[{"role":"user","content":"PWN::Config.init_driver_options Usage"},{"role":"assistant","content":"`PWN::Config.init_driver_options`: Supported Method Parameters\n\nenv = PWN::Config.init_driver_options\n"}]}
|
|
464
|
+
{"messages":[{"role":"user","content":"PWN::Config.redact_sensitive_artifacts Usage"},{"role":"assistant","content":"`PWN::Config.redact_sensitive_artifacts`: Supported Method Parameters\n\nPWN::Config.redact_sensitive_artifacts(\n\nconfig: 'optional - Hash to redact sensitive artifacts from. Defaults to PWN::Env'\n\n)\n"}]}
|
|
463
465
|
{"messages":[{"role":"user","content":"PWN::Config.refresh_env Usage"},{"role":"assistant","content":"`PWN::Config.refresh_env`: Supported Method Parameters\n\nPWN::Config.refresh_env(\n\npwn_env_path: 'optional - Path to pwn.yaml file. Defaults to ~/.pwn/pwn.yaml',\npwn_dec_path: 'optional - Path to pwn.decryptor.yaml file. Defaults to ~/.pwn/pwn.decryptor.yaml'\n\n)\n"}]}
|
|
466
|
+
{"messages":[{"role":"user","content":"PWN::Driver.authors Usage"},{"role":"assistant","content":"`PWN::Driver.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
467
|
+
{"messages":[{"role":"user","content":"PWN::Driver.help Usage"},{"role":"assistant","content":"`PWN::Driver.help`: "}]}
|
|
468
|
+
{"messages":[{"role":"user","content":"PWN::Driver::Parser.new Usage"},{"role":"assistant","content":"`PWN::Driver::Parser.new`: "}]}
|
|
469
|
+
{"messages":[{"role":"user","content":"PWN::Driver::Parser.parse! Usage"},{"role":"assistant","content":"`PWN::Driver::Parser.parse!`: "}]}
|
|
464
470
|
{"messages":[{"role":"user","content":"PWN::FFI.help Usage"},{"role":"assistant","content":"`PWN::FFI.help`: "}]}
|
|
465
471
|
{"messages":[{"role":"user","content":"PWN::FFI::Stdio.authors Usage"},{"role":"assistant","content":"`PWN::FFI::Stdio.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
466
472
|
{"messages":[{"role":"user","content":"PWN::FFI::Stdio.help Usage"},{"role":"assistant","content":"`PWN::FFI::Stdio.help`: "}]}
|
|
@@ -903,7 +909,7 @@
|
|
|
903
909
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
904
910
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.help Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.help`: "}]}
|
|
905
911
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.refresh_ps1_proc Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.refresh_ps1_proc`: Supported Method Parameters\n\nPWN::Plugins::REPL.refresh_ps1_proc(\n\nmode: 'required - :splat or nil'\n\n)\n"}]}
|
|
906
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.start Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.start`: Supported Method Parameters\n\nPWN::Plugins::REPL.start
|
|
912
|
+
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.start Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.start`: Supported Method Parameters\n\nPWN::Plugins::REPL.start\n"}]}
|
|
907
913
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.process Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.process`: "}]}
|
|
908
914
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.top_h1_program_scope Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.top_h1_program_scope`: "}]}
|
|
909
915
|
{"messages":[{"role":"user","content":"PWN::Plugins::RFIDler.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::RFIDler.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
@@ -997,11 +1003,11 @@
|
|
|
997
1003
|
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.close_tab Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.close_tab`: Supported Method Parameters\n\ntab = PWN::Plugins::TransparentBrowser.close_tab(\n\nbrowser_obj: 'required - browser_obj returned from #open method)',\nindex: 'optional - index of tab to close (defaults to closing active tab)',\nkeyword: 'optional - keyword in title or url used to close tabs (defaults to closing active tab)'\n\n)\n"}]}
|
|
998
1004
|
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.console Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.console`: Supported Method Parameters\n\nconsole_resp = PWN::Plugins::TransparentBrowser.console(\n\nbrowser_obj: browser_obj1,\njs: 'required - JavaScript expression to evaluate',\nreturn_to: 'optional - return to :console or :stdout (defaults to :console)'\n\n)\n"}]}
|
|
999
1005
|
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.debugger Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.debugger`: Supported Method Parameters\n\nPWN::Plugins::TransparentBrowser.debugger(\n\nbrowser_obj: 'required - browser_obj returned from #open method)',\naction: 'optional - action to take :enable|:pause|:resume|:disable (Defaults to :enable)',\n\n)\n"}]}
|
|
1006
|
+
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.devtools_websocket_messages Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.devtools_websocket_messages`: Supported Method Parameters\n\nmessages = PWN::Plugins::TransparentBrowser.devtools_websocket_messages(\n\nbrowser_obj: 'required - browser_obj returned from #open method)'\n\n)\n"}]}
|
|
1000
1007
|
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.dom Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.dom`: Supported Method Parameters\n\ncurrent_dom = PWN::Plugins::TransparentBrowser.dom(\n\nbrowser_obj: 'required - browser_obj returned from #open method)'\n\n)\n"}]}
|
|
1001
1008
|
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.dump_links Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.dump_links`: Supported Method Parameters\n\nbrowser_obj = PWN::Plugins::TransparentBrowser.dump_links(\n\nbrowser_obj: browser_obj1\n\n)\n"}]}
|
|
1002
1009
|
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.find_elements_by_text Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.find_elements_by_text`: Supported Method Parameters\n\nbrowser_obj = PWN::Plugins::TransparentBrowser.find_elements_by_text(\n\nbrowser_obj: browser_obj1,\ntext: 'required - text to search for in the DOM'\n\n)\n"}]}
|
|
1003
1010
|
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.get_page_state Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.get_page_state`: Supported Method Parameters\n\npage_state = PWN::Plugins::TransparentBrowser.get_page_state(\n\nbrowser_obj: 'required - browser_obj returned from #open method)'\n\n)\n"}]}
|
|
1004
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.get_possible_breakpoints Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.get_possible_breakpoints`: Supported Method Parameters\n\nPWN::Plugins::TransparentBrowser.get_possible_breakpoints(\n\nbrowser_obj: 'required - browser_obj returned from #open method)'\n\n)\n"}]}
|
|
1005
1011
|
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.help Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.help`: "}]}
|
|
1006
1012
|
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.hide_dom_mutations Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.hide_dom_mutations`: Supported Method Parameters\n\nconsole_resp = PWN::Plugins::TransparentBrowser.hide_dom_mutations(\n\nbrowser_obj: browser_obj1,\nindex: 'optional - index of tab to switch to (defaults to active tab)'\n\n)\n"}]}
|
|
1007
1013
|
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.jmp_devtools_panel Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.jmp_devtools_panel`: Supported Method Parameters\n\nPWN::Plugins::TransparentBrowser.jmp_devtools_panel(\n\nbrowser_obj: 'required - browser_obj returned from #open method)',\npanel: 'optional - panel to switch to :elements|:inspector|:console|:debugger|:sources|:network\n\n)\n"}]}
|
|
@@ -1009,7 +1015,7 @@
|
|
|
1009
1015
|
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.list_tabs Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.list_tabs`: Supported Method Parameters\n\ntabs = PWN::Plugins::TransparentBrowser.list_tabs(\n\nbrowser_obj: 'required - browser_obj returned from #open method)'\n\n)\n"}]}
|
|
1010
1016
|
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.new_tab Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.new_tab`: Supported Method Parameters\n\ntab = PWN::Plugins::TransparentBrowser.new_tab(\n\nbrowser_obj: 'required - browser_obj returned from #open method)',\nurl: 'optional - URL to open in new tab'\n\n)\n"}]}
|
|
1011
1017
|
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.open Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.open`: Supported Method Parameters\n\nbrowser_obj1 = PWN::Plugins::TransparentBrowser.open(\n\nbrowser_type: 'optional - :firefox|:chrome|:headless|:rest|:websocket (defaults to :chrome)',\nproxy: 'optional - scheme://proxy_host:port || tor (defaults to nil)',\ndevtools: 'optional - boolean (defaults to false)',\n\n)\n"}]}
|
|
1012
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.step Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.step`: Supported Method Parameters\n\
|
|
1018
|
+
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.step Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.step`: Supported Method Parameters\n\npage_state_arr = PWN::Plugins::TransparentBrowser.step(\n\nbrowser_obj: 'required - browser_obj returned from #open method)',\naction: 'optional - action to take :into|:out|:over (Defaults to :into)',\nsteps: 'optional - number of steps taken (Defaults to 1)'\n\n)\n"}]}
|
|
1013
1019
|
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.toggle_devtools Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.toggle_devtools`: Supported Method Parameters\n\nPWN::Plugins::TransparentBrowser.toggle_devtools(\n\nbrowser_obj: 'required - browser_obj returned from #open method)'\n\n)\n"}]}
|
|
1014
1020
|
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.type_as_human Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.type_as_human`: Supported Method Parameters\n\nPWN::Plugins::TransparentBrowser.type_as_human(\n\nstring: 'required - string to type as human',\nrand_sleep_float: 'optional - float timing in between keypress (defaults to 0.09)'\n\n)\n"}]}
|
|
1015
1021
|
{"messages":[{"role":"user","content":"PWN::Plugins::TransparentBrowser.update_about_config Usage"},{"role":"assistant","content":"`PWN::Plugins::TransparentBrowser.update_about_config`: Supported Method Parameters\n\nPWN::Plugins::TransparentBrowser.update_about_config(\n\nbrowser_obj: browser_obj1,\nkey: 'required - key to update in about:config',\nvalue: 'required - value to set for key in about:config'\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.455
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- 0day Inc.
|
|
@@ -127,14 +127,14 @@ dependencies:
|
|
|
127
127
|
requirements:
|
|
128
128
|
- - '='
|
|
129
129
|
- !ruby/object:Gem::Version
|
|
130
|
-
version: 5.
|
|
130
|
+
version: 5.2.0
|
|
131
131
|
type: :runtime
|
|
132
132
|
prerelease: false
|
|
133
133
|
version_requirements: !ruby/object:Gem::Requirement
|
|
134
134
|
requirements:
|
|
135
135
|
- - '='
|
|
136
136
|
- !ruby/object:Gem::Version
|
|
137
|
-
version: 5.
|
|
137
|
+
version: 5.2.0
|
|
138
138
|
- !ruby/object:Gem::Dependency
|
|
139
139
|
name: bundler
|
|
140
140
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -289,20 +289,6 @@ dependencies:
|
|
|
289
289
|
- - '='
|
|
290
290
|
- !ruby/object:Gem::Version
|
|
291
291
|
version: 1.17.2
|
|
292
|
-
- !ruby/object:Gem::Dependency
|
|
293
|
-
name: fftw3
|
|
294
|
-
requirement: !ruby/object:Gem::Requirement
|
|
295
|
-
requirements:
|
|
296
|
-
- - '='
|
|
297
|
-
- !ruby/object:Gem::Version
|
|
298
|
-
version: '0.3'
|
|
299
|
-
type: :runtime
|
|
300
|
-
prerelease: false
|
|
301
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
302
|
-
requirements:
|
|
303
|
-
- - '='
|
|
304
|
-
- !ruby/object:Gem::Version
|
|
305
|
-
version: '0.3'
|
|
306
292
|
- !ruby/object:Gem::Dependency
|
|
307
293
|
name: gdb
|
|
308
294
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -1261,14 +1247,14 @@ dependencies:
|
|
|
1261
1247
|
requirements:
|
|
1262
1248
|
- - '='
|
|
1263
1249
|
- !ruby/object:Gem::Version
|
|
1264
|
-
version: 6.0.
|
|
1250
|
+
version: 6.0.3
|
|
1265
1251
|
type: :runtime
|
|
1266
1252
|
prerelease: false
|
|
1267
1253
|
version_requirements: !ruby/object:Gem::Requirement
|
|
1268
1254
|
requirements:
|
|
1269
1255
|
- - '='
|
|
1270
1256
|
- !ruby/object:Gem::Version
|
|
1271
|
-
version: 6.0.
|
|
1257
|
+
version: 6.0.3
|
|
1272
1258
|
- !ruby/object:Gem::Dependency
|
|
1273
1259
|
name: whois-parser
|
|
1274
1260
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -1449,8 +1435,6 @@ files:
|
|
|
1449
1435
|
- documentation/pwn_wallpaper.jpg
|
|
1450
1436
|
- documentation/ringing-spectrogram.png
|
|
1451
1437
|
- documentation/ringing-waveform.png
|
|
1452
|
-
- etc/pwn.decryptor.yaml.EXAMPLE
|
|
1453
|
-
- etc/pwn.yaml.EXAMPLE
|
|
1454
1438
|
- etc/systemd/msfrpcd.service
|
|
1455
1439
|
- etc/systemd/openvas.service
|
|
1456
1440
|
- etc/userland/aws/apache2/jenkins_443.conf
|
|
@@ -1876,6 +1860,7 @@ files:
|
|
|
1876
1860
|
- lib/pwn/blockchain/btc.rb
|
|
1877
1861
|
- lib/pwn/blockchain/eth.rb
|
|
1878
1862
|
- lib/pwn/config.rb
|
|
1863
|
+
- lib/pwn/driver.rb
|
|
1879
1864
|
- lib/pwn/ffi.rb
|
|
1880
1865
|
- lib/pwn/ffi/stdio.rb
|
|
1881
1866
|
- lib/pwn/plugins.rb
|
|
@@ -2229,6 +2214,7 @@ files:
|
|
|
2229
2214
|
- spec/lib/pwn/blockchain/eth_spec.rb
|
|
2230
2215
|
- spec/lib/pwn/blockchain_spec.rb
|
|
2231
2216
|
- spec/lib/pwn/config_spec.rb
|
|
2217
|
+
- spec/lib/pwn/driver_spec.rb
|
|
2232
2218
|
- spec/lib/pwn/ffi/stdio_spec.rb
|
|
2233
2219
|
- spec/lib/pwn/ffi_spec.rb
|
|
2234
2220
|
- spec/lib/pwn/plugins/android_spec.rb
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# Drop this file in $HOME/.pwn/pwn.decryptor.yaml
|
|
2
|
-
# If you rely upon this file, it should be out-of-band for optimal security
|
|
3
|
-
# (e.g. not available in code repos, permission protected, limited access, etc.)
|
|
4
|
-
key: 'KEY PROVIDED WHEN USING PWN::Plugins::Vault.create(file: "pwn.yaml") TO ENCRYPT pwn.yaml'
|
|
5
|
-
iv: 'KEY PROVIDED WHEN USING PWN::Plugins::Vault.create(file: "pwn.yaml") TO ENCRYPT pwn.yaml'
|