o
    j!                     @   s,  d dl mZ d dlZd dlZd dlZd dlmZmZ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 d d
lmZ d dlmZmZ d dlmZ d,ddZd,ddZdd Zdd Zd-ddZ dd Z!dd Z"dd Z#d.ddZ$d-d d!Z%d/d#d$Z&d0d&d'Zd0d(d)Z'd*d+ Z(dS )1    )loggerN)krb5userenum
asreproast
kerberoast)KerberosClientFactory)KerberosSPN)KerberosCredential)KerberosTarget)Keytab)AIOKerberosClient)print_table)CCACHE
Credential)KirbiTc                 C   s   t  }|du r
t }|  }|dkrd S |d}|dkr/|d ur)||_||_|S td| |dd\|_|_|d ur@||_|S )NF @zFUser %s is missing realm specification and no global realm is defined!   )r   r   stripfindusernamedomain	Exceptionsplit)targetrealmto_spnspnlinem r    /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/kerberos/kerberos.pyprocess_target_line   s"   
	r"   c              	   C   s   g }| D ]I}|  }zt|d W n   t|||d}|r#|| Y qt|d}|D ]}t|||d}|r=|| q-W d   n1 sHw   Y  q|S )za
	Takes a list of files or strings and generates a list of targets in <username>@<realm> format
	r)r   r   N)r   openr"   append)targetsr   r   resultsr   xfr   r    r    r!   generate_targets)   s(   

r*   c                 C   sJ   t | d}t| }tt| W d    d S 1 sw   Y  d S )Nrb)r$   r
   
from_bytesreadprintstr)keytablfiler)   ktr    r    r!   process_keytab>   s   "r2   c                 C   sd   t | }g }|dgt   d}|jD ]}|t|g|   |d7 }qt  t	| d S )Nidr   r   )
r   	from_filer%   r   summary_headercredentialsr/   summaryr.   r   )
ccachefilecctableicredr    r    r!   list_ccacheC   s   


r=   c                 C   sx   t | }|r/t|d}| D ]}|| d  qW d    d S 1 s(w   Y  d S | D ]}t| q3d S )Nwbs   
)r   r4   r$   
get_hasheswriteencoder.   )r8   outfiler9   r)   hr    r    r!   roast_ccacheN   s   
"
rD   c                 C   s   t jt jt j| dt|  }t| }t }|j	|_	|j
|_
|j|_|j|_t|jD ]\}}||kr:q1|j| q1td|  || d S )Nz%s.edited.ccachezWriting edited file to %s)ospathjoindirnameabspathntpathbasenamer   r4   file_format_version	headerlenheadersprimary_principal	enumerater6   r%   r   infoto_file)r8   indexoutput_filenamer9   temp_ccr;   r<   r    r    r!   
del_ccacheX   s   (
rV   c                 C   s,   t | }td || td d S )NzExtracting kirbi file(s)zDone!)r   r4   r   rQ   to_kirbidir)r8   kirbidirr9   r    r    r!   ccache_to_kirbij   s   


rY   c                 C   s   zt | }W n ty   t  }Y nw tj|}tj|r7td|  t		|d D ]}|
| q.n|
| ||  d S )Nz#Parsing kirbi files in directory %sz*.kirbi)r   r4   FileNotFoundErrorrE   rF   rI   isdirr   rQ   glob	add_kirbirR   )r8   kirbir9   abs_path	kirbifiler    r    r!   kirbi_to_ccachep   s   

ra   c              
      s   z^t d t|tr|g}t| }t|}t d|   t d |	 }|
 I d H  t d |j||dI d H \}}}t||}	|d urS|	| t d ||||	d fW S  tyx }
 zd d d d |
fW  Y d }
~
S d }
~
ww )Nz[KERBEROS][TGS] startedz[KERBEROS][TGS] target user: %sz[KERBEROS][TGS] fetching TGTz[KERBEROS][TGS] fetching TGSoverride_etypez[KERBEROS][TGS] done!)r   debug
isinstanceintr   from_urlr   from_user_emailget_formatted_pname
get_clientget_TGTget_TGSr   from_ticketdatarR   r   )urlr   out_filerc   kukcommtgsencTGSRepPartkeyr^   er    r    r!   rl      s,   







rl   c              
      s   zHt d t|tr|g}t| }| }| }t d|  t d|  t||}t d |j	|dI d H  t
|j|j}|d fW S  ty_ } z
d |fW  Y d }~S d }~ww )Nz[KERBEROS][TGT] startedz[KERBEROS][TGT] cred: %sz[KERBEROS][TGT] target: %sz[KERBEROS][TGT] fetching TGTrb   )r   rd   re   rf   r   rg   	get_creds
get_targetr   rk   r   rm   kerberos_TGTkerberos_TGT_encpartr   )rn   rc   rp   r<   r   rq   r^   ru   r    r    r!   rk      s&   





