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   ;