File tree Expand file tree Collapse file tree 3 files changed +22
-22
lines changed
metasploit/framework/login_scanner Expand file tree Collapse file tree 3 files changed +22
-22
lines changed Original file line number Diff line number Diff line change @@ -87,8 +87,11 @@ def self.login_status_for_kerberos_error(krb_err)
87
87
# It doesn't appear to be documented anywhere, but Microsoft gives us a bit
88
88
# of extra information in the e-data section
89
89
begin
90
- pa_data_entry = krb_err . res . e_data_as_pa_data_entry
91
- if pa_data_entry && pa_data_entry . type == Rex ::Proto ::Kerberos ::Model ::PreAuthType ::PA_PW_SALT
90
+ pa_data_entry = krb_err . res . e_data_as_pa_data . find do |pa_data |
91
+ pa_data . type == Rex ::Proto ::Kerberos ::Model ::PreAuthType ::PA_PW_SALT
92
+ end
93
+
94
+ if pa_data_entry
92
95
pw_salt = pa_data_entry . decoded_value
93
96
if pw_salt . nt_status
94
97
case pw_salt . nt_status . value
@@ -107,7 +110,7 @@ def self.login_status_for_kerberos_error(krb_err)
107
110
Metasploit ::Model ::Login ::Status ::DISABLED
108
111
end
109
112
else
110
- Metasploit ::Model ::Login ::Status ::DISABLED
113
+ Metasploit ::Model ::Login ::Status ::DISABLED
111
114
end
112
115
rescue Rex ::Proto ::Kerberos ::Model ::Error ::KerberosDecodingError
113
116
# Could be a non-MS implementation?
Original file line number Diff line number Diff line change @@ -176,9 +176,12 @@ def message_for(error_code)
176
176
pa_datas = res . e_data_as_pa_data
177
177
rescue OpenSSL ::ASN1 ::ASN1Error
178
178
else
179
- superseded_pa_data = pa_datas . find { |pa_data | pa_data . type == Rex ::Proto ::Kerberos ::Model ::PreAuthType ::KERB_SUPERSEDED_BY_USER }
180
- if superseded_pa_data
181
- error_code = "#{ error_code } . This account has been superseded by #{ superseded_pa_data . decoded_value } ."
179
+ pa_data_entry = pa_datas . find do |pa_data |
180
+ pa_data . type == Rex ::Proto ::Kerberos ::Model ::PreAuthType ::KERB_SUPERSEDED_BY_USER
181
+ end
182
+
183
+ if pa_data_entry
184
+ error_code = "#{ error_code } . This account has been superseded by #{ pa_data_entry . decoded_value } ."
182
185
end
183
186
end
184
187
end
Original file line number Diff line number Diff line change @@ -72,30 +72,24 @@ def encode
72
72
raise ::NotImplementedError , 'KrbError encoding not supported'
73
73
end
74
74
75
- # Decodes the e_data field as an Array<PreAuthDataEntry>
75
+ # Decodes the e_data field as an Array<PreAuthDataEntry>.
76
76
#
77
77
# @return [Array<Rex::Proto::Kerberos::Model::PreAuthDataEntry>]
78
78
def e_data_as_pa_data
79
+ return [ ] unless self . e_data
80
+
79
81
pre_auth = [ ]
80
82
decoded = OpenSSL ::ASN1 . decode ( self . e_data )
81
- decoded . each do |pre_auth_data |
82
- pre_auth << Rex ::Proto ::Kerberos ::Model ::PreAuthDataEntry . decode ( pre_auth_data )
83
- end
84
-
85
- pre_auth
86
- end
87
83
88
- # Decodes the e_data field as a PreAuthData
89
- #
90
- # @return [Rex::Proto::Kerberos::Model::PreAuthData]
91
- def e_data_as_pa_data_entry
92
- if self . e_data
93
- decoded = OpenSSL ::ASN1 . decode ( self . e_data )
94
- Rex ::Proto ::Kerberos ::Model ::PreAuthDataEntry . decode ( decoded )
84
+ if decoded . first . tag_class == :UNIVERSAL && decoded . first . tag == 16
85
+ decoded . each do |pre_auth_data |
86
+ pre_auth << Rex ::Proto ::Kerberos ::Model ::PreAuthDataEntry . decode ( pre_auth_data )
87
+ end
95
88
else
96
- # This is implementation-defined, so may be different in some cases
97
- nil
89
+ pre_auth << Rex ::Proto ::Kerberos ::Model ::PreAuthDataEntry . decode ( decoded )
98
90
end
91
+
92
+ pre_auth
99
93
end
100
94
101
95
private
You can’t perform that action at this time.
0 commit comments