pwn 0.4.539 → 0.4.542

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: c77a67e15fb91b4692811c34abe3e3afe3ad69d22dcf7a9d01b5b98915edb64d
4
- data.tar.gz: cb6fdef97a465f89ec32e4f56460fd4ab3100faa06d4e2ce52758af07ebc1ea0
3
+ metadata.gz: 21ef9d6fdf6c9eccf69de573293a4cd3b1b1b8ee223886539030d13e330d9fac
4
+ data.tar.gz: 71f07204cdf4432c45f12e1cebf1a0da3f41ba370e60396b833b3f8d4b752928
5
5
  SHA512:
6
- metadata.gz: bb307006843ea074f7439c946cb5931a60a14937dc58d1141a58f6c9729e16afb9f9e98de385cc15edb82185bd025f5a0847e2f8586b844456bfd8a3d6caf7dd
7
- data.tar.gz: 1d0b9cb85f3e7f1ab413355028a40b869eb654475f11ab5ce98263e5c283d027402459bcf1567ee8704844451c5fe84423d148482b7939faedaf65f8ff02ef91
6
+ metadata.gz: 39b1c9849f9396e972b24f26d2ae4b7b9aead4afc9ad865231fc60828360a77c237522ff2df2fda302930e381f1c3056f1917e03fa25468aa8e722cadcf526ab
7
+ data.tar.gz: 426a22f81eb171d98298c58e1176469ec623aa4e8adf35d82d78553ead7b8dddfd1eecf7aa658ffc076eccf6404c3bb93cc1b722de855f411fd3bfb463e54fb6
data/Gemfile CHANGED
@@ -11,18 +11,18 @@ gemspec
11
11
  # In some circumstances custom flags are passed to gems in order
12
12
  # to build appropriately. Defer to ./reinstall_pwn_gemset.sh
13
13
  # to review these custom flags (e.g. pg, serialport, etc).
14
- gem 'activesupport', '7.0.3.1'
14
+ gem 'activesupport', '7.0.4'
15
15
  gem 'anemone', '0.7.2'
16
16
  gem 'authy', '3.0.1'
17
17
  gem 'aws-sdk', '3.1.0'
18
18
  gem 'bettercap', '1.6.2'
19
19
  gem 'brakeman', '5.3.1'
20
20
  gem 'bson', '4.15.0'
21
- gem 'bundler', '>=2.3.21'
21
+ gem 'bundler', '>=2.3.22'
22
22
  gem 'bundler-audit', '0.9.1'
23
23
  gem 'bunny', '2.19.0'
24
24
  gem 'colorize', '0.8.1'
25
- gem 'credit_card_validations', '5.0.0'
25
+ gem 'credit_card_validations', '6.0.0'
26
26
  gem 'eventmachine', '1.2.7'
27
27
  gem 'faye-websocket', '0.11.1'
28
28
  gem 'fftw3', '0.3'
@@ -60,27 +60,27 @@ gem 'rex', '2.0.13'
60
60
  gem 'rmagick', '4.2.6'
61
61
  gem 'rspec', '3.11.0'
62
62
  gem 'rtesseract', '3.1.2'
63
- gem 'rubocop', '1.35.1'
63
+ gem 'rubocop', '1.36.0'
64
64
  gem 'rubocop-rake', '0.6.0'
65
- gem 'rubocop-rspec', '2.12.1'
65
+ gem 'rubocop-rspec', '2.13.1'
66
66
  gem 'ruby-audio', '1.6.1'
67
67
  gem 'ruby-nmap', '0.10.0'
68
68
  gem 'ruby-saml', '1.14.0'
69
69
  gem 'rvm', '1.11.3.9'
70
- gem 'savon', '2.13.0'
71
- gem 'selenium-devtools', '0.104.0'
70
+ gem 'savon', '2.13.1'
71
+ gem 'selenium-devtools', '0.105.0'
72
72
  gem 'serialport', '1.3.2'
73
73
  gem 'sinatra', '2.2.2'
74
74
  gem 'slack-ruby-client', '1.1.0'
75
75
  gem 'socksify', '1.7.1'
76
76
  gem 'spreadsheet', '1.3.0'
77
- gem 'sqlite3', '1.4.4'
77
+ gem 'sqlite3', '1.5.0'
78
78
  gem 'thin', '1.8.1'
