o
    �õ±jª  ã                   @   s¦   d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 ddg d¢dfdede
e d	ed
ede
e defdd„Zdd„ Zdd„ ZedkrQeƒ  dS dS )é    N)ÚKerberosClientFactoryÚkerberos_url_help_epilog)Ú
kerberoast)ÚList)é   é   é   FÚconnection_urlÚusersÚdomainÚout_fileÚetypesÚcross_domainc              
   Ã   sš  ��z2g }g }t  | ¡}t|tƒdu r|g}g }	|D ]2}
t|
tƒrLt |
¡ ¡ rGt|
dƒ�}|	 	| 
¡  ¡ ¡ W d   ƒ n1 sAw   Y  q|	 |
¡ qt|tƒdu rW|g}g }|D ]}t|tƒro| 	dd„ | d¡D ƒ¡ t|tƒry| |¡ q[|}|	}|d u rœ|D ]}| d¡dkr–| d¡d } nq„| ¡ j}|d u r¤td	ƒ‚g }|D ]}| d¡dkr¼| | d¡d
 ¡ q¨| |¡ q¨d }t|||||d�2 z3 d H W \}}}|d urâ| ||f¡ qÍ| ||f¡ qÍ6 |d u�rt|ddd��}|D ]\}}| |d ¡ qúW d   ƒ n	1 �sw   Y  |D ]\}}td||f ƒ �q|D ]	\}}t|ƒ �q(W d S  t�yL } zt ¡  W Y d }~d S d }~ww )NFÚrc                 S   s   g | ]}t |ƒ‘qS © )Úint)Ú.0Úxr   r   ú‘/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minikerberos/examples/spnroast.pyÚ
<listcomp>"   s    zspnroast.<locals>.<listcomp>ú,ú@éÿÿÿÿé   zNo domain specifiedr   )Úoverride_etyper   ÚwÚ )Únewlinez
z%s error: %s)r   Úfrom_urlÚ
isinstanceÚlistÚstrÚpathlibÚPathÚexistsÚopenÚextendÚreadÚ
splitlinesÚappendÚsplitr   ÚfindÚ	get_credsr   Ú	Exceptionr   ÚwriteÚprintÚ	tracebackÚ	print_exc)r	   r
   r   r   r   r   Ú
results_okÚresults_errÚcuÚusers_finalÚuserÚfÚetypes_finalÚetypeÚusernameÚusers_nodomainÚresÚerrÚ_ÚresultÚer   r   r   Úspnroast	   s€   €

ÿ€
€


€þ
$ü
ÿÿÿ€ÿrA   c                  Ã   s  �dd l } | jd| jtd�}|jddd� |jddd� |jd	d
dd� |jdddd� |jddddd� |jdddd� |jddddd� | ¡ }|jdkrWtjtj	d� n|jdkrdtjtj
d� ntjdd� t|jƒdkrwtdƒ d S t|j|j|j|j|j|jƒI d H  d S ) Nr   Ú
Kerberoast)ÚdescriptionÚformatter_classÚepilogÚkerberos_connection_urlzothe kerberos target string in the following format kerberos+<stype>://<domain>\<username>@<domaincontroller-ip>)Úhelpr   z6Realm. Use this if you specify username in "spn" fieldr
   Ú*zPUser/username to kerberoast. Can be a file with usernames, or a single username.)ÚnargsrG   z--cross-domainÚ
store_truezSPN is in another domain.)ÚactionrG   z-ez--etypesz23,17,18z*Encryption types to use. Default: 23,17,18)ÚdefaultrG   z-oz
--out-filez3Write results to this file instead of printing themz-vz	--verboseÚcount)rK   rL   )Úlevelr   z"Please provide users to kerberoast)ÚargparseÚArgumentParserÚRawDescriptionHelpFormatterr   Úadd_argumentÚ
parse_argsÚverboseÚloggingÚbasicConfigÚINFOÚDEBUGÚlenr
   r/   rA   rF   r   r   r   r   )rO   ÚparserÚargsr   r   r   ÚamainO   s(   €

(r\   c                   C   s   t  tƒ ¡ d S )N)ÚasyncioÚrunr\   r   r   r   r   Úmaini   s   r_   Ú__main__)rU   r]   r0   r"   Úminikerberos.common.factoryr   r   Úminikerberos.securityr   Útypingr   r!   r   ÚboolrA   r\   r_   Ú__name__r   r   r   r   Ú<module>   s    8F
ÿ