rk   Fc              
      s   z_t d t| }dd |D }|d j}t|||2 z:3 dH W \}}}	}
|
dur,q|du rW|rOt|d}||d  W d   n1 sIw   Y  qtd	t|  q6 t 	d
 W dS  t
yv } z
d|fW  Y d}~S d}~ww )
	targets List<KerberosSPN>

	z+[KERBEROS][BRUTE] User enumeration startingc                 S      g | ]}|j qS r    r   .0r(   r    r    r!   
<listcomp>       zbrute.<locals>.<listcomp>r   NTa
z[+] Enumerated user: %sz+[KERBEROS][BRUTE] User enumeration finishedNN)r   rd   r	   r   r   r$   r@   r.   r/   rQ   r   )hostr&   ro   show_negativesr   	enumusersr   r   result_errr)   ru   r    r    r!   brute   s0   

 

r      c              
      s  zqt d t dt|  dd |D }|d j}t| }g }t||||2 z3 dH W \}}	}
|	dur=|t|	 q)6 |ret|ddd	}|D ]	}||d
  qKW d   n1 s_w   Y  nt	|	 t 
d |dfW S  ty } z
d|fW  Y d}~S d}~ww )rz   z"[KERBEROS][ASREPROAST] Roasting...zC[KERBEROS][ASREPROAST] Supporting the following encryption type: %sc                 S   r{   r    r|   r}   r    r    r!   r      r   zasreproast.<locals>.<listcomp>r   Nr   r   newliner   z[KERBEROS][ASREPROAST] Done!)r   rd   r/   r   r	   r   r%   r$   r@   r.   rQ   r   )r   r&   ro   etype	usernamesr   kshashesr   rC   r   r)   thashru   r    r    r!   r      s6   

 

r   c              
      sD  zt d |r|dkrg d}n|g}ng d}t dddd |D   dd	 |D }|d
 j}t| }g }t||||2 z3 dH W \}	}
}||
 qC6 |ryt|ddd}|D ]	}|	|d  q_W d   n1 ssw   Y  n	|D ]}t
| q{t d |dfW S  ty } z
d|fW  Y d}~S d}~ww )rz   z [KERBEROS][SPNROAST] Roasting...r   )r         z?[KERBEROS][SPNROAST] Using the following encryption type(s): %s,c                 s   s    | ]}t |V  qd S N)r/   r}   r    r    r!   	<genexpr>   s    zspnroast.<locals>.<genexpr>c                 S   r{   r    r|   r}   r    r    r!   r      r   zspnroast.<locals>.<listcomp>r   Nwr   r   r   z[KERBEROS][SPNROAST] Done!)r   rd   rG   r   r   rg   r   r%   r$   r@   r.   rQ   r   )rn   r&   ro   r   etypesktargetskdomainrp   r   r   rC   r   r)   r   ru   r    r    r!   spnroast   s>   



 


r   c                    s  zt d t| }| }| }t|}t|}|j	sFt d t
||}| I d H  t d |||I d H }	|	\}
}}nSt d |j	 D ]H\}}z*t dd|d d   t
|||}|||I d H }	|	\}
}}t d	 W n ty } zt d
|  W Y d }~qPd }~ww  t d t|
|}|
|||d fW S  ty } zd d d d |fW  Y d }~S d }~ww )Nz[KERBEROS][S4U] Startedz[KERBEROS][S4U] Getting TGTz[KERBEROS][S4U] Getting STz/[KERBEROS][S4U] Getting TGS via TGT from CCACHEz)[KERBEROS][S4U] Trying to get SPN with %s!cnamezname-stringz[KERBEROS][S4U] Sucsess!z=[KERBEROS][S4U] This ticket is not usable it seems Reason: %sz[KERBEROS][S4U] Done!)r   rd   r   rg   rv   rw   r   from_target_stringrh   ccacher   rk   getSTget_all_tgtrG   from_tgtr   r   rm   )rn   r   
targetusercuccredr   service_spntarget_userclientresrr   rs   rt   tgtru   r^   r    r    r!   s4u  sH   









r   )NTr   r   )NF)Nr   ))pypykatzr   rE   rJ   r\   minikerberos.securityr   r   r   minikerberos.common.factoryr   minikerberos.common.spnr   minikerberos.common.credsr   minikerberos.common.targetr	   minikerberos.common.keytabr
   minikerberos.aioclientr   minikerberos.common.utilsr   minikerberos.common.ccacher   r   minikerberos.common.kirbir   r"   r*   r2   r=   rD   rV   rY   ra   rl   rk   r   r   r   r    r    r    r!   <module>   s8   








'