o
    àý°jî)  ã                   @   s°   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ G d
d„ deƒZdS )é    N)ÚThread)ÚPY2)ÚntlmÚLOG)ÚoutputToJohnFormatÚwriteJohnOutputToFile)ÚSTATUS_ACCESS_DENIEDÚSTATUS_SUCCESS)ÚTargetsProcessor)ÚactiveConnections)Úget_addressc                   @   sD   e Zd ZG dd„ dejejƒZG dd„ dejƒZdd„ Z	dd„ Z
d	S )
ÚRAWRelayServerc                   @   s   e Zd Zdd„ ZdS )zRAWRelayServer.RAWServerc                 C   sF   || _ d| _t|d |d | j jƒ\| _}dtj_tj | ||¡ d S )NTr   é   )	ÚconfigÚdaemon_threadsr   Úipv6Úaddress_familyÚsocketserverÚ	TCPServerÚallow_reuse_addressÚ__init__)ÚselfÚserver_addressÚRequestHandlerClassr   © r   ú¦/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/examples/ntlmrelayx/servers/rawrelayserver.pyr   ,   s
   z!RAWRelayServer.RAWServer.__init__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   Ú	RAWServer*   s    r   c                       s<   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Z‡  ZS )zRAWRelayServer.RAWHandlerc                    sº   || _ d | _d | _d | _d | _d | _d | _d | _| j jjd u r+t	d|d  d�| j j_| j jj 
¡ | _| jd u rCt d|d  ¡ d S t d|d | jj| jjf ¡ tƒ  |||¡ d S )NzSMB://%s:445/r   )ÚsingleTargetzG(RAW): Received connection from %s, but there are no more targets left!z<(RAW): Received connection from %s, attacking target %s://%s)ÚserverÚchallengeMessageÚtargetÚclientÚmachineAccountÚmachineHashesÚdomainIpÚauthUserr   r
   Ú	getTargetr   ÚinfoÚschemeÚnetlocÚsuperr   )r   ÚrequestÚclient_addressr!   ©Ú	__class__r   r   r   5   s    
 z"RAWRelayServer.RAWHandler.__init__c              	   C   sÐ  t  d| j d¡¡}| j |d ¡}|  |¡s-t d| jj| jj	¡ | j
jj | j¡ d S | j ¡ }| j t  dt|ƒ¡¡ | j |¡ t  d| j d¡¡}| j |d ¡}t ¡ }| |¡ |  ||¡s¶| j t  dd¡¡ | j t  dd¡¡ |d tj@ r›t d	| jj| jj	|d
  d¡|d  d¡f ¡ d S t d	| jj| jj	|d
  d¡|d  d¡f ¡ d S | j t  dd¡¡ | j t  dd¡¡ | j ¡  |d tj@ r÷t d|d
  d¡|d  d¡| jd | jj| jj	| jjf ¡ n t d|d
  d¡|d  d¡| jd | jj| jj	| jjf ¡ t| jd |d |d
 |d |d ƒ}|| jjd< | j
jjdu �rAt d|d  ¡ | j
jj d u�rVt!|d |d | j
jj ƒ | j
jj | jd| j"¡ |  #¡  d S )NÚhé   r   zD(RAW): Negotiating NTLM with %s://%s failed. Skipping to next targetr   ú?FÚflagsz5(RAW): Authenticating against %s://%s as %s\%s FAILEDÚdomain_namezutf-16leÚ	user_nameÚasciiTzK(RAW): Authenticating connection from %s/%s@%s against %s://%s SUCCEED [%s]Ú	challengeÚlanmanr   ÚJOHN_OUTPUTz	(RAW): %sÚhash_stringÚhash_version)$ÚstructÚunpackr.   ÚrecvÚdo_ntlm_negotiater   Úerrorr#   r+   r,   r!   r   ÚregisterTargetr"   ÚgetDataÚsendallÚpackÚlenr   ÚNTLMAuthChallengeResponseÚ
fromStringÚdo_ntlm_authÚNTLMSSP_NEGOTIATE_UNICODEÚdecoder$   ÚsetClientIdr*   r/   Ú	client_idr   ÚsessionDataÚ
dumpHashesÚ
outputFiler   r(   Ú	do_attack)r   Úntlm_negotiate_lenÚntlm_negotiateÚntlm_chal_tokenÚntlm_auth_lenÚ	ntlm_authÚauthenticateMessageÚntlm_hash_datar   r   r   ÚhandleK   sl   
ÿ

