o
    àý°jž  ã                   @   sv   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	m
Z
 d dlmZ d dlmZ dgZG d	d„ deƒZdS )
é    N)Úunpack)ÚLOG)ÚProtocolClient)ÚSTATUS_SUCCESSÚSTATUS_ACCESS_DENIED)ÚNTLMAuthChallenge)ÚSPNEGO_NegTokenRespÚSMTPRelayClientc                   @   sD   e Zd ZdZddd„Zdd„ Zdd	„ Zddd„Zdd„ Zdd„ Z	d
S )r	   ÚSMTPé   Tc                 C   s   t  | ||||¡ d S ©N)r   Ú__init__)ÚselfÚserverConfigÚtargetÚ
targetPortÚextendedSecurity© r   ú§/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/examples/ntlmrelayx/clients/smtprelayclient.pyr   "   s   zSMTPRelayClient.__init__c                 C   s:   t  | j| j¡| _| j ¡  d| jjvrt d¡ dS dS )Nú	AUTH NTLMz1SMTP server does not support NTLM authentication!FT)	Úsmtplibr
   Ú
targetHostr   ÚsessionÚehloÚ	ehlo_respr   Úerror©r   r   r   r   ÚinitConnection%   s   

zSMTPRelayClient.initConnectionc              
   C   sž   t  |¡}| j d¡ | j ¡ \}}|dkr!t d||f ¡ dS | j |¡ z| j ¡ \}}t  |¡}tƒ }| 	|¡ |W S  t
ttfyN   t d¡ ‚ w )Nr   iN  z:SMTP Client error, expected 334 NTLM supported, got %d %s Fz+No NTLM challenge returned from SMTP server)Úbase64Ú	b64encoder   ÚputcmdÚgetreplyr   r   Ú	b64decoder   Ú
fromStringÚ
IndexErrorÚKeyErrorÚAttributeError)r   ÚnegotiateMessageÚ	negotiateÚcodeÚrespÚserverChallengeBase64ÚserverChallengeÚ	challenger   r   r   ÚsendNegotiate0   s"   



þzSMTPRelayClient.sendNegotiateNc                 C   sŠ   t d|d d… ƒd tjkrt|ƒ}|d }n|}t |¡}| j |¡ | j ¡ \}}|dkr7d| j_d t	fS t
 dd |¡ ¡ d tfS )	NÚBé   r   ÚResponseTokenéë   ÚAUTHzSMTP: %sÚ )r   r   ÚSPNEGO_NEG_TOKEN_RESPr   r   r   r    r!   Ústater   r   r   Újoinr   )r   ÚauthenticateMessageBlobr,   Ú
respToken2ÚtokenÚauthÚtypÚdatar   r   r   ÚsendAuthC   s   

zSMTPRelayClient.sendAuthc                 C   s"   | j d ur| j  ¡  d | _ d S d S r   )r   Úcloser   r   r   r   ÚkillConnectionS   s   


þzSMTPRelayClient.killConnectionc                 C   s   | j  ¡  d S r   )r   Únoopr   r   r   r   Ú	keepAliveX   s   zSMTPRelayClient.keepAlive)r   Tr   )
Ú__name__Ú
__module__Ú__qualname__ÚPLUGIN_NAMEr   r   r.   r>   r@   rB   r   r   r   r   r	      s    

)r   r   Ústructr   Úimpacketr   Ú$impacket.examples.ntlmrelayx.clientsr   Úimpacket.nt_errorsr   r   Úimpacket.ntlmr   Úimpacket.spnegor   ÚPROTOCOL_CLIENT_CLASSESr	   r   r   r   r   Ú<module>   s   