o
    j                     @   s   d dl Z d dlZzd dlmZmZmZ W n ey'   d dlmZmZmZ Y nw 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)HTTPConnectionHTTPSConnectionResponseNotReady)unpack)LOG)ProtocolClient)STATUS_SUCCESSSTATUS_ACCESS_DENIED)NTLMAuthChallenge)SPNEGO_NegTokenRespHTTPRelayClientHTTPSRelayClientc                   @   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   HTTPP   Tc                 C   s4   t | |||| || _d | _d | _d | _d | _d S N)r   __init__extendedSecuritynegotiateMessageauthenticateMessageBlobserverauthenticationMethodselfserverConfigtarget
targetPortr    r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/examples/ntlmrelayx/clients/httprelayclient.pyr   '   s   
zHTTPRelayClient.__init__c                 C   sB   t | j| j| _d | _| jjdkrd| _n| jj| _| jj| _dS )N /T)r   
targetHostr   session
lastresultr   pathqueryr   r   r   r   initConnection/   s   

zHTTPRelayClient.initConnectionc              
   C   s  | j r| jd| jd | j   n| jd| j | j }|  |jdkr/td|j  z2d|	dvrKd|	dvrKt
d|	d  W d	S d|	dv rVd| _n
d|	dv r`d| _W n# ttfy   t
d
| j  | jjrtd d| _nY d	S Y nw t|d}dd| j|f i}| j r| jjd| jd | j  |d n
| jjd| j|d | j }|  ztd| j |	dd}t|}t }|| |W S  tttfy   t
d Y d	S w )NGET?  zGStatus code returned: %d. Authentication does not seem required for URLNTLMzWWW-Authenticate	Negotiatez3NTLM Auth not offered by URL, offered protocols: %sFz4No authentication requested by the server for url %szMIIS cert server may allow anonymous authentication, sending NTLM auth anywaysasciiAuthorization%s %sheadersz%s ([a-zA-Z0-9+/]+={0,2})   z&No NTLM challenge returned from server)r$   r!   requestr#   getresponsereadstatusr   info	getheadererrorr   KeyError	TypeErrorr    r   isADCSAttackbase64	b64encodedecoderesearchgroup	b64decoder
   
fromString
IndexErrorAttributeError)r   r   res	negotiater0   serverChallengeBase64serverChallenge	challenger   r   r   sendNegotiate9   sR   


	 



zHTTPRelayClient.sendNegotiateNc                 C   s   t d|d d d tjkrt|}|d }n|}t|d}dd| j|f i}| jr=| jj	d| j
d	 | j |d
 n
| jj	d| j
|d
 | j }|jdkrUd tfS td|j  | | _d tfS )NBr1   r   ResponseTokenr,   r-   r.   r'   r(   r/   r)   zBHTTP server returned error code %d, treating as a successful login)r   r   SPNEGO_NEG_TOKEN_RESPr<   r=   r>   r   r$   r!   r2   r#   r3   r5   r	   r   r6   r4   r"   r   )r   r   rI   
respToken2tokenauthr0   rF   r   r   r   sendAuthf   s   
 


zHTTPRelayClient.sendAuthc                 C   s"   | j d ur| j   d | _ d S d S r   )r!   closer%   r   r   r   killConnection{   s   


zHTTPRelayClient.killConnectionc                 C   s   | j dd | j   d S )NHEADz/favicon.ico)r!   r2   r3   r%   r   r   r   	keepAlive   s   zHTTPRelayClient.keepAlive)r   Tr   )
__name__
__module____qualname__PLUGIN_NAMEr   r&   rK   rR   rT   rV   r   r   r   r   r   $   s    


-c                   @   s"   e Zd ZdZd	ddZdd ZdS )
r   HTTPS  Tc                 C   s   t | |||| d S r   )r   r   r   r   r   r   r      s   zHTTPSRelayClient.__init__c                 C   sz   d | _ | jjdkrd| _n| jj| _| jj| _zttj}t| j| j	|d| _
W dS  ty<   t| j| j	| _
Y dS w )Nr   r   )contextT)r"   r   r#   r$   ssl
SSLContextPROTOCOL_SSLv23r   r    r   r!   rE   )r   
uv_contextr   r   r   r&      s   

zHTTPSRelayClient.initConnectionN)r\   T)rW   rX   rY   rZ   r   r&   r   r   r   r   r      s    
)r?   r^   http.clientr   r   r   ImportErrorhttplibr<   structr   impacketr   $impacket.examples.ntlmrelayx.clientsr   impacket.nt_errorsr   r	   impacket.ntlmr
   impacket.spnegor   PROTOCOL_CLIENT_CLASSESr   r   r   r   r   r   <module>   s"   a