pwn 0.4.662 → 0.4.664
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/lib/pwn/plugins/log.rb +121 -0
- data/lib/pwn/plugins.rb +1 -0
- data/lib/pwn/version.rb +1 -1
- data/lib/pwn.rb +0 -1
- data/spec/lib/pwn/plugins/log_spec.rb +15 -0
- metadata +3 -3
- data/lib/pwn/log.rb +0 -117
- data/spec/lib/pwn/log_spec.rb +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d231662348a2f93ca5d2c282ba395848dc3a9f1cbac00fd5a033787ca95d21c4
|
4
|
+
data.tar.gz: 1e6ec131ce26a248425bdc8fa36d30eecb844d675092c3ac12e12c8e728c7079
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35b1ccc8c208aa3070ed01a7251bf86b2be58b8f6b6da55c6e89f3043a45d3553ab68d28919767d285e662fae6c5887359b5333f0f16ae38bf23e0a5c96577c1
|
7
|
+
data.tar.gz: 759ac72f2f7af9b2c323c1d8fcc28e3cb2f1468aaf2d81d1cbdc52856f5f28c7a663ef804a2e8303f41dff7b3dd93eca96d435e4a91ad42b0b6b958d56587481
|
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.664]: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.664]:001 >>> PWN.help
|
56
56
|
```
|
57
57
|
|
58
58
|
|
@@ -0,0 +1,121 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'logger'
|
5
|
+
require 'securerandom'
|
6
|
+
|
7
|
+
module PWN
|
8
|
+
module Plugins
|
9
|
+
# This plugin is used to instantiate a PWN logger with a custom message format
|
10
|
+
module Log
|
11
|
+
# Supported Method Parameters::
|
12
|
+
# PWN::Log.create(
|
13
|
+
# )
|
14
|
+
public_class_method def self.append(opts = {})
|
15
|
+
level = opts[:level].to_s.downcase.to_sym
|
16
|
+
msg = opts[:msg]
|
17
|
+
which_self = opts[:which_self].to_s
|
18
|
+
|
19
|
+
driver_name = File.basename($PROGRAM_NAME)
|
20
|
+
|
21
|
+
# Only attempt to exit gracefully if level == :error
|
22
|
+
exit_gracefully = false
|
23
|
+
|
24
|
+
# Define Date / Time Format
|
25
|
+
datetime_str = '%Y-%m-%d %H:%M:%S.%N%z'
|
26
|
+
|
27
|
+
# Always append to log file
|
28
|
+
if level == :learning
|
29
|
+
session = SecureRandom.hex
|
30
|
+
log_file_path = "/tmp/pwn-ai-#{session}.json" if level == :learning
|
31
|
+
log_file = File.open(log_file_path, 'w')
|
32
|
+
else
|
33
|
+
log_file_path = '/tmp/pwn.log'
|
34
|
+
log_file = File.open(log_file_path, 'a')
|
35
|
+
end
|
36
|
+
|
37
|
+
# Leave 10 "old" log files where
|
38
|
+
# each file is ~ 1,024,000 bytes
|
39
|
+
logger = Logger.new(
|
40
|
+
log_file,
|
41
|
+
10,
|
42
|
+
1_024_000
|
43
|
+
)
|
44
|
+
logger.datetime_format = datetime_str
|
45
|
+
|
46
|
+
case level
|
47
|
+
when :debug
|
48
|
+
logger.level = Logger::DEBUG
|
49
|
+
when :error
|
50
|
+
logger.level = Logger::ERROR
|
51
|
+
exit_gracefully = true unless driver_name == 'pwn'
|
52
|
+
puts "\nERROR: See #{log_file_path} for more details." if driver_name == 'pwn'
|
53
|
+
when :fatal
|
54
|
+
logger.level = Logger::FATAL
|
55
|
+
puts "\n FATAL ERROR: See #{log_file_path} for more details." if driver_name == 'pwn'
|
56
|
+
when :info, :learning
|
57
|
+
logger.level = Logger::INFO
|
58
|
+
when :unknown
|
59
|
+
logger.level = Logger::UNKNOWN
|
60
|
+
when :warn
|
61
|
+
logger.level = Logger::WARN
|
62
|
+
else
|
63
|
+
level_error = "ERROR: Invalid log level. Valid options are:\n"
|
64
|
+
level_error += ":debug\n:error\n:fatal\n:info\n:learning\n:unknown\n:warn\n"
|
65
|
+
raise level_error
|
66
|
+
end
|
67
|
+
|
68
|
+
if level == :learning
|
69
|
+
log_event = msg
|
70
|
+
logger.formatter = proc do |_severity, _datetime, _progname, learning_arr|
|
71
|
+
JSON.pretty_generate(
|
72
|
+
learning_data: learning_arr
|
73
|
+
)
|
74
|
+
end
|
75
|
+
else
|
76
|
+
log_event = "driver: #{driver_name}"
|
77
|
+
|
78
|
+
if msg.instance_of?(Interrupt)
|
79
|
+
logger.level = Logger::WARN
|
80
|
+
if driver_name == 'pwn'
|
81
|
+
log_event += ' => CTRL+C Detected.'
|
82
|
+
else
|
83
|
+
log_event += ' => CTRL+C Detected...Exiting Session.'
|
84
|
+
exit_gracefully = true unless driver_name == 'pwn'
|
85
|
+
end
|
86
|
+
else
|
87
|
+
log_event += " => #{msg}"
|
88
|
+
if msg.respond_to?('backtrace') && !msg.instance_of?(Errno::ECONNRESET)
|
89
|
+
log_event += " => \n\t#{msg.backtrace.join("\n\t")}"
|
90
|
+
log_event += "\n\n\n"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
logger.add(logger.level, log_event, which_self)
|
96
|
+
rescue Interrupt, StandardError => e
|
97
|
+
raise e
|
98
|
+
end
|
99
|
+
|
100
|
+
# Author(s):: 0day Inc. <request.pentest@0dayinc.com>
|
101
|
+
|
102
|
+
public_class_method def self.authors
|
103
|
+
"AUTHOR(S):
|
104
|
+
0day Inc. <request.pentest@0dayinc.com>
|
105
|
+
"
|
106
|
+
end
|
107
|
+
|
108
|
+
# Display Usage for this Module
|
109
|
+
|
110
|
+
public_class_method def self.help
|
111
|
+
puts "USAGE:
|
112
|
+
logger = #{self}.append(
|
113
|
+
level: 'required - log verbosity :debug|:error|:fatal|:info|:learning|:unknown|:warn',
|
114
|
+
msg: 'required - message to log',
|
115
|
+
which_self: 'required - pass in self object from module calling #{self}'
|
116
|
+
)
|
117
|
+
"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
data/lib/pwn/plugins.rb
CHANGED
@@ -33,6 +33,7 @@ module PWN
|
|
33
33
|
autoload :Jenkins, 'pwn/plugins/jenkins'
|
34
34
|
autoload :JiraServer, 'pwn/plugins/jira_server'
|
35
35
|
autoload :JSONPathify, 'pwn/plugins/json_pathify'
|
36
|
+
autoload :Log, 'pwn/plugins/log'
|
36
37
|
autoload :MailAgent, 'pwn/plugins/mail_agent'
|
37
38
|
autoload :Metasploit, 'pwn/plugins/metasploit'
|
38
39
|
autoload :MSR206, 'pwn/plugins/msr206'
|
data/lib/pwn/version.rb
CHANGED
data/lib/pwn.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe PWN::Plugins::Log do
|
6
|
+
it 'should display information for authors' do
|
7
|
+
authors_response = PWN::Plugins::Log
|
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::Plugins::Log
|
13
|
+
expect(help_response).to respond_to :help
|
14
|
+
end
|
15
|
+
end
|
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.664
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 0day Inc.
|
@@ -1629,7 +1629,6 @@ files:
|
|
1629
1629
|
- lib/pwn/banner/off_the_air.rb
|
1630
1630
|
- lib/pwn/banner/pirate.rb
|
1631
1631
|
- lib/pwn/ffi.rb
|
1632
|
-
- lib/pwn/log.rb
|
1633
1632
|
- lib/pwn/plugins.rb
|
1634
1633
|
- lib/pwn/plugins/android.rb
|
1635
1634
|
- lib/pwn/plugins/ansible_vault.rb
|
@@ -1658,6 +1657,7 @@ files:
|
|
1658
1657
|
- lib/pwn/plugins/jenkins.rb
|
1659
1658
|
- lib/pwn/plugins/jira_server.rb
|
1660
1659
|
- lib/pwn/plugins/json_pathify.rb
|
1660
|
+
- lib/pwn/plugins/log.rb
|
1661
1661
|
- lib/pwn/plugins/mail_agent.rb
|
1662
1662
|
- lib/pwn/plugins/metasploit.rb
|
1663
1663
|
- lib/pwn/plugins/msr206.rb
|
@@ -1938,7 +1938,6 @@ files:
|
|
1938
1938
|
- spec/lib/pwn/banner/pirate_spec.rb
|
1939
1939
|
- spec/lib/pwn/banner_spec.rb
|
1940
1940
|
- spec/lib/pwn/ffi_spec.rb
|
1941
|
-
- spec/lib/pwn/log_spec.rb
|
1942
1941
|
- spec/lib/pwn/plugins/android_spec.rb
|
1943
1942
|
- spec/lib/pwn/plugins/ansible_vault_spec.rb
|
1944
1943
|
- spec/lib/pwn/plugins/authentication_helper_spec.rb
|
@@ -1966,6 +1965,7 @@ files:
|
|
1966
1965
|
- spec/lib/pwn/plugins/jenkins_spec.rb
|
1967
1966
|
- spec/lib/pwn/plugins/jira_server_spec.rb
|
1968
1967
|
- spec/lib/pwn/plugins/json_pathify_spec.rb
|
1968
|
+
- spec/lib/pwn/plugins/log_spec.rb
|
1969
1969
|
- spec/lib/pwn/plugins/mail_agent_spec.rb
|
1970
1970
|
- spec/lib/pwn/plugins/metasploit_spec.rb
|
1971
1971
|
- spec/lib/pwn/plugins/msr206_spec.rb
|
data/lib/pwn/log.rb
DELETED
@@ -1,117 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'json'
|
4
|
-
require 'logger'
|
5
|
-
require 'securerandom'
|
6
|
-
|
7
|
-
module PWN
|
8
|
-
# This plugin is used to instantiate a PWN logger with a custom message format
|
9
|
-
module Log
|
10
|
-
# Supported Method Parameters::
|
11
|
-
# PWN::Log.create(
|
12
|
-
# )
|
13
|
-
public_class_method def self.append(opts = {})
|
14
|
-
level = opts[:level].to_s.downcase.to_sym
|
15
|
-
msg = opts[:msg]
|
16
|
-
which_self = opts[:which_self].to_s
|
17
|
-
|
18
|
-
driver_name = File.basename($PROGRAM_NAME)
|
19
|
-
|
20
|
-
# Only attempt to exit gracefully if level == :error
|
21
|
-
exit_gracefully = false
|
22
|
-
|
23
|
-
# Define Date / Time Format
|
24
|
-
datetime_str = '%Y-%m-%d %H:%M:%S.%N%z'
|
25
|
-
|
26
|
-
# Always append to log file
|
27
|
-
if level == :learning
|
28
|
-
session = SecureRandom.hex
|
29
|
-
log_file_path = "/tmp/pwn-ai-#{session}.json" if level == :learning
|
30
|
-
log_file = File.open(log_file_path, 'w')
|
31
|
-
else
|
32
|
-
log_file_path = '/tmp/pwn.log'
|
33
|
-
log_file = File.open(log_file_path, 'a')
|
34
|
-
end
|
35
|
-
|
36
|
-
# Leave 10 "old" log files where
|
37
|
-
# each file is ~ 1,024,000 bytes
|
38
|
-
logger = Logger.new(
|
39
|
-
log_file,
|
40
|
-
10,
|
41
|
-
1_024_000
|
42
|
-
)
|
43
|
-
logger.datetime_format = datetime_str
|
44
|
-
|
45
|
-
case level
|
46
|
-
when :debug
|
47
|
-
logger.level = Logger::DEBUG
|
48
|
-
when :error
|
49
|
-
logger.level = Logger::ERROR
|
50
|
-
exit_gracefully = true unless driver_name == 'pwn'
|
51
|
-
puts "\nERROR: See #{log_file_path} for more details." if driver_name == 'pwn'
|
52
|
-
when :fatal
|
53
|
-
# This is reserved for the PWN::UI::Exit module
|
54
|
-
# if the Interrupt or StandardError exceptions are
|
55
|
-
# triggered. This prevents infintely attempting to
|
56
|
-
# exit if something in the module fails.
|
57
|
-
logger.level = Logger::FATAL
|
58
|
-
if driver_name == 'pwn'
|
59
|
-
puts "\n FATAL ERROR: See #{log_file_path} for more details."
|
60
|
-
end
|
61
|
-
when :info, :learning
|
62
|
-
logger.level = Logger::INFO
|
63
|
-
when :unknown
|
64
|
-
logger.level = Logger::UNKNOWN
|
65
|
-
when :warn
|
66
|
-
logger.level = Logger::WARN
|
67
|
-
else
|
68
|
-
level_error = "ERROR: Invalid log level. Valid options are:\n"
|
69
|
-
level_error += ":debug\n:error\n:fatal\n:info\n:learning\n:unknown\n:warn\n"
|
70
|
-
raise level_error
|
71
|
-
end
|
72
|
-
|
73
|
-
if level == :learning
|
74
|
-
log_event = msg
|
75
|
-
logger.formatter = proc do |_severity, _datetime, _progname, learning_arr|
|
76
|
-
JSON.pretty_generate(
|
77
|
-
learning_data: learning_arr
|
78
|
-
)
|
79
|
-
end
|
80
|
-
else
|
81
|
-
log_event = "driver: #{driver_name}"
|
82
|
-
|
83
|
-
if msg.instance_of?(Interrupt)
|
84
|
-
logger.level = Logger::WARN
|
85
|
-
if driver_name == 'pwn'
|
86
|
-
log_event += ' => CTRL+C Detected.'
|
87
|
-
else
|
88
|
-
log_event += ' => CTRL+C Detected...Exiting Session.'
|
89
|
-
exit_gracefully = true unless driver_name == 'pwn'
|
90
|
-
end
|
91
|
-
else
|
92
|
-
log_event += " => #{msg}"
|
93
|
-
if msg.respond_to?('backtrace') && !msg.instance_of?(Errno::ECONNRESET)
|
94
|
-
log_event += " => \n\t#{msg.backtrace.join("\n\t")}"
|
95
|
-
log_event += "\n\n\n"
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
logger.add(logger.level, log_event, which_self)
|
101
|
-
rescue Interrupt, StandardError => e
|
102
|
-
raise e
|
103
|
-
end
|
104
|
-
|
105
|
-
# Display Usage for this Module
|
106
|
-
|
107
|
-
public_class_method def self.help
|
108
|
-
puts "USAGE:
|
109
|
-
logger = #{self}.append(
|
110
|
-
level: 'required - log verbosity :debug|:error|:fatal|:info|:learning|:unknown|:warn',
|
111
|
-
msg: 'required - message to log',
|
112
|
-
which_self: 'required - pass in self object from module calling #{self}'
|
113
|
-
)
|
114
|
-
"
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|