79
79
  gem 'tty-prompt', '0.23.1'
80
80
  gem 'watir', '7.1.0'
81
81
  gem 'waveform', '0.1.2'
82
82
  gem 'webrick', '1.7.0'
83
83
  gem 'whois', '5.1.0'
84
- gem 'whois-parser', '1.2.0'
84
+ gem 'whois-parser', '2.0.0'
85
85
  gem 'wicked_pdf', '2.6.3'
86
86
  gem 'yard', '0.9.28'
data/README.md CHANGED
@@ -37,7 +37,7 @@ $ rvm use ruby-3.1.2@pwn
37
37
  $ rvm list gemsets
38
38
  $ gem install --verbose pwn
39
39
  $ pwn
40
- pwn[v0.4.539]:001 >>> PWN.help
40
+ pwn[v0.4.542]: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.1.2@pwn
52
52
  $ gem uninstall --all --executables pwn
53
53
  $ gem install --verbose pwn
54
54
  $ pwn
55
- pwn[v0.4.539]:001 >>> PWN.help
55
+ pwn[v0.4.542]:001 >>> PWN.help
56
56
  ```
57
57
 
58
58
 
data/bin/pwn_sast CHANGED
@@ -72,8 +72,8 @@ begin
72
72
  test_cases = chosen_test_cases.to_s.scrub.chomp.strip.delete("\s").split(',').map(&:to_sym)
73
73
  else
74
74
  test_cases = %i[
75
- ApacheFileSystemUtilAPI
76
75
  AMQPConnectAsGuest
76
+ ApacheFileSystemUtilAPI
77
77
  AWS
78
78
  BannedFunctionCallsC
79
79
  Base64
@@ -89,12 +89,13 @@ begin
89
89
  Factory
90
90
  HTTPAuthorizationHeader
91
91
  InnerHTML
92
+ Keystore
92
93
  LocationHash
93
94
  Log4J
94
95
  Logger
95
- Keystore
96
96
  OuterHTML
97
97
  Password
98
+ PHPTypeJuggling
98
99
  PomVersion
99
100
  Port
100
101
  PrivateKey
@@ -109,6 +110,7 @@ begin
109
110
  ThrowErrors
110
111
  Token
111
112
  Version
113
+ WindowLocationHash
112
114
  ]
113
115
  end
114
116
 
@@ -135,7 +135,8 @@ begin
135
135
  http_resp_length: response.body.length,
136
136
  http_resp: "#{response.body[0..300]}..."
137
137
  }
138
- rescue RestClient::ExceptionWithResponse => e
138
+ rescue RestClient::ExceptionWithResponse,
139
+ RestClient::ServerBrokeConnection => e
139
140
  rest_client_resp_hash = {
140
141
  request_timestamp: Time.now.strftime('%Y-%m-%d_%H-%M-%S'),
141
142
  http_uri: http_uri,
@@ -0,0 +1,143 @@
1
+ # frozen_string_literal: false
2
+
3
+ require 'socket'
4
+
5
+ module PWN
6
+ module SAST
7
+ # SAST Module used to identify command
8
+ # execution residing within Java source code.
9
+ module PHPTypeJuggling
10
+ @@logger = PWN::Plugins::PWNLogger.create
11
+
12
+ # Supported Method Parameters::
13
+ # PWN::SAST::Log4J.scan(
14
+ # dir_path: 'optional path to dir defaults to .'
15
+ # git_repo_root_uri: 'optional http uri of git repo scanned'
16
+ # )
17
+
18
+ public_class_method def self.scan(opts = {})
19
+ dir_path = opts[:dir_path]
20
+ git_repo_root_uri = opts[:git_repo_root_uri].to_s.scrub
21
+ result_arr = []
22
+ logger_results = ''
23
+
24
+ PWN::Plugins::FileFu.recurse_dir(dir_path: dir_path) do |entry|
25
+ if (File.file?(entry) && File.basename(entry) !~ /^pwn.+(html|json|db)$/ && File.basename(entry) !~ /\.JS-BEAUTIFIED$/) && File.extname(entry).include?('.php') && entry !~ /test/i
26
+ line_no_and_contents_arr = []
27
+ entry_beautified = false
28
+
29
+ if File.extname(entry) == '.js' && (`wc -l #{entry}`.split.first.to_i < 20 || entry.include?('.min.js') || entry.include?('-all.js'))
30
+ js_beautify = `js-beautify #{entry} > #{entry}.JS-BEAUTIFIED`.to_s.scrub
31
+ entry = "#{entry}.JS-BEAUTIFIED"
32
+ entry_beautified = true
33
+ end
34
+
35
+ test_case_filter = "
36
+ grep -Fn \
37
+ -e '==' #{entry}
38
+ "
39
+
40
+ str = `#{test_case_filter}`.to_s.scrub
41
+
42
+ if str.to_s.empty?
43
+ # If str length is >= 64 KB do not include results. (Due to Mongo Document Size Restrictions)
44
+ logger_results = "#{logger_results}~" # Catching bugs is good :)
45
+ else
46
+ str = "1:Result larger than 64KB -> Size: #{str.to_s.length}. Please click the \"Path\" link for more details." if str.to_s.length >= 64_000
47
+
48
+ hash_line = {
49
+ timestamp: Time.now.strftime('%Y-%m-%d %H:%M:%S.%9N %z').to_s,
50
+ security_references: security_references,
51
+ filename: { git_repo_root_uri: git_repo_root_uri, entry: entry },
52
+ line_no_and_contents: '',
53
+ raw_content: str,
54
+ test_case_filter: test_case_filter
55
+ }
56
+
57
+ # COMMMENT: Must be a better way to implement this (regex is kinda funky)
58
+ line_contents_split = str.split(/^(\d{1,}):|\n(\d{1,}):/)[1..-1]
59
+ line_no_count = line_contents_split.length # This should always be an even number
60
+ current_count = 0
61
+ while line_no_count > current_count
62
+ line_no = line_contents_split[current_count]
63
+ contents = line_contents_split[current_count + 1]
64
+ if Dir.exist?("#{dir_path}/.git") ||
65
+ Dir.exist?('.git')
66
+
67
+ repo_root = dir_path
68
+ repo_root = '.' if Dir.exist?('.git')
69
+
70
+ author = PWN::Plugins::Git.get_author(
71
+ repo_root: repo_root,
72
+ from_line: line_no,
73
+ to_line: line_no,
74
+ target_file: entry,
75
+ entry_beautified: entry_beautified
76
+ )
77
+ else
78
+ author = 'N/A'
79
+ end
80
+ hash_line[:line_no_and_contents] = line_no_and_contents_arr.push(
81
+ line_no: line_no,
82
+ contents: contents,
83
+ author: author
84
+ )
85
+
86
+ current_count += 2
87
+ end
88
+ result_arr.push(hash_line)
89
+ logger_results = "#{logger_results}x" # Seeing progress is good :)
90
+ end
91
+ end
92
+ end
93
+ logger_banner = "http://#{Socket.gethostname}:8808/doc_root/pwn-#{PWN::VERSION.to_s.scrub}/#{to_s.scrub.gsub('::', '/')}.html"
94
+ if logger_results.empty?
95
+ @@logger.info("#{logger_banner}: No files applicable to this test case.\n")
96
+ else
97
+ @@logger.info("#{logger_banner} => #{logger_results}complete.\n")
98
+ end
99
+ result_arr
100
+ rescue StandardError => e
101
+ raise e
102
+ end
103
+
104
+ # Used primarily to map NIST 800-53 Revision 4 Security Controls
105
+ # https://web.nvd.nist.gov/view/800-53/Rev4/impact?impactName=HIGH
106
+ # to PWN Exploit & Static Code Anti-Pattern Matching Modules to
107
+ # Determine the level of Testing Coverage w/ PWN.
108
+
109
+ public_class_method def self.security_references
110
+ {
111
+ sast_module: self,
112
+ section: 'DEVELOPER SECURITY AND PRIVACY ARCHITECTURE AND DESIGN',
113
+ nist_800_53_uri: 'https://csrc.nist.gov/Projects/risk-management/sp800-53-controls/release-search#/control/?version=5.1&number=SA-17',
114
+ cwe_id: '661',
115
+ cwe_uri: 'https://cwe.mitre.org/data/definitions/661.html'
116
+ }
117
+ rescue StandardError => e
118
+ raise e
119
+ end
120
+
121
+ # Author(s):: 0day Inc. <request.pentest@0dayinc.com>
122
+
123
+ public_class_method def self.authors
124
+ "AUTHOR(S):
125
+ 0day Inc. <request.pentest@0dayinc.com>
126
+ "
127
+ end
128
+
129
+ # Display Usage for this Module
130
+
131
+ public_class_method def self.help
132
+ puts "USAGE:
133
+ sast_arr = #{self}.scan(
134
+ :dir_path => 'optional path to dir defaults to .',
135
+ :git_repo_root_uri => 'optional http uri of git repo scanned'
136
+ )
137
+
138
+ #{self}.authors
139
+ "
140
+ end
141
+ end
142
+ end
143
+ end
data/lib/pwn/sast.rb CHANGED
@@ -29,6 +29,7 @@ module PWN
29
29
  autoload :Logger, 'pwn/sast/logger'
