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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +4 -3
  3. data/Gemfile +3 -3
  4. data/README.md +3 -3
  5. data/bin/pwn +4 -15
  6. data/bin/pwn_android_war_dialer +1 -10
  7. data/bin/pwn_aws_describe_resources +1 -10
  8. data/bin/pwn_bdba_groups +1 -10
  9. data/bin/pwn_bdba_scan +1 -10
  10. data/bin/pwn_burp_suite_pro_active_rest_api_scan +1 -10
  11. data/bin/pwn_burp_suite_pro_active_scan +1 -10
  12. data/bin/pwn_char_base64_encoding +1 -10
  13. data/bin/pwn_char_dec_encoding +1 -10
  14. data/bin/pwn_char_hex_escaped_encoding +1 -10
  15. data/bin/pwn_char_html_entity_encoding +1 -10
  16. data/bin/pwn_char_unicode_escaped_encoding +1 -10
  17. data/bin/pwn_char_url_encoding +1 -10
  18. data/bin/pwn_crt_sh +1 -10
  19. data/bin/pwn_defectdojo_engagement_create +1 -10
  20. data/bin/pwn_defectdojo_importscan +1 -10
  21. data/bin/pwn_defectdojo_reimportscan +1 -10
  22. data/bin/pwn_diff_csv_files_w_column_exclude +1 -6
  23. data/bin/pwn_domain_reversewhois +1 -10
  24. data/bin/pwn_fuzz_net_app_proto +1 -10
  25. data/bin/pwn_gqrx_scanner +1 -10
  26. data/bin/pwn_jenkins_create_job +1 -10
  27. data/bin/pwn_jenkins_create_view +1 -10
  28. data/bin/pwn_jenkins_install_plugin +1 -10
  29. data/bin/pwn_jenkins_thinBackup_aws_s3 +1 -10
  30. data/bin/pwn_jenkins_update_plugins +1 -10
  31. data/bin/pwn_jenkins_useradd +1 -10
  32. data/bin/pwn_mail_agent +1 -10
  33. data/bin/pwn_nessus_cloud_scan_crud +1 -10
  34. data/bin/pwn_nessus_cloud_vulnscan +1 -10
  35. data/bin/pwn_nexpose +1 -10
  36. data/bin/pwn_nmap_discover_tcp_udp +1 -10
  37. data/bin/pwn_openvas_vulnscan +1 -10
  38. data/bin/pwn_pastebin_sample_filter +1 -10
  39. data/bin/pwn_phone +2 -11
  40. data/bin/pwn_rdoc_to_jsonl +5 -7
  41. data/bin/pwn_sast +1 -25
  42. data/bin/pwn_serial_check_voicemail +1 -10
  43. data/bin/pwn_serial_msr206 +4 -6
  44. data/bin/pwn_serial_son_micro_sm132_rfid +4 -6
  45. data/bin/pwn_shodan_graphql_introspection +1 -6
  46. data/bin/pwn_shodan_search +1 -10
  47. data/bin/pwn_simple_http_server +4 -5
  48. data/bin/pwn_web_cache_deception +1 -10
  49. data/bin/pwn_www_checkip +7 -5
  50. data/bin/pwn_www_uri_buster +1 -10
  51. data/bin/pwn_xss_dom_vectors +1 -10
  52. data/bin/pwn_zaproxy_active_rest_api_scan +1 -10
  53. data/bin/pwn_zaproxy_active_scan +1 -10
  54. data/lib/pwn/ai/introspection.rb +3 -1
  55. data/lib/pwn/config.rb +103 -47
  56. data/lib/pwn/driver.rb +85 -0
  57. data/lib/pwn/plugins/repl.rb +7 -10
  58. data/lib/pwn/plugins/transparent_browser.rb +1 -1
  59. data/lib/pwn/version.rb +1 -1
  60. data/lib/pwn.rb +5 -4
  61. data/spec/lib/pwn/driver_spec.rb +15 -0
  62. data/third_party/pwn_rdoc.jsonl +11 -5
  63. metadata +7 -21
  64. data/etc/pwn.decryptor.yaml.EXAMPLE +0 -5
  65. data/etc/pwn.yaml.EXAMPLE +0 -71
@@ -45,7 +45,9 @@ module PWN
45
45
  system_role_content: system_role_content,
46
46
  spinner: false
47
47
  )
48
- puts response
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
- # env = PWN::Config.minimal_env
11
- public_class_method def self.minimal_env(opts = {})
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 = "#{File.dirname(pwn_env_path)}/pwn.decryptor.yaml"
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: "'grok'",
65
+ active: 'grok',
30
66
  introspection: false,
