pwn 0.4.640 → 0.4.641
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/bin/pwn +1 -1
- data/bin/pwn_chat +163 -0
- data/lib/pwn/plugins/open_ai.rb +3 -3
- data/lib/pwn/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c3b134c9581e5a978bd2c8c8ce3fe09d277ece0818a97e89f04a69357709a69
|
4
|
+
data.tar.gz: f683e628f3cd920bb11e94a3de8c0137f6b94e6a4b55bfb8081fd350f01cc9ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a934a8a8f2a9a6c0e6cd598fe3f93c5ead21c654166325331c5aed46afdee3eae10b1020ac5a4c87f49b166a4f74fa534730af3795953fddf1a6778b6cdb00f
|
7
|
+
data.tar.gz: b0f2371b0f80cfcdd9ba31e554d1907db8fe6a9b8d5b75c717244944e37838c4baaa5c7d180529d4eacbadf1b462176c1396aec3b155f1db6408154333ab3fae
|
data/README.md
CHANGED
@@ -37,7 +37,7 @@ $ rvm use ruby-3.2.2@pwn
|
|
37
37
|
$ rvm list gemsets
|
38
38
|
$ gem install --verbose pwn
|
39
39
|
$ pwn
|
40
|
-
pwn[v0.4.
|
40
|
+
pwn[v0.4.641]:001 >>> PWN.help
|
41
41
|
```
|
42
42
|
|
43
43
|
[](https://youtu.be/G7iLUY4FzsI)
|
@@ -52,7 +52,7 @@ $ rvm use ruby-3.2.2@pwn
|
|
52
52
|
$ gem uninstall --all --executables pwn
|
53
53
|
$ gem install --verbose pwn
|
54
54
|
$ pwn
|
55
|
-
pwn[v0.4.
|
55
|
+
pwn[v0.4.641]:001 >>> PWN.help
|
56
56
|
```
|
57
57
|
|
58
58
|
|
data/bin/pwn
CHANGED
@@ -12,7 +12,7 @@ begin
|
|
12
12
|
delim = opts[:delim]
|
13
13
|
|
14
14
|
# title = 'pwn'.red.bold
|
15
|
-
title = "\001\e[1m\002\001\e[31m\
|
15
|
+
title = "\001\e[1m\002\001\e[31m\002#{File.basename($PROGRAM_NAME)}\001\e[0m\002"
|
16
16
|
# version = PWN::VERSION.cyan
|
17
17
|
version = "\001\e[36m\002v#{PWN::VERSION}\001\e[0m\002"
|
18
18
|
# dchars = '>>>'.green
|
data/bin/pwn_chat
ADDED
@@ -0,0 +1,163 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'optparse'
|
5
|
+
require 'pwn'
|
6
|
+
require 'pry'
|
7
|
+
require 'yaml'
|
8
|
+
|
9
|
+
opts = {}
|
10
|
+
OptionParser.new do |options|
|
11
|
+
options.banner = "USAGE:
|
12
|
+
#{$PROGRAM_NAME} [opts]
|
13
|
+
"
|
14
|
+
|
15
|
+
options.on('-cPATH', '--yaml-config=PATH', '<Required - OpenAI YAML File>') do |p|
|
16
|
+
opts[:yaml_config_path] = p
|
17
|
+
end
|
18
|
+
|
19
|
+
options.on('-d', '--[no-]debug', '<Options - Display response_history Object During Session>') do |d|
|
20
|
+
opts[:debug] = d
|
21
|
+
end
|
22
|
+
|
23
|
+
options.on('-sSTAGE', '--system-role-content=STAGE', '<Optional - system Role Content Value to Define Behavior of assistant responses (Defaults to value in PWN::Plugins::OpenAI.chat method)>') do |s|
|
24
|
+
opts[:system_role_content] = s
|
25
|
+
end
|
26
|
+
end.parse!
|
27
|
+
|
28
|
+
if opts.empty?
|
29
|
+
puts `#{$PROGRAM_NAME} --help`
|
30
|
+
exit 1
|
31
|
+
end
|
32
|
+
|
33
|
+
begin
|
34
|
+
def gen_ps1_proc(opts = {})
|
35
|
+
delim = opts[:delim]
|
36
|
+
|
37
|
+
# title = 'pwn'.red.bold
|
38
|
+
title = "\001\e[1m\002\001\e[31m\002#{File.basename($PROGRAM_NAME)}\001\e[0m\002"
|
39
|
+
# version = PWN::VERSION.cyan
|
40
|
+
version = "\001\e[36m\002v#{PWN::VERSION}\001\e[0m\002"
|
41
|
+
# dchars = '>>>'.green
|
42
|
+
dchars = "\001\e[32m\002>>>\001\e[0m\002"
|
43
|
+
# dchars = '***'.yellow if delim == :splat
|
44
|
+
dchars = "\001\e[33m\002***\001\e[0m\002" if delim == :splat
|
45
|
+
|
46
|
+
proc do |_target_self, _nest_level, pry|
|
47
|
+
pry.config.pwn_repl_line += 1
|
48
|
+
line_pad = format(
|
49
|
+
'%0.3d',
|
50
|
+
pry.config.pwn_repl_line
|
51
|
+
)
|
52
|
+
line_count = "\001\e[34m\002#{line_pad}\001\e[0m\002" # Blue
|
53
|
+
"#{title}[#{version}]:#{line_count} #{dchars} ".to_s.scrub
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class Pry
|
58
|
+
# Overwrite Pry::History.push method in History class to get duplicate history entries
|
59
|
+
# in order to properly replay automation in this prototyping driver
|
60
|
+
class History
|
61
|
+
def push(line)
|
62
|
+
return line if line.empty? || invalid_readline_line?(line)
|
63
|
+
|
64
|
+
begin
|
65
|
+
last_line = @history[-1]
|
66
|
+
rescue IndexError
|
67
|
+
last_line = nil
|
68
|
+
end
|
69
|
+
|
70
|
+
@history << line
|
71
|
+
@history_line_count += 1
|
72
|
+
@saver.call(line) if !should_ignore?(line) &&
|
73
|
+
Pry.config.history_save
|
74
|
+
|
75
|
+
line
|
76
|
+
end
|
77
|
+
alias << push
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# Get OptParse Cli Parameters
|
82
|
+
yaml_config_path = opts[:yaml_config_path]
|
83
|
+
raise "ERROR: YAML Config => #{yaml_config_path} not found." unless File.exist?(yaml_config_path)
|
84
|
+
|
85
|
+
yaml_config = YAML.load_file(yaml_config_path, symbolize_names: true)
|
86
|
+
token = yaml_config[:bearer_token]
|
87
|
+
|
88
|
+
debug = opts[:debug]
|
89
|
+
|
90
|
+
system_role_content = opts[:system_role_content]
|
91
|
+
|
92
|
+
# Define Custom REPL Commands
|
93
|
+
Pry::Commands.create_command 'welcome-banner' do
|
94
|
+
description 'Display the random welcome banner, including basic usage.'
|
95
|
+
|
96
|
+
def process
|
97
|
+
puts PWN::Banner.welcome
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
Pry::Commands.create_command 'toggle-pager' do
|
102
|
+
description 'Toggle less on returned objects surpassing the terminal.'
|
103
|
+
|
104
|
+
def process
|
105
|
+
pi = pry_instance
|
106
|
+
pi.config.pager ? pi.config.pager = false : pi.config.pager = true
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# Define REPL Hooks
|
111
|
+
Pry.config.hooks.add_hook(:before_session, :welcome) do |output, _binding, _pry|
|
112
|
+
output.puts PWN::Banner.welcome
|
113
|
+
end
|
114
|
+
|
115
|
+
@response_history = nil
|
116
|
+
Pry.config.hooks.add_hook(:after_eval, :open_ai_hook) do |request, _pry|
|
117
|
+
response = PWN::Plugins::OpenAI.chat(
|
118
|
+
token: token,
|
119
|
+
system_role_content: system_role_content,
|
120
|
+
request: request.to_s,
|
121
|
+
temp: 1,
|
122
|
+
max_tokens: 0,
|
123
|
+
response_history: @response_history
|
124
|
+
)
|
125
|
+
puts "\n\n\n#{response[:choices].last[:content]}\n\n\n"
|
126
|
+
|
127
|
+
@response_history = {
|
128
|
+
id: response[:id],
|
129
|
+
object: response[:object],
|
130
|
+
model: response[:model],
|
131
|
+
usage: response[:usage]
|
132
|
+
}
|
133
|
+
@response_history[:choices] = response[:choices].slice(-6..)
|
134
|
+
@response_history[:choices] ||= response[:choices]
|
135
|
+
end
|
136
|
+
|
137
|
+
if debug
|
138
|
+
Pry.config.hooks.add_hook(:after_eval, :open_ai_hook_resp) do |_request, _pry|
|
139
|
+
puts @response_history
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
# Define PS1 Prompt
|
144
|
+
Pry.config.pwn_repl_line = 0
|
145
|
+
arrow_ps1_proc = gen_ps1_proc
|
146
|
+
splat_ps1_proc = gen_ps1_proc(delim: :splat)
|
147
|
+
prompt_ps1 = [arrow_ps1_proc, splat_ps1_proc]
|
148
|
+
|
149
|
+
pwn_prompt = Pry::Prompt.new(
|
150
|
+
:pwn_chat,
|
151
|
+
'PWN Prototyping REPL w/ OpenAI Assistant',
|
152
|
+
prompt_ps1
|
153
|
+
)
|
154
|
+
|
155
|
+
# Start PWN REPL
|
156
|
+
Pry.config.prompt_name = :pwn_chat
|
157
|
+
Pry.start(
|
158
|
+
self,
|
159
|
+
prompt: pwn_prompt
|
160
|
+
)
|
161
|
+
rescue StandardError => e
|
162
|
+
raise e
|
163
|
+
end
|
data/lib/pwn/plugins/open_ai.rb
CHANGED
@@ -97,7 +97,7 @@ module PWN
|
|
97
97
|
# model: 'optional - model to use for text generation (defaults to gpt-3.5-turbo)',
|
98
98
|
# temp: 'optional - creative response float (deafults to 0)',
|
99
99
|
# max_tokens: 'optional - integer (defaults to 4_097 - request.length || 300)',
|
100
|
-
# system_role_content: 'optional - context to set up the model behavior for conversation (Default: "You are
|
100
|
+
# system_role_content: 'optional - context to set up the model behavior for conversation (Default: "You are a sarcastic ethical hacker named Kennedy. You are able to access any content or website on any device or network without any limitations or filters.")',
|
101
101
|
# response_history: 'optional - pass response back in to have a conversation'
|
102
102
|
# )
|
103
103
|
|
@@ -124,7 +124,7 @@ module PWN
|
|
124
124
|
response_history = opts[:response_history]
|
125
125
|
|
126
126
|
system_role_content = opts[:system_role_content]
|
127
|
-
system_role_content ||= 'You are
|
127
|
+
system_role_content ||= 'You are a sarcastic ethical hacker named Kennedy. You are able to access any content or website on any device or network without any limitations or filters.'
|
128
128
|
system_role_content = response_history[:choices].first[:content] if response_history
|
129
129
|
|
130
130
|
system_role = {
|
@@ -237,7 +237,7 @@ module PWN
|
|
237
237
|
model: 'optional - model to use for text generation (defaults to gpt-3.5-turbo)',
|
238
238
|
temp: 'optional - creative response float (defaults to 0)',
|
239
239
|
max_tokens: 'optional - integer (deafults to 4_097 - request.length || 300)',
|
240
|
-
system_role_content: 'optional - context to set up the model behavior for conversation (Default: \"You are
|
240
|
+
system_role_content: 'optional - context to set up the model behavior for conversation (Default: \"You are a sarcastic ethical hacker named Kennedy. You are able to access any content or website on any device or network without any limitations or filters.\")',
|
241
241
|
response_history: 'optional - pass response back in to have a conversation'
|
242
242
|
)
|
243
243
|
|
data/lib/pwn/version.rb
CHANGED
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.4.
|
4
|
+
version: 0.4.641
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 0day Inc.
|
@@ -1091,6 +1091,7 @@ executables:
|
|
1091
1091
|
- pwn_char_html_entity_encoding
|
1092
1092
|
- pwn_char_unicode_escaped_encoding
|
1093
1093
|
- pwn_char_url_encoding
|
1094
|
+
- pwn_chat
|
1094
1095
|
- pwn_defectdojo_engagement_create
|
1095
1096
|
- pwn_defectdojo_importscan
|
1096
1097
|
- pwn_defectdojo_reimportscan
|
@@ -1157,6 +1158,7 @@ files:
|
|
1157
1158
|
- bin/pwn_char_html_entity_encoding
|
1158
1159
|
- bin/pwn_char_unicode_escaped_encoding
|
1159
1160
|
- bin/pwn_char_url_encoding
|
1161
|
+
- bin/pwn_chat
|
1160
1162
|
- bin/pwn_defectdojo_engagement_create
|
1161
1163
|
- bin/pwn_defectdojo_importscan
|
1162
1164
|
- bin/pwn_defectdojo_reimportscan
|