30
30
  autoload :OuterHTML, 'pwn/sast/outer_html'
31
31
  autoload :Password, 'pwn/sast/password'
32
+ autoload :PHPTypeJuggling, 'pwn/sast/php_type_juggling'
32
33
  autoload :PomVersion, 'pwn/sast/pom_version'
33
34
  autoload :Port, 'pwn/sast/port'
34
35
  autoload :PrivateKey, 'pwn/sast/private_key'
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.539'
4
+ VERSION = '0.4.542'
5
5
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe PWN::SAST::PHPTypeJuggling do
6
+ it 'scan method should exist' do
7
+ scan_response = PWN::SAST::PHPTypeJuggling
8
+ expect(scan_response).to respond_to :scan
9
+ end
10
+
11
+ it 'should display information for security_references' do
12
+ security_references_response = PWN::SAST::PHPTypeJuggling
13
+ expect(security_references_response).to respond_to :security_references
14
+ end
15
+
16
+ it 'should display information for authors' do
17
+ authors_response = PWN::SAST::PHPTypeJuggling
18
+ expect(authors_response).to respond_to :authors
19
+ end
20
+
21
+ it 'should display information for existing help method' do
22
+ help_response = PWN::SAST::PHPTypeJuggling
23
+ expect(help_response).to respond_to :help
24
+ end
25
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.539
4
+ version: 0.4.542
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-30 00:00:00.000000000 Z
11
+ date: 2022-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 7.0.3.1
19
+ version: 7.0.4
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 7.0.3.1
26
+ version: 7.0.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: anemone
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: 2.3.21
117
+ version: 2.3.22
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: 2.3.21
124
+ version: 2.3.22
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: bundler-audit
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -170,14 +170,14 @@ dependencies:
170
170
  requirements:
