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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a7f9d4bd6a0a71ea65b8724013bb92fd9eb381ef0c7fb947e29b895bb0192569
4
- data.tar.gz: b701eba227bf7c8fb36b034531f5112061ef1d550e0634e49d417ebd8929079c
3
+ metadata.gz: d231662348a2f93ca5d2c282ba395848dc3a9f1cbac00fd5a033787ca95d21c4
4
+ data.tar.gz: 1e6ec131ce26a248425bdc8fa36d30eecb844d675092c3ac12e12c8e728c7079
5
5
  SHA512:
6
- metadata.gz: 59deae1117fe9e5078802c0c276779a2eb68d78eb57710e0da89ebf1ce0b4cc3cdf507a6c6498e921dc09cf59e4e10031c422d3352264dab8205e6f10bb637b0
7
- data.tar.gz: 68fb679b424a65bf6926ba98b72118732d1d58f588f2a8819f1e6c1d94e7879839f9a4bb676c31a92da4bd00ea8a59a951c48cc4ae1bd9cdbbbc66cce96cb5e1
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.662]:001 >>> PWN.help
40
+ pwn[v0.4.664]:001 >>> PWN.help
41
41
  ```
42
42
 
43
43
  [![Installing the pwn Security Automation Framework](https://raw.githubusercontent.com/0dayInc/pwn/master/documentation/pwn_install.png)](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.662]:001 >>> PWN.help
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PWN
4
- VERSION = '0.4.662'
4
+ VERSION = '0.4.664'
5
5
  end
data/lib/pwn.rb CHANGED
@@ -12,7 +12,6 @@ module PWN
12
12
  autoload :AWS, 'pwn/aws'
13
13
  autoload :Banner, 'pwn/banner'
14
14
  autoload :FFI, 'pwn/ffi'
15
- autoload :Log, 'pwn/log'
16
15
  autoload :Plugins, 'pwn/plugins'
17
16
  autoload :Reports, 'pwn/reports'
18
17
  autoload :SAST, 'pwn/sast'
@@ -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.662
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
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe PWN::Log do
6
- it 'should return data for help method' do
7
- help_response = PWN::Log.help
8
- expect(help_response).not_to be_nil
9
- end
10
- end