o
    �õ±jÉ  ã                   @   sD  d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZ d d	lmZmZmZmZmZmZmZ d d
lmZ d dlmZmZ d dlmZ d dl m!Z! dedee" de"fdd„Z#g d¢dfde!dee" de"dee$ de%f
dd„Z&g d¢fdedee" de"dee$ fdd„Z'dS )é    N)Úlogger)ÚAIOKerberosClient)ÚAIOKerberosClientSocket)ÚKerberosSPN)ÚKerberosTarget)ÚKerberosCredential)ÚTGSTicket2hashcatÚTGTTicket2hashcat)ÚPrincipalNameÚ
KDCOptionsÚPADATA_TYPEÚPA_PAC_REQUESTÚ	krb5_pvnoÚKDC_REQ_BODYÚAS_REQ)ÚKerberosErrorCode)Ú	NAME_TYPEÚMESSAGE_TYPE)ÚList)ÚKerberosClientFactoryÚtargetÚ	usernamesÚdomainc                 C  s–   �dt dt fdd„}|D ]<}t| ƒ}|||ƒ}|j| ¡ dd�I d H }|jdkr0|d|d fV  q|jd	 tjjkrA|d|d fV  q|d|d fV  qd S )
NÚusernamer   c                 S   s  t j  t jj¡ }}i }ttg d¢ƒƒ|d< ttjj	| gdœƒ|d< | 
¡ |d< ttjj	d| 
¡ gdœƒ|d< |t jdd	� jd
d�|d< |t jdd	� jd
d�|d< t d¡|d< g d¢|d< i }ttdƒƒ|d< tddiƒ ¡ |d< i }t|d< tjj	|d< |g|d< t|ƒ|d< t|ƒS )N)ÚforwardableÚ	renewableÚ	proxiablezkdc-options)z	name-typezname-stringÚcnameÚrealmÚkrbtgtÚsnameé   )Údaysr   )ÚmicrosecondÚtillÚrtimeé   Únonce©é   é   é   ÚetypezPA-PAC-REQUESTzpadata-typezinclude-pacTzpadata-valueÚpvnozmsg-typeÚpadatazreq-body)ÚdatetimeÚnowÚtimezoneÚutcr   Úsetr
   r   Ú	PRINCIPALÚvalueÚupperÚ	timedeltaÚreplaceÚsecretsÚrandbitsÚintr   r   Údumpr   r   Ú
KRB_AS_REQr   r   )r   r   r0   Úkdc_req_bodyÚ	pa_data_1Úkdc_req© rA   úˆ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minikerberos/security.pyÚconstruct_tgt_req   s&   
z'krb5userenum.<locals>.construct_tgt_reqF)ÚthrowÚ	KRB_ERRORTz
error-code)	Ústrr   Úsendrecvr<   ÚnameÚnativer   ÚKDC_ERR_PREAUTH_REQUIREDr5   )r   r   r   rC   r   ÚksocÚreqÚreprA   rA   rB   Úkrb5userenum   s   €

òrN   r(   FÚfactoryÚoverride_etypeÚcross_domainc                 C  s  �t |tƒs	|g}t |tƒs|g}|D ]l}zE|  ¡ }|j|dd�I d H  t d||f ¡}|}|du rD| |j¡I d H \}	}	}	}
|
 ¡ }|j||d�I d H \}}	}	|t	|ƒd fV  W q t
y } zt d|t|ƒf ¡ |d t|ƒfV  W Y d }~qd }~ww d S )NF©rP   Údecrypt_tgtz%s@%sT)rP   z0Failed to get TGS ticket for user %s! Reason: %s)Ú
isinstanceÚlistÚ
get_clientÚget_TGTr   Úfrom_upnÚget_referral_ticketr   Úget_TGSr   Ú	Exceptionr   ÚdebugrF   )rO   r   r   rP   rQ   r   ÚkcommÚspnÚkcommnewÚ_Únew_factoryÚtgsÚerA   rA   rB   Ú
kerberoast?   s,   €

€þôrd   c                 C  sÂ   �t |tƒs	|g}t |tƒs|g}|D ]K}z#tƒ }||_||_t|| ƒ}|j|dd�I d H  |t|jƒd fV  W q t	y^ } zt
 d|j|jt|ƒf ¡ |d |fV  W Y d }~qd }~ww d S )NFrR   z,Error while roasting client %s/%s Reason: %s)rT   rU   r   r   r   r   rW   r	   Úkerberos_TGTr[   r   r\   rF   )r   r   r   rP   r   Úcredr]   rc   rA   rA   rB   Ú
asreproastV   s&   €


€þørg   )(r/   r9   Úminikerberosr   Úminikerberos.aioclientr   Ú$minikerberos.network.aioclientsocketr   Úminikerberos.common.spnr   Úminikerberos.common.targetr   Úminikerberos.common.credsr   Úminikerberos.common.utilsr   r	   Ú"minikerberos.protocol.asn1_structsr
   r   r   r   r   r   r   Úminikerberos.protocol.errorsr   Úminikerberos.protocol.constantsr   r   Útypingr   Úminikerberos.common.factoryr   rF   rN   r;   Úboolrd   rg   rA   rA   rA   rB   Ú<module>   s$    $0*.