ýý

þþ
ýÿz RAWRelayServer.RAWHandler.handlec                 C   sÖ   | j j ¡ | jjjv r^| jjj| j j ¡  | jj| j ƒ| _| j ¡ s$dS | j |¡| _	| jjj
rUt | j	d ¡}|tj= | ¡ | j	d< t| ¡ ƒ| j	d< t| ¡ ƒ| j	d< | j	du r\dS dS t d| j j ¡  ¡ dS )NFÚTargetInfoFieldsÚTargetInfoFields_lenÚTargetInfoFields_max_lenz((RAW): Protocol Client for %s not found!T)r#   r+   Úupperr!   r   ÚprotocolClientsr$   ÚinitConnectionÚsendNegotiater"   Úremove_targetr   ÚAV_PAIRSÚNTLMSSP_AV_HOSTNAMErD   rG   r   rB   )r   ÚtokenÚav_pairsr   r   r   rA   �   s    $


ýz+RAWRelayServer.RAWHandler.do_ntlm_negotiatec                 C   sH   |  ¡ | _|d dks| jjdkr| j |¡\}}nt}|tkr"dS dS )Nr7   Ú z	127.0.0.1TF)ÚgetUserStringr(   r#   Úhostnamer$   ÚsendAuthr   r	   )r   re   rX   ÚclientResponseÚ	errorCoder   r   r   rJ   ª   s   
z&RAWRelayServer.RAWHandler.do_ntlm_authc                 C   sÀ   | j jjr*| jj ¡ | j jjjv r*t 	| jj
| jj| jj ¡ | j| j| jjf¡ d S | jj ¡ | j jjv rS| j jj| jj ¡  | j j| jj| j| j| jƒ}| ¡  d S t d| jj ¡  ¡ d S )Nz"(RAW): No attack configured for %s)r!   r   ÚrunSocksr#   r+   r^   ÚsocksServerÚsupportedSchemesr   Úputri   r$   Ú
targetPortr(   rO   ÚattacksÚsessionÚstartr   rB   )r   ÚclientThreadr   r   r   rR   º   s   "ÿ ÿz#RAWRelayServer.RAWHandler.do_attack)	r   r   r   r   rZ   rA   rJ   rR   Ú__classcell__r   r   r0   r   Ú
RAWHandler3   s    Erw   c                 C   s    t  | ¡ d| _|| _d | _d S )NT)r   r   Údaemonr   r!   )r   r   r   r   r   r   Ë   s   

zRAWRelayServer.__init__c                 C   s~   | j jr	| j j}nd}t dt|ƒ ¡ |  | j j|f| j| j ¡| _z| j 	¡  W n	 t
y2   Y nw t d¡ | j ¡  d S )Ni
  zSetting up RAW Server on port zShutting down RAW Server)r   ÚlisteningPortr   r*   Ústrr   ÚinterfaceIprw   r!   Úserve_foreverÚKeyboardInterruptÚserver_close)r   Úrawportr   r   r   ÚrunÑ   s   
ÿ
zRAWRelayServer.runN)r   r   r   r   ÚThreadingMixInr   r   ÚBaseRequestHandlerrw   r   r€   r   r   r   r   r   (   s    	 r   )r   ÚsocketÚbase64Úrandomr>   ÚstringÚ	threadingr   Úsixr   Úimpacketr   r   Úimpacket.smbserverr   r   Úimpacket.nt_errorsr   r	   Ú/impacket.examples.ntlmrelayx.utils.targetsutilsr
   Ú0impacket.examples.ntlmrelayx.servers.socksserverr   Úimpacket.examples.utilsr   r   r   r   r   r   Ú<module>   s   