31
67
  grok: {
32
- base_uri: "'optional - Base URI for Grok - Use private base OR defaults to https://api.x.ai/v1'",
33
- key: "'required - OpenAI API Key'",
34
- model: "'optional - Grok model to use'",
35
- system_role_content: "'You are an ethically hacking OpenAI agent.'",
36
- temp: "'optional - OpenAI temperature'"
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: "'optional - Base URI for OpenAI - Use private base OR defaults to https://api.openai.com/v1'",
40
- key: "'required - OpenAI API Key'",
41
- model: "'optional - OpenAI model to use'",
42
- system_role_content: "'You are an ethically hacking OpenAI agent.'",
43
- temp: "'optional - OpenAI temperature'"
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: "'required - Base URI for Open WebUI - e.g. https://ollama.local'",
47
- key: "'required - Open WebUI API Key Under Settings >> Account >> JWT Token'",
48
- model: "'required - Ollama model to use'",
49
- system_role_content: "'You are an ethically hacking Ollama agent.'",
50
- temp: "'optional - Ollama temperature'"
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: "'#{PWN::Plugins::DetectOS.arch}'", endian: "'#{PWN::Plugins::DetectOS.endian}'" },
90
+ asm: { arch: PWN::Plugins::DetectOS.arch, endian: PWN::Plugins::DetectOS.endian.to_s },
55
91
  blockchain: {
56
92
  bitcoin: {
57
- rpc_host: "'localhost'",
93
+ rpc_host: 'localhost',
58
94
  rpc_port: 8332,
59
- rpc_user: "'bitcoin RPC Username'",
60
- rpc_pass: "'bitcoin RPC Password'"
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
- psks: {
88
- LongFast: 'AQ==',
89
- PWN: 'required - PSK for pwn channel'
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.yaml file. Defaults to ~/.pwn/pwn.decryptor.yaml'
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 minimal_env(pwn_env_path: pwn_env_path) unless File.exist?(pwn_env_path)
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
- if is_encrypted
132
- pwn_dec_path = opts[:pwn_dec_path] ||= "#{pwn_env_root}/pwn.decryptor.yaml"
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
- pwn_decryptor = YAML.load_file(pwn_dec_path, symbolize_names: true)
185
+ pwn_decryptor = YAML.load_file(pwn_dec_path, symbolize_names: true)
136
186
 
137
- key = opts[:key] ||= pwn_decryptor[:key] ||= ENV.fetch('PWN_DECRYPTOR_KEY')
138
- key = PWN::Plugins::AuthenticationHelper.mask_password(prompt: 'Decryption Key') if key.nil?
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
- iv = opts[:iv] ||= pwn_decryptor[:iv] ||= ENV.fetch('PWN_DECRYPTOR_IV')
141
- iv = PWN::Plugins::AuthenticationHelper.mask_password(prompt: 'Decryption IV') if iv.nil?
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
- env = PWN::Plugins::Vault.dump(
144
- file: pwn_env_path,
145
- key: key,
146
- iv: iv
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
- Pry.config.refresh_pwn_env = false if defined?(Pry)
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}.minimal_env(
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
- pwn_dec_path: 'optional - Path to pwn.decryptor.yaml file. Defaults to ~/.pwn/pwn.decryptor.yaml'
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
@@ -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
- # opts: 'required - Hash object passed in via pwn OptParser'
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
  "
@@ -7,7 +7,7 @@ require 'nokogiri'
7
7
  require 'openssl'
8
8
  require 'rest-client'
9
9
  require 'securerandom'
10
- require 'selenium/devtools/v140'
10
+ require 'selenium/devtools'
11
11
  require 'selenium/webdriver'
12
12
  require 'socksify'
13
13
  require 'timeout'
data/lib/pwn/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PWN
4
- VERSION = '0.5.453'
4
+ VERSION = '0.5.455'
5
5
  end
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
@@ -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.reflect Usage"},{"role":"assistant","content":"`PWN::AI::Introspection.reflect`: Supported Method Parameters\n\nresponse = PWN::AI::Introspection.reflect(\n\nrequest: 'required - String - What you want the AI to reflect on'\n\n)\n"}]}
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.minimal_env Usage"},{"role":"assistant","content":"`PWN::Config.minimal_env`: Supported Method Parameters\n\nenv = PWN::Config.minimal_env\n"}]}
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(\n\nopts: 'required - Hash object passed in via pwn OptParser'\n\n)\n"}]}
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\nPWN::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"}]}
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.453
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.1.1
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.1.1
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.2
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.2
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'