o
    àý°j  ã                
   @   s¢  d dl mZ d dl mZ d dlZ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 G dd„ dƒZedk�rOee	jƒ ejddd�Zejdddd� ejdddd� ejdddd� e d¡Zejddddd� ejddd d� ejd!dd"d� ejd#dd$d%d� ejd&dd'd(d� ejd)dd*d+d� ejd,d-d.d/„ dejjd0d1� eej ƒd2krÖe !¡  ed3ƒ ed4ƒ ed5ƒ e "d2¡ e #¡ Z$e %e$j&e$j'¡ ee$j(e$j)e$j*e$j+e$j,ƒ\Z-Z.Z/Z0Z0e$_,e-du �re 1d6¡ e "d2¡ e$j2du �re 1d7¡ e "d2¡ zee.e/e-e$ƒZ3e3 4¡  W dS  e5�yN Z6 ze 7¡ j8ej9k�r=d dl:Z:e: ;¡  ee<e6ƒƒ W Y dZ6[6dS dZ6[6ww dS )8é    )Údivision)Úprint_functionN)Ú	unhexlify)Úversion)Úlogger)Úparse_identity)ÚgetKerberosTGT)Ú	constants)Ú	Principalc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚGETTGTc                 C   sb   || _ || _|| _d| _d| _|j| _|| _|j| _	|j
| _|jd ur/|j d¡\| _| _d S d S )NÚ ú:)Ú_GETTGT__passwordÚ_GETTGT__userÚ_GETTGT__domainÚ_GETTGT__lmhashÚ_GETTGT__nthashÚaesKeyÚ_GETTGT__aesKeyÚ_GETTGT__optionsÚdc_ipÚ_GETTGT__kdcHostÚserviceÚ_GETTGT__serviceÚhashesÚsplit)ÚselfÚtargetÚpasswordÚdomainÚoptions© r!   ú†/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/../../../bin/getTGT.pyÚ__init__&   s   
ÿzGETTGT.__init__c                 C   sH   t  d| jd  ¡ ddlm} |ƒ }| |||¡ | | jd ¡ d S )NzSaving ticket in %sz.ccacher   )ÚCCache)ÚloggingÚinfor   Úimpacket.krb5.ccacher$   ÚfromTGTÚsaveFile)r   ÚticketÚ
sessionKeyr$   Úccacher!   r!   r"   Ú
saveTicket3   s
   zGETTGT.saveTicketc              
   C   sX   t | jtjjd�}t|| j| jt| j	ƒt| j
ƒ| j| j| jd�\}}}}|  ||¡ d S )N)Útype)Ú
clientNamer   r   ÚlmhashÚnthashr   ÚkdcHostÚ
serverName)r
   r   r    ÚprincipalTypeÚvaluer   r   r   r   r   r   r   r   r   r-   )r   ÚuserNameÚtgtÚcipherÚoldSessionKeyr+   r!   r!   r"   Úrun;   s   ùz
GETTGT.runN)Ú__name__Ú
__module__Ú__qualname__r#   r-   r:   r!   r!   r!   r"   r   %   s    r   Ú__main__TzMGiven a password, hash or aesKey, it will request a TGT and save it as ccache)Úadd_helpÚdescriptionÚidentityÚstorez[domain/]username[:password])ÚactionÚhelpz-tsÚ
store_truez&Adds timestamp to every logging outputz-debugzTurn DEBUG output ONÚauthenticationz-hasheszLMHASH:NTHASHz$NTLM hashes, format is LMHASH:NTHASH)rC   ÚmetavarrD   z-no-passz&don't ask for password (useful for -k)z-kzÁUse Kerberos authentication. Grabs credentials from ccache file (KRB5CCNAME) based on target parameters. If valid credentials cannot be found, it will use the ones specified in the command linez-aesKeyzhex keyz<AES key to use for Kerberos Authentication (128 or 256 bits)z-dc-ipz
ip addresszoIP Address of the domain controller. If ommited it use the domain part (FQDN) specified in the target parameterz-serviceÚSPNz3Request a Service Ticket directly through an AS-REQz-principalTypeú?c                 C   s"   |   ¡ tjjv rtj|   ¡  S d S )N)Úupperr	   ÚPrincipalNameTypeÚ__members__)r5   r!   r!   r"   Ú<lambda>\   s   " rM   a  PrincipalType of the token, can be one of  NT_UNKNOWN, NT_PRINCIPAL, NT_SRV_INST, NT_SRV_HST, NT_SRV_XHST, NT_UID, NT_SMTP_NAME, NT_ENTERPRISE, NT_WELLKNOWN, NT_SRV_HST_DOMAIN, NT_MS_PRINCIPAL, NT_MS_PRINCIPAL_AND_ID, NT_ENT_PRINCIPAL_AND_ID; default is NT_PRINCIPAL, )Únargsr.   rC   ÚdefaultrD   é   z
Examples: z,	./getTGT.py -hashes lm:nt contoso.com/user
ze	it will use the lm:nt hashes for authentication. If you don't specify them, a password will be askedzDomain should be specified!zInvalid principalType!)=Ú
__future__r   r   Úargparser%   ÚsysÚbinasciir   Úimpacketr   Úimpacket.examplesr   Úimpacket.examples.utilsr   Úimpacket.krb5.kerberosv5r   Úimpacket.krb5r	   Úimpacket.krb5.typesr
   r   r;   ÚprintÚBANNERÚArgumentParserÚparserÚadd_argumentÚadd_argument_groupÚgrouprK   ÚNT_PRINCIPALÚlenÚargvÚ
print_helpÚexitÚ
parse_argsr    ÚinitÚtsÚdebugrA   r   Úno_passr   Úkr   Úusernamer   Ú_Úcriticalr4   Úexecuterr:   Ú	ExceptionÚeÚ	getLoggerÚlevelÚDEBUGÚ	tracebackÚ	print_excÚstrr!   r!   r!   r"   Ú<module>   sj   
"


(




€üÑ