171
171
  - - '='
172
172
  - !ruby/object:Gem::Version
173
- version: 5.0.0
173
+ version: 6.0.0
174
174
  type: :runtime
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - '='
179
179
  - !ruby/object:Gem::Version
180
- version: 5.0.0
180
+ version: 6.0.0
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: eventmachine
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -688,14 +688,14 @@ dependencies:
688
688
  requirements:
689
689
  - - '='
690
690
  - !ruby/object:Gem::Version
691
- version: 1.35.1
691
+ version: 1.36.0
692
692
  type: :runtime
693
693
  prerelease: false
694
694
  version_requirements: !ruby/object:Gem::Requirement
695
695
  requirements:
696
696
  - - '='
697
697
  - !ruby/object:Gem::Version
698
- version: 1.35.1
698
+ version: 1.36.0
699
699
  - !ruby/object:Gem::Dependency
700
700
  name: rubocop-rake
701
701
  requirement: !ruby/object:Gem::Requirement
@@ -716,14 +716,14 @@ dependencies:
716
716
  requirements:
717
717
  - - '='
718
718
  - !ruby/object:Gem::Version
719
- version: 2.12.1
719
+ version: 2.13.1
720
720
  type: :runtime
721
721
  prerelease: false
722
722
  version_requirements: !ruby/object:Gem::Requirement
723
723
  requirements:
724
724
  - - '='
725
725
  - !ruby/object:Gem::Version
726
- version: 2.12.1
726
+ version: 2.13.1
727
727
  - !ruby/object:Gem::Dependency
