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)
8787 # It doesn't appear to be documented anywhere, but Microsoft gives us a bit
8888 # of extra information in the e-data section
8989 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
9295 pw_salt = pa_data_entry . decoded_value
9396 if pw_salt . nt_status
9497 case pw_salt . nt_status . value
@@ -107,7 +110,7 @@ def self.login_status_for_kerberos_error(krb_err)
107110 Metasploit ::Model ::Login ::Status ::DISABLED
108111 end
109112 else
110- Metasploit ::Model ::Login ::Status ::DISABLED
113+ Metasploit ::Model ::Login ::Status ::DISABLED
111114 end
112115 rescue Rex ::Proto ::Kerberos ::Model ::Error ::KerberosDecodingError
113116 # 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)
176176 pa_datas = res . e_data_as_pa_data
177177 rescue OpenSSL ::ASN1 ::ASN1Error
178178 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 } ."
182185 end
183186 end
184187 end
Original file line number Diff line number Diff line change @@ -72,30 +72,24 @@ def encode
7272 raise ::NotImplementedError , 'KrbError encoding not supported'
7373 end
7474
75- # Decodes the e_data field as an Array<PreAuthDataEntry>
75+ # Decodes the e_data field as an Array<PreAuthDataEntry>.
7676 #
7777 # @return [Array<Rex::Proto::Kerberos::Model::PreAuthDataEntry>]
7878 def e_data_as_pa_data
79+ return [ ] unless self . e_data
80+
7981 pre_auth = [ ]
8082 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
8783
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
9588 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 )
9890 end
91+
92+ pre_auth
9993 end
10094
10195 private
You can’t perform that action at this time.
0 commit comments