o
    j"                     @   s   d dl Z d dlmZ d dlmZ d dlmZmZmZ d dl	m
Z
mZ d dlmZmZmZmZmZmZmZmZmZ d dlmZmZmZ d dlZd dlZd dlZG dd	 d	ejZG d
d dZG dd dZ dS )    N)core)filetime_to_dt)WindowsBuildGenericReaderhexdump)LSAISO_DATA_BLOBENC_LSAISO_DATA_BLOB)	EncryptionKeyPrincipalNameTicketFlagsKrbCredInfo	krb5_pvnoEncryptedDataKRBCREDTicketEncKrbCredPart)	NAME_TYPEMESSAGE_TYPEEncryptionTypec                   @   s$   e Zd Ze Ze Ze ZdS )KerberosTicketTypeN)__name__
__module____qualname__enumautoTGTTGSCLIENT r   r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/commons/kerberosticket.pyr      s    r   c                   @   s    e Zd Zdd Zedd ZdS )KerberosSessionKeyc                 C   s   d | _ d | _d S N)keydata
sessionkeyselfr   r   r   __init__   s   
zKerberosSessionKey.__init__c                 C   s   t  }| j|_|jtjjk s| jtj	k r|j|_
|S t|j|jd}| jtj	td d d kr;t|}|d|_n
t|}|d|_|j|_
|S )N)processor_architectureKerberosKey       )r    Datar"   buildnumberr   WIN_10_1507valueLengthr   sizer#   r   architecturelenreadr   )
key_structsysinfokskreaderblobr   r   r   parse    s   zKerberosSessionKey.parseN)r   r   r   r&   staticmethodr:   r   r   r   r   r       s    r    c                   @   sX   e Zd Zdd Zdd Zdd Zeddd	Zedd
dZdd Z	dd Z
dd ZdS )KerberosTicketc                 C   s   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d | _d | _d | _d | _d | _d | _d | _d | _d | _i | _d | _d S r!   )typeServiceNameServiceName_type
DomainNameETargetNameETargetName_typeTargetDomainNameEClientNameEClientName_typeAltTargetDomainNameDescription	StartTimeEndTime
RenewUntilKeyTypeKeyr   TicketEncType
TicketKvnor   
kirbi_datasession_keyr$   r   r   r   r&   4   s,   
zKerberosTicket.__init__c                 C   s   i }| j |d< | j|d< | j|d< | j|d< | j|d< | j|d< | j|d< | j|d< | j|d	< | j	|d
< | j
|d< | j|d< |S )Nr=   r>   r@   rA   rC   rD   rF   rH   rI   rJ   rK   rL   )r=   r>   r@   rA   rC   rD   rF   rH   rI   rJ   rK   rL   r%   tr   r   r   to_dictS   s   











zKerberosTicket.to_dictc                 C   s4  i }t | j| jd|d< | j|d< t| j| jd|d< t| j	
t	|d< | j|d< | j|d< | j|d	< | j|d
< t| j| jd|d< i }t|g|d< i }t|d< | j|d< ttjj| jd|d< t| j| j| jd|d< i }t|d< tjj|d< t|g|d< ttjjt| d|d< t |S )N)keytypekeyvaluekeyprealm)z	name-typezname-stringpnameflags	starttimeendtimez
renew-tillsrealmsnamezticket-infoztkt-vnorealm)etypekvnocipherzenc-partpvnozmsg-typetickets)r_   ra   )!r	   rK   rL   rF   r
   rE   rD   r   IntegerBitStringr   castrH   rI   rJ   r@   r?   r>   r   r   r   SRV_INSTr/   r   rM   rN   r   r   KRB_CREDr   NULLr   dumpr   )r%   krbcredinfoenc_krbcredticketkrbcredr   r   r   to_asn1f   s.   





zKerberosTicket.to_asn1Nc                 C   sn  t  }||_| j|j|_| j|||_| j||_| j|r7| j|||_	| j|j|_
| j||_| j|||_| j|j|_| j||_| j||_t| j|_t| j|_| jdkr~tjdddddtjjd|_nt| j|_| j|_| j||_t| j||_| j|_| j|_| j|_| j ||_ |! }||j"|# < |S Nr   i  r)   )tzinfo$r<   r=   r>   r4   NameTyper?   r@   read_string
TargetNamerA   rB   rC   
ClientNamerD   rE   rF   rG   r   rH   rI   rJ   datetimetimezoneutcrK   rL   r    r:   rP   r   rM   rN   r   rn   rO   generate_filename)kerberos_ticketr8   r6   r=   ktkirbir   r   r   r:      s8   
zKerberosTicket.parsec                    s  t  }||_| j|I d H }|j|_| j|I d H }||I d H |_| j|I d H |_| j|I d H }|rZ| j|I d H }||I d H |_	| j|I d H }|j|_
| j|I d H |_| j|I d H }||I d H |_| j|I d H }|j|_| j|I d H |_| j|I d H |_t| j|_t| j|_| jdkrtjdddddtjjd|_nt| j|_| j|_| j|I d H |_t| j||_| j|_| j|_| j|_| j |I d H |_ |! }||j"|# < |S ro   rq   )rz   r8   r6   r=   r{   xyr|   r   r   r   aparse   sH   
zKerberosTicket.aparsec              
   C   sR   dd | jj| jd | jd | jt| j	 d d g }d|
dd S )Nz%s_   z%s.kirbiz..!)joinr=   namer@   rD   r>   hashlibsha1r   	hexdigestreplacerQ   r   r   r   ry      s   Bz KerberosTicket.generate_filenamec              	   C   sX   | j D ]&}ttj||d}|| j |   W d    n1 s$w   Y  qd S )Nwb)rO   openospathr   writeri   )r%   dirfilenamefr   r   r   to_kirbi   s   
zKerberosTicket.to_kirbic                 C   s  d}|d| j  7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d	| j 7 }|d
| j	  7 }|d| j
	  7 }|d| j	  7 }|d| j 7 }|d| j  7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j  7 }|d| jj  7 }|S )Nz== Kerberos Ticket ==
z	Type: %s
zServiceName: %s
zDomainName: %s
zETargetName: %s
zTargetDomainName: %s
zEClientName: %s
zAltTargetDomainName: %s
zDescription: %s
zStartTime: %s
zEndTime: %s
zRenewUntil: %s
zKeyType: %s
zKey: %s
zTicketFlags: %s
zTicketEncType: %s
zTicketKvno: %s
zTicket: %s
zSessionKey: %s
)r=   r>   r@   rA   rC   rD   rF   rG   rH   	isoformatrI   rJ   rK   rL   hexr   rM   rN   r   rP   r#   rQ   r   r   r   __str__   s(   zKerberosTicket.__str__r!   )r   r   r   r&   rS   rn   r;   r:   r   ry   r   r   r   r   r   r   r<   3   s    $+r<   )!rv   
asn1cryptor   pypykatz.commons.filetimer   pypykatz.commons.commonr   r   r   pypykatz.commons.win_datatypesr   r   "minikerberos.protocol.asn1_structsr	   r
   r   r   r   r   r   r   r   minikerberos.protocol.constantsr   r   r   r   r   r   Enumr   r    r<   r   r   r   r   <module>   s   ,