Module krb_ms_pac

Functions for decoding Microsoft PACs inside a Kerberos ticket.

Description

Functions for decoding Microsoft PACs inside a Kerberos ticket.

Data Types

samr_uac()

samr_uac() = msrpce:bitset_mask(ulong(), disabled | homedir_req | no_password | temp_dupe | normal | mns_logon | interdomain | workstation | server | no_expire_password | auto_locked | enc_text_pw_allowed | smartcard_only | delegation_trust | not_delegated | des_only | no_preauth | password_expired | delegation_auth_trust | no_auth_data | partial_secrets, #{disabled => 1, homedir_req => 2, no_password => 4, temp_dupe => 8, normal => 16, mns_logon => 32, interdomain => 64, workstation => 128, server => 256, no_expire_password => 512, auto_locked => 1024, enc_text_pw_allowed => 2048, smartcard_only => 4096, delegation_trust => 8192, not_delegated => 16384, des_only => 32768, no_preauth => 65536, password_expired => 131072, delegation_auth_trust => 262144, no_auth_data => 524288, partial_secrets => 1048576})

sid_attrs()

sid_attrs() = msrpce:bitset(ulong(), mandatory | default | enabled | owner | resource, #{mandatory => 0, default => 1, enabled => 2, owner => 3, resource => 29})

user_flags()

user_flags() = msrpce:bitset(ulong(), guest | no_encrypt | lanman_key | subauth_key | machine | ntlmv2_dc | profile | extra_sids | resource_groups, #{guest => 0, no_encrypt => 1, lanman_key => 3, subauth_key => 6, machine => 7, ntlmv2_dc => 8, profile => 10, extra_sids => 5, resource_groups => 9})

user_session_key()

user_session_key() = msrpce:aligned_bin(16, 4)

Function Index

decode/1Decodes a PAC from raw bytes.
decode_ticket/1Extracts and decodes a PAC from a given Kerberos ticket.

Function Details

decode/1

decode(Bin::binary()) -> #pac{version = integer(), buffers = [#pac_unknown{type = integer(), data = binary()} | #pac_client_info{tgt_time = integer(), name = binary()} | #pac_upn_dns{upn = binary(), dns_name = binary()} | #pac_logon_info{info = #kerb_validation_info{logon_time = filetime(), logoff_time = filetime(), kickoff_time = filetime(), password_last_set = filetime(), password_can_change = filetime(), password_must_change = filetime(), effective_name = rpc_unicode_str(), full_name = rpc_unicode_str(), logon_script = rpc_unicode_str(), profile_path = rpc_unicode_str(), home_directory = rpc_unicode_str(), home_directory_drive = rpc_unicode_str(), logon_count = ushort(), bad_password_count = ushort(), user_id = ulong(), primary_group_id = ulong(), group_count = ulong(), group_ids = pointer(varying_array(#group_membership{relative_id = ulong(), attributes = sid_attrs()})), user_flags = user_flags(), user_session_key = user_session_key(), logon_server = rpc_unicode_str(), logon_domain_name = rpc_unicode_str(), logon_domain_id = pointer(sid()), reserved1 = fixed_array(2, ulong()), user_account_control = samr_uac(), sub_auth_status = ulong(), last_successful_ilogon = filetime(), last_failed_ilogon = filetime(), failed_ilogon_count = ulong(), reserved3 = ulong(), sid_count = ulong(), extra_sids = pointer(varying_array(#sid_and_attrs{sid = pointer(sid()), attributes = sid_attrs()})), resource_group_domain_sid = pointer(sid()), resource_group_count = ulong(), resource_groups = pointer(varying_array(#group_membership{relative_id = ulong(), attributes = sid_attrs()}))}} | #pac_device_info{info = #kerb_pac_device_info{user_id = ulong(), primary_group_id = ulong(), domain_id = pointer(sid()), group_count = ulong(), group_ids = pointer(array(#group_membership{relative_id = ulong(), attributes = sid_attrs()})), sid_count = ulong(), extra_sids = pointer(array(#sid_and_attrs{sid = pointer(sid()), attributes = sid_attrs()})), domain_group_count = ulong(), domain_group_ids = pointer(array(#domain_group_membership{domain_id = pointer(sid()), group_count = ulong(), group_ids = pointer(array(#group_membership{relative_id = ulong(), attributes = sid_attrs()}))}))}}]}

Decodes a PAC from raw bytes. Throws errors on invalid input.

decode_ticket/1

decode_ticket(X1::#'Ticket'{}) -> {ok, #pac{version = integer(), buffers = [#pac_unknown{type = integer(), data = binary()} | #pac_client_info{tgt_time = integer(), name = binary()} | #pac_upn_dns{upn = binary(), dns_name = binary()} | #pac_logon_info{info = #kerb_validation_info{logon_time = filetime(), logoff_time = filetime(), kickoff_time = filetime(), password_last_set = filetime(), password_can_change = filetime(), password_must_change = filetime(), effective_name = rpc_unicode_str(), full_name = rpc_unicode_str(), logon_script = rpc_unicode_str(), profile_path = rpc_unicode_str(), home_directory = rpc_unicode_str(), home_directory_drive = rpc_unicode_str(), logon_count = ushort(), bad_password_count = ushort(), user_id = ulong(), primary_group_id = ulong(), group_count = ulong(), group_ids = pointer(varying_array(#group_membership{relative_id = ulong(), attributes = sid_attrs()})), user_flags = user_flags(), user_session_key = user_session_key(), logon_server = rpc_unicode_str(), logon_domain_name = rpc_unicode_str(), logon_domain_id = pointer(sid()), reserved1 = fixed_array(2, ulong()), user_account_control = samr_uac(), sub_auth_status = ulong(), last_successful_ilogon = filetime(), last_failed_ilogon = filetime(), failed_ilogon_count = ulong(), reserved3 = ulong(), sid_count = ulong(), extra_sids = pointer(varying_array(#sid_and_attrs{sid = pointer(sid()), attributes = sid_attrs()})), resource_group_domain_sid = pointer(sid()), resource_group_count = ulong(), resource_groups = pointer(varying_array(#group_membership{relative_id = ulong(), attributes = sid_attrs()}))}} | #pac_device_info{info = #kerb_pac_device_info{user_id = ulong(), primary_group_id = ulong(), domain_id = pointer(sid()), group_count = ulong(), group_ids = pointer(array(#group_membership{relative_id = ulong(), attributes = sid_attrs()})), sid_count = ulong(), extra_sids = pointer(array(#sid_and_attrs{sid = pointer(sid()), attributes = sid_attrs()})), domain_group_count = ulong(), domain_group_ids = pointer(array(#domain_group_membership{domain_id = pointer(sid()), group_count = ulong(), group_ids = pointer(array(#group_membership{relative_id = ulong(), attributes = sid_attrs()}))}))}}]}} | {error, no_pac} | {error, {bad_pac, term()}}

Extracts and decodes a PAC from a given Kerberos ticket.


Generated by EDoc