pwn 0.4.662 → 0.4.664

Sign up to get free protection for your applications and to get access to all the features.
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