o
    j                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZmZ d dlmZ dZG dd	 d	eZG d
d deZdS )    N)ProtocolClient)
MSSQL
DummyPrintTDS_ENCRYPT_OFF	TDS_LOGINTDS_INIT_LANG_FATALTDS_ODBC_ONTDS_INTEGRATED_SECURITY_ON
TDS_LOGIN7TDS_SSPITDS_LOGINACK_TOKEN)NTLMAuthChallenge)STATUS_SUCCESSSTATUS_ACCESS_DENIED)SPNEGO_NegTokenRespMSSQLRelayClientc                   @   s>   e Zd Zde fddZdd Zdd Zdd	d
Zdd ZdS )MYMSSQL  c                 C   s    t | ||| d | _i | _d S N)r   __init__respsessionData)selfaddressportrowsPrinter r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/examples/ntlmrelayx/clients/mssqlrelayclient.pyr   '   s   
zMYMSSQL.__init__c                 C   s   |    |  | _dS NT)connect_negotiate_encryptionr   r   r   r   r   initConnection,   s   
zMYMSSQL.initConnectionc                 C   s  t  }|  |d< | |d  ddd tdD d|d< ddd tdD d|d	< | jd|d
< |d	 |d< tdd|d< | j	|d< t
tB tB |d< ||d< t| |d< | t|  | jsv| jd tkrvd | _|  }|| jd< t }||d dd   |S )N
TDSVersion c                 S      g | ]}t tjqS r   randomchoicestringascii_letters.0_r   r   r   
<listcomp>6       z)MYMSSQL.sendNegotiate.<locals>.<listcomp>   zutf-16leHostNamec                 S   r%   r   r&   r+   r   r   r   r.   7   r/   AppName
ServerName
CltIntNamer   i   	ClientPID
PacketSizeOptionFlags2SSPILength
EncryptionNTLM_CHALLENGEData   )r   _get_default_login7_tds_version_set_session_login7_tds_versionjoinrangeencodeserverr'   randint
packetSizer   r   r	   lengetDatasendTDSr
   tds8r   r   	tlsSocketrecvTDSr   r   
fromString)r   negotiateMessagelogintds	challenger   r   r   sendNegotiate1   s(   ""

zMYMSSQL.sendNegotiateNc                 C   s   t d|d d d tjkrt|}|d }n|}| t| |  }| |d | _t	| jv r:|| j
d< d tfS |   d tfS )NB   r   ResponseTokenr<   AUTH_ANSWER)structunpackr   SPNEGO_NEG_TOKEN_RESPrH   r   rK   
parseReplyrepliesr   r   r   printRepliesr   )r   authenticateMessageBlobserverChallenge
respToken2tokenrO   r   r   r   sendAuthS   s   


zMYMSSQL.sendAuthc                 C   s   |   S r   )
disconnectr!   r   r   r   closed   s   zMYMSSQL.closer   )	__name__
__module____qualname__r   r   r"   rQ   r`   rb   r   r   r   r   r   &   s    
"r   c                   @   s\   e Zd ZdZdddZdd Zdd	 Zd
d Zdd ZdddZ	dd Z
dd Zdd ZdS )r   r   r   Tc                 C   s.   t | |||| || _d | _d | _d | _d S r   )r   r   extendedSecuritydomainIpmachineAccountmachineHashes)r   serverConfig
targetHost
targetPortrf   r   r   r   r   k   s
   
zMSSQLRelayClient.__init__c                 C   s   t | j| j| _| j  dS r   )r   rk   rl   sessionr"   r!   r   r   r   r"   s   s   
zMSSQLRelayClient.initConnectionc                 C   s   d S r   r   r!   r   r   r   	keepAlivex   s   zMSSQLRelayClient.keepAlivec                 C   s"   | j d ur| j   d | _ d S d S r   )rm   ra   r!   r   r   r   killConnection|   s   


zMSSQLRelayClient.killConnectionc                 C      | j |S r   )rm   rQ   )r   rM   r   r   r   rQ         zMSSQLRelayClient.sendNegotiateNc                 C   s   | j j| _| j ||S r   )rm   r   r`   )r   r\   r]   r   r   r   r`      s   
zMSSQLRelayClient.sendAuthc                 C   rp   r   )rm   batch)r   queryr   r   r   	sql_query   rq   zMSSQLRelayClient.sql_queryc                 C   
   | j  S r   )rm   r[   r!   r   r   r   r[         
zMSSQLRelayClient.printRepliesc                 C   ru   r   )rm   	printRowsr!   r   r   r   rw      rv   zMSSQLRelayClient.printRows)r   Tr   )rc   rd   re   PLUGIN_NAMEr   r"   rn   ro   rQ   r`   rt   r[   rw   r   r   r   r   r   h   s    

)rV   r'   r)   $impacket.examples.ntlmrelayx.clientsr   impacket.tdsr   r   r   r   r   r   r	   r
   r   r   impacket.ntlmr   impacket.nt_errorsr   r   impacket.spnegor   PROTOCOL_CLIENT_CLASSr   r   r   r   r   r   <module>   s   0B