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*.