728
728
  name: ruby-audio
729
729
  requirement: !ruby/object:Gem::Requirement
@@ -786,28 +786,28 @@ dependencies:
786
786
  requirements:
787
787
  - - '='
788
788
  - !ruby/object:Gem::Version
789
- version: 2.13.0
789
+ version: 2.13.1
790
790
  type: :runtime
791
791
  prerelease: false
792
792
  version_requirements: !ruby/object:Gem::Requirement
793
793
  requirements:
794
794
  - - '='
795
795
  - !ruby/object:Gem::Version
796
- version: 2.13.0
796
+ version: 2.13.1
797
797
  - !ruby/object:Gem::Dependency
798
798
  name: selenium-devtools
799
799
  requirement: !ruby/object:Gem::Requirement
800
800
  requirements:
801
801
  - - '='
802
802
  - !ruby/object:Gem::Version
803
- version: 0.104.0
803
+ version: 0.105.0
804
804
  type: :runtime
805
805
  prerelease: false
806
806
  version_requirements: !ruby/object:Gem::Requirement
807
807
  requirements:
808
808
  - - '='
809
809
  - !ruby/object:Gem::Version
810
- version: 0.104.0
810
+ version: 0.105.0
811
811
  - !ruby/object:Gem::Dependency
812
812
  name: serialport
813
813
  requirement: !ruby/object:Gem::Requirement
@@ -884,14 +884,14 @@ dependencies:
884
884
  requirements:
885
885
  - - '='
886
886
  - !ruby/object:Gem::Version
887
- version: 1.4.4
887
+ version: 1.5.0
888
888
  type: :runtime
889
889
  prerelease: false
890
890
  version_requirements: !ruby/object:Gem::Requirement
891
891
  requirements:
892
892
  - - '='
893
893
  - !ruby/object:Gem::Version
894
- version: 1.4.4
894
+ version: 1.5.0
895
895
  - !ruby/object:Gem::Dependency
896
896
  name: thin
897
897
  requirement: !ruby/object:Gem::Requirement
@@ -982,14 +982,14 @@ dependencies:
982
982
  requirements:
983
983
  - - '='
984
984
  - !ruby/object:Gem::Version
985
- version: 1.2.0
985
+ version: 2.0.0
986
986
  type: :runtime
987
987
  prerelease: false
988
988
  version_requirements: !ruby/object:Gem::Requirement
989
989
  requirements:
990
990
  - - '='
991
991
  - !ruby/object:Gem::Version
992
- version: 1.2.0
992
+ version: 2.0.0
993
993
  - !ruby/object:Gem::Dependency
994
994
  name: wicked_pdf
995
995
  requirement: !ruby/object:Gem::Requirement
@@ -1641,6 +1641,7 @@ files:
1641
1641
  - lib/pwn/sast/logger.rb
1642
1642
  - lib/pwn/sast/outer_html.rb
1643
1643
  - lib/pwn/sast/password.rb
1644
+ - lib/pwn/sast/php_type_juggling.rb
1644
1645
  - lib/pwn/sast/pom_version.rb
1645
1646
  - lib/pwn/sast/port.rb
1646
1647
  - lib/pwn/sast/private_key.rb
@@ -1938,6 +1939,7 @@ files:
1938
1939
  - spec/lib/pwn/sast/log4j_spec.rb
1939
1940
  - spec/lib/pwn/sast/logger_spec.rb
1940
1941
  - spec/lib/pwn/sast/password_spec.rb
1942
+ - spec/lib/pwn/sast/php_type_juggling_spec.rb
1941
1943
  - spec/lib/pwn/sast/pom_version_spec.rb
1942
1944
  - spec/lib/pwn/sast/port_spec.rb
1943
1945
  - spec/lib/pwn/sast/private_key_spec.rb
@@ -2028,7 +2030,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
2028
2030
  - !ruby/object:Gem::Version
2029
2031
  version: '0'
2030
2032
  requirements: []
2031
- rubygems_version: 3.3.21
2033
+ rubygems_version: 3.3.22
2032
2034
  signing_key:
2033
2035
  specification_version: 4
2034
2036
  summary: Automated Security Testing for CI/CD Pipelines & Beyond