|
10 | 10 | DWORD, LSA_UNICODE_STRING, PKERB_EXTERNAL_NAME, KIWI_GENERIC_PRIMARY_CREDENTIAL, \ |
11 | 11 | LUID, PLSAISO_DATA_BLOB |
12 | 12 | from pypykatz.lsadecryptor.package_commons import PackageTemplate |
| 13 | +from pypykatz.commons.common import hexdump |
13 | 14 |
|
14 | 15 | class KerberosTemplate(PackageTemplate): |
15 | 16 | def __init__(self, sysinfo): |
@@ -101,10 +102,19 @@ def get_template(sysinfo): |
101 | 102 | template.hash_password_struct = KERB_HASHPASSWORD_6_1607 |
102 | 103 | template.csp_info_struct = KIWI_KERBEROS_CSP_INFOS_10 |
103 | 104 |
|
104 | | - elif sysinfo.buildnumber >= WindowsBuild.WIN_11_2022.value: |
| 105 | + #elif sysinfo.buildnumber >= WindowsBuild.WIN_11_2022.value: |
| 106 | + # template.signature = b'\x48\x8b\x18\x48\x8d\x0d' |
| 107 | + # template.first_entry_offset = 6 |
| 108 | + # template.kerberos_session_struct = KIWI_KERBEROS_LOGON_SESSION_10_1607 |
| 109 | + # template.kerberos_ticket_struct = KIWI_KERBEROS_INTERNAL_TICKET_11 |
| 110 | + # template.keys_list_struct = KIWI_KERBEROS_KEYS_LIST_6 |
| 111 | + # template.hash_password_struct = KERB_HASHPASSWORD_6_1607 |
| 112 | + # template.csp_info_struct = KIWI_KERBEROS_CSP_INFOS_10 |
| 113 | + |
| 114 | + elif sysinfo.buildnumber >= WindowsBuild.WIN_11_24H2.value: |
105 | 115 | template.signature = b'\x48\x8b\x18\x48\x8d\x0d' |
106 | 116 | template.first_entry_offset = 6 |
107 | | - template.kerberos_session_struct = KIWI_KERBEROS_LOGON_SESSION_10_1607 |
| 117 | + template.kerberos_session_struct = KIWI_KERBEROS_LOGON_SESSION_24H2 |
108 | 118 | template.kerberos_ticket_struct = KIWI_KERBEROS_INTERNAL_TICKET_11 |
109 | 119 | template.keys_list_struct = KIWI_KERBEROS_KEYS_LIST_6 |
110 | 120 | template.hash_password_struct = KERB_HASHPASSWORD_6_1607 |
@@ -607,7 +617,6 @@ def __init__(self, reader): |
607 | 617 |
|
608 | 618 | class KIWI_KERBEROS_LOGON_SESSION_10_1607: |
609 | 619 | def __init__(self, reader): |
610 | | - #input('aaaaaaaaa\n' + hexdump(reader.peek(0x300))) |
611 | 620 | self.UsageCount = ULONG(reader).value |
612 | 621 | reader.align() |
613 | 622 | self.unk0 = LIST_ENTRY(reader) |
@@ -653,6 +662,62 @@ def __init__(self, reader): |
653 | 662 | self.Tickets_3 = LIST_ENTRY(reader) |
654 | 663 | self.unk29 = FILETIME(reader).value |
655 | 664 | self.SmartcardInfos = PVOID(reader) |
| 665 | + |
| 666 | + |
| 667 | +# looks the same as the 10_1607 |
| 668 | +class KIWI_KERBEROS_24H2_PRIMARY_CREDENTIAL: |
| 669 | + def __init__(self, reader): |
| 670 | + self.UserName = LSA_UNICODE_STRING(reader) |
| 671 | + self.Domaine = LSA_UNICODE_STRING(reader) |
| 672 | + self.unkFunction = PVOID(reader).value |
| 673 | + self.type = DWORD(reader).value # // or flags 2 = normal, 1 = ISO(reader).value |
| 674 | + reader.align() |
| 675 | + self.Password = LSA_UNICODE_STRING(reader) # union { |
| 676 | + self.IsoPassword = KIWI_KERBEROS_10_PRIMARY_CREDENTIAL_1607_ISO(reader) |
| 677 | + |
| 678 | +class KIWI_KERBEROS_LOGON_SESSION_24H2: |
| 679 | + def __init__(self, reader): |
| 680 | + #input('aaaaaaaaa\n' + hexdump(reader.peek(0x300), start = reader.tell())) |
| 681 | + self.UsageCount = ULONG(reader).value |
| 682 | + reader.align() |
| 683 | + self.unk0 = LIST_ENTRY(reader) |
| 684 | + #self.unk1 = PVOID(reader).value |
| 685 | + self.unk1b = ULONG(reader).value |
| 686 | + reader.align() |
| 687 | + self.unk2 = FILETIME(reader).value |
| 688 | + self.unk4 = PVOID(reader).value |
| 689 | + self.unk5 = PVOID(reader).value |
| 690 | + self.unk6 = PVOID(reader).value |
| 691 | + self.LocallyUniqueIdentifier = LUID(reader).value |
| 692 | + self.unk7 = FILETIME(reader).value |
| 693 | + self.unk8 = PVOID(reader).value |
| 694 | + self.unk8b = ULONG(reader).value |
| 695 | + reader.align() |
| 696 | + self.unk9 = FILETIME(reader).value |
| 697 | + self.unk11 = PVOID(reader).value |
| 698 | + self.unk12 = PVOID(reader).value |
| 699 | + reader.align(8) |
| 700 | + self.credentials = KIWI_KERBEROS_24H2_PRIMARY_CREDENTIAL(reader) |
| 701 | + self.unk14 = ULONG(reader).value |
| 702 | + self.unk15 = ULONG(reader).value |
| 703 | + self.unk16 = ULONG(reader).value |
| 704 | + self.unk17 = ULONG(reader).value |
| 705 | + self.unk18 = PVOID(reader).value |
| 706 | + self.unk19 = PVOID(reader).value |
| 707 | + self.unk20 = PVOID(reader).value |
| 708 | + self.unk21 = PVOID(reader).value |
| 709 | + self.unk22 = PVOID(reader).value |
| 710 | + self.unk23 = PVOID(reader).value |
| 711 | + reader.align() |
| 712 | + self.pKeyList = PVOID(reader) |
| 713 | + self.unk26 = PVOID(reader).value |
| 714 | + self.Tickets_1 = LIST_ENTRY(reader) |
| 715 | + self.unk27 = FILETIME(reader).value |
| 716 | + self.Tickets_2 = LIST_ENTRY(reader) |
| 717 | + self.unk28 = FILETIME(reader).value |
| 718 | + self.Tickets_3 = LIST_ENTRY(reader) |
| 719 | + self.unk29 = FILETIME(reader).value |
| 720 | + self.SmartcardInfos = PVOID(reader) |
656 | 721 |
|
657 | 722 |
|
658 | 723 | class KIWI_KERBEROS_LOGON_SESSION_10_1607_X86: |
|
0 commit comments