o
    àý°jÛ  ã                   @   sˆ   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d	gZG d
d„ deƒZG dd	„ d	eƒZdS )é    N)Úunpack)ÚLOG)ÚProtocolClient)ÚSTATUS_SUCCESSÚSTATUS_ACCESS_DENIED)ÚNTLMAuthChallenge)ÚSPNEGO_NegTokenRespÚIMAPRelayClientÚIMAPSRelayClientc                   @   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	   ÚIMAPé�   Tc                 C   ó   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/imaprelayclient.pyr   "   ó   zIMAPRelayClient.__init__c                 C   óR   t  | j| j¡| _| j ¡ | _t dt	| jj
ƒ ¡ d| jj
vr't d¡ dS dS ©NzIMAP CAPABILITIES: %sz	AUTH=NTLMz1IMAP server does not support NTLM authentication!FT)ÚimaplibÚIMAP4Ú
targetHostr   ÚsessionÚ_new_tagÚauthTagr   ÚdebugÚstrÚcapabilitiesÚerror©r   r   r   r   ÚinitConnection%   ó   
zIMAPRelayClient.initConnectionc              
   C   s´   t  |¡}| j d| jtjf ¡ | j ¡  ¡ }|dkr%t	 
d| ¡ dS | j |tj ¡ z| j ¡  ¡ dd … }t  |¡}tƒ }| |¡ |W S  tttfyY   t	 
d¡ ‚ w )Nz%s AUTHENTICATE NTLM%sú+z5IMAP Client error, expected continuation (+), got %s Fé   z+No NTLM challenge returned from IMAP server)Úbase64Ú	b64encoder   Úsendr    r   ÚCRLFÚreadlineÚstripr   r$   Ú	b64decoder   Ú
fromStringÚ
IndexErrorÚKeyErrorÚAttributeError)r   ÚnegotiateMessageÚ	negotiateÚrespÚserverChallengeBase64ÚserverChallengeÚ	challenger   r   r   ÚsendNegotiate.   s"   



þzIMAPRelayClient.sendNegotiateNc                 C   s”   t d|d d… ƒd tjkrt|ƒ}|d }n|}t |¡}| j |tj ¡ | j 	| j
¡\}}|dkr<d| j_d tfS t dd |¡ ¡ d tfS )	NÚBé   r   ÚResponseTokenÚOKÚAUTHzIMAP: %sú )r   r   ÚSPNEGO_NEG_TOKEN_RESPr*   r+   r   r,   r   r-   Ú_get_tagged_responser    Ústater   r   r$   Újoinr   )r   ÚauthenticateMessageBlobr9   Ú
respToken2ÚtokenÚauthÚtypÚdatar   r   r   ÚsendAuthA   s   

zIMAPRelayClient.sendAuthc                 C   s"   | j d ur| j  ¡  d | _ d S d S r   )r   Úlogoutr%   r   r   r   ÚkillConnectionQ   s   


þzIMAPRelayClient.killConnectionc                 C   s   | j  ¡  d S r   )r   Únoopr%   r   r   r   Ú	keepAliveV   s   zIMAPRelayClient.keepAlive)r   Tr   )
Ú__name__Ú
__module__Ú__qualname__ÚPLUGIN_NAMEr   r&   r;   rL   rN   rP   r   r   r   r   r	      s    
	
c                   @   s"   e Zd ZdZd	dd„Zdd„ ZdS )
r
   ÚIMAPSéá  Tc                 C   r   r   r   )r   r   r   r   r   r   r   r   r   ]   r   zIMAPSRelayClient.__init__c                 C   r   r   )r   Ú	IMAP4_SSLr   r   r   r   r    r   r!   r"   r#   r$   r%   r   r   r   r&   `   r'   zIMAPSRelayClient.initConnectionN)rV   T)rQ   rR   rS   rT   r   r&   r   r   r   r   r
   Z   s    
)r   r*   Ústructr   Úimpacketr   Ú$impacket.examples.ntlmrelayx.clientsr   Úimpacket.nt_errorsr   r   Úimpacket.ntlmr   Úimpacket.spnegor   ÚPROTOCOL_CLIENT_CLASSESr	   r
   r   r   r   r   Ú<module>   s   ;