a
    kÄ#d:  ã                   @   sê   d Z ddlmZmZ ddlmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZmZmZmZmZmZ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!m"Z" dd	l#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) dd
l*m+Z+ G dd„ deeƒZ,dS )z
SMB 1 / 2 Client Automaton
é    )ÚATMTÚ	Automaton)ÚNTLM_AUTHENTICATEÚNTLM_AUTHENTICATE_V2ÚNTLM_NEGOTIATEÚNTLM_Client)ÚRaw)ÚRandUUID)Ú
NBTSession)ÚGSSAPI_BLOBÚSPNEGO_MechListMICÚSPNEGO_MechTypeÚSPNEGO_TokenÚSPNEGO_negTokenÚSPNEGO_negTokenInitÚSPNEGO_negTokenResp)Ú
SMB_HeaderÚSMB_DialectÚSMBNegotiate_RequestÚSMBNegotiate_Response_SecurityÚ'SMBNegotiate_Response_Extended_SecurityÚSMBSession_NullÚSMBSession_Setup_AndX_RequestÚ/SMBSession_Setup_AndX_Request_Extended_SecurityÚSMBSession_Setup_AndX_ResponseÚ0SMBSession_Setup_AndX_Response_Extended_SecurityÚSMBTree_Connect_AndX)ÚSMB2_HeaderÚSMB2_Negotiate_Protocol_RequestÚ SMB2_Negotiate_Protocol_ResponseÚSMB2_Session_Setup_RequestÚSMB2_Session_Setup_ResponseÚSMB2_Tree_Connect_Request)ÚNTLM_SMB_Serverc                       sì  e Zd ZdZeZedddœiZ‡ fdd„Ze	j
dd�dd	„ ƒZe	 e¡d
d„ ƒZe	jedd�dd„ ƒZe	 e¡dd„ ƒZe	 
¡ dd„ ƒZe	 e¡dd„ ƒZe	 
¡ dd„ ƒZe	 e¡dd„ ƒZe	 e¡dd„ ƒZe	 
¡ dd„ ƒZe	 e¡dd„ ƒZe	 
¡ dd „ ƒZe	 e¡d!d"„ ƒZe	 e¡d#d$„ ƒZe	 
¡ d%d&„ ƒZe	jed'd�d(d)„ ƒZe	jedd�d*d+„ ƒZe	 e¡d,d-„ ƒZe	j
dd.�d/d0„ ƒZ e	 
¡ d1d2„ ƒZ!e	 e!¡d3d4„ ƒZ"e	 e"¡d5d6„ ƒZ#e	j$e!d7d8d9�d:d;„ ƒZ%e	 e%¡d<d=„ ƒZ&‡  Z'S )>ÚNTLM_SMB_Clienti½  T)ZCLIENT_PROVIDES_NEGOEXÚECHOc                    sf   |  dd¡| _|  dd¡| _|  dd ¡| _|  dd ¡| _|  dd ¡| _d| _tt| ƒj	|i |¤Ž d S )NÚEXTENDED_SECURITYTÚ
ALLOW_SMB2ÚREAL_HOSTNAMEÚRETURN_SOCKETÚ
RUN_SCRIPTF)
Úpopr&   r'   r(   r)   r*   ÚSMB2Úsuperr$   Ú__init__)ÚselfÚargsÚkwargs©Ú	__class__© úM/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/smbclient.pyr.   =   s    zNTLM_SMB_Client.__init__é   )Úinitialc                 C   s   d S ©Nr4   ©r/   r4   r4   r5   ÚBEGINF   s    zNTLM_SMB_Client.BEGINc                 C   sN   |   ¡ }| dd¡| _| di ¡| _| jrJd| _tƒ tdd� | _|  ¡ ‚d S )NÚCONTINUE_SMB2FÚSMB2_INIT_PARAMSTéÿþ  ©ZPID)	Zwait_serverr+   r;   r<   r,   r
   r   Ú
smb_headerÚSMB2_NEGOTIATE)r/   r1   r4   r4   r5   Úcontinue_smb2J   s    ÿ
zNTLM_SMB_Client.continue_smb2)Úprioc                 C   s   |   ¡ ‚d S r8   ©ÚSENT_NEGOTIATEr9   r4   r4   r5   Úsend_negotiateV   s    zNTLM_SMB_Client.send_negotiatec                 C   sž   t ƒ tdddddd� | _| jr0| j jd7  _| j ¡ tdd„ g d	¢| jrTd
dgng  D ƒd� }| jsx| jd8  _|t jd d |t _|  |¡ d S )NzILONG_NAMES+EAS+NT_STATUS+UNICODE+SMB_SECURITY_SIGNATURE+EXTENDED_SECURITYiÿÿ  r=   r   )ÚFlags2ÚTIDZPIDLowÚUIDÚMIDr&   c                 S   s   g | ]}t |d �‘qS ))ZDialectString)r   )Ú.0Úxr4   r4   r5   Ú
<listcomp>i   ó    z0NTLM_SMB_Client.on_negotiate.<locals>.<listcomp>)zPC NETWORK PROGRAM 1.0z	LANMAN1.0zWindows for Workgroups 3.1az	LM1.2X002z	LANMAN2.1z
NT LM 0.12z	SMB 2.002z	SMB 2.???)ÚDialectsZSMB_SECURITY_SIGNATUREz,SMB_SECURITY_SIGNATURE_REQUIRED+IS_LONG_NAME)	r
   r   r?   r&   rF   Úcopyr   r'   Úsend©r/   Úpktr4   r4   r5   Úon_negotiateZ   s,    ø


üÿÿþ
zNTLM_SMB_Client.on_negotiatec                 C   s   d S r8   r4   r9   r4   r4   r5   rD   w   s    zNTLM_SMB_Client.SENT_NEGOTIATEc                 C   s  t |v st|v st|v rd|  d|j¡ |  d|j¡ t|v rVd| _tƒ tdd� | _	n|  d|j
¡ t|v stt|v rÎ|  |j¡}|  d|j¡ |  |¡ t|v rÄ|jdv rÄ| j	 jd	7  _|  ¡ ‚n|  ¡ ‚nFt |v �r|  d
|j¡ |  d|j¡ |  d|j¡ |  d¡ |  ¡ ‚d S )NÚ
ServerTimeÚSecurityModeTr=   r>   ÚServerTimeZoneÚGUID)iÿ  iÿ  r6   Ú	ChallengeÚ
DomainNameÚ
ServerName©NNNN)r   r   r   Úset_srvrT   rU   r,   r
   r   r?   rV   Ú
_get_tokenÚSecurityBlobrW   Úreceived_ntlm_tokenZDialectRevisionrI   r@   Ú
NEGOTIATEDrX   rY   rZ   )r/   rR   Znegoex_tupler4   r4   r5   Úreceive_negotiate_response{   sZ    ÿþþþÿþÿÿþ
ÿ



z*NTLM_SMB_Client.receive_negotiate_responsec                 C   s   d S r8   r4   r9   r4   r4   r5   r@   ®   s    zNTLM_SMB_Client.SMB2_NEGOTIATEc                 C   s   |   ¡ ‚d S r8   rC   r9   r4   r4   r5   Úsend_negotiate_smb2²   s    z#NTLM_SMB_Client.send_negotiate_smb2c              	   C   s6   | j  ¡ tdgdd| j dtƒ ¡d� }|  |¡ d S )Ni  zODFS+Leasing+LargeMTU+MultiChannel+PersistentHandles+DirectoryLeasing+Encryptionr   Ú
ClientGUID)rN   ÚCapabilitiesrU   rc   )r?   rO   r   r<   Úgetr	   rP   rQ   r4   r4   r5   Úon_negotiate_smb2¶   s    
ø
z!NTLM_SMB_Client.on_negotiate_smb2c                 C   s   d S r8   r4   r9   r4   r4   r5   r`   Ä   s    zNTLM_SMB_Client.NEGOTIATEDc                 C   s   |   ¡ }|  ¡  |¡‚d S r8   )Ú	get_tokenÚSENT_SETUP_ANDX_REQUESTÚaction_parameters)r/   Ú
ntlm_tupler4   r4   r5   Úshould_send_setup_andx_requestÈ   s    z.NTLM_SMB_Client.should_send_setup_andx_requestc                 C   s   d S r8   r4   r9   r4   r4   r5   rh   Í   s    z'NTLM_SMB_Client.SENT_SETUP_ANDX_REQUESTc                 C   sî  |\}}}}|   d¡| j_|   d¡| j_| jrL|   d¡| j_|   d¡| j_n|   dd¡| j_| jsj| j�rR| jrŽ| j 	¡ t
ddd� }d	|_n | j 	¡ td
|   d¡ddd� }|   d¡|_t|tƒrú|rÐ||_n(ttttdd�gt|d�d�d�d�|_nVt|ttfƒ�ràtt|d�d�|_|�r2t|d�|jj_|�rà| j�sàt|d�|jj_nŽ| j 	¡ td|   d¡ddd||   d¡|   d¡d� tddd� }|   d¡|_ |   d¡|_!d| j" |   d¡d d …  #d!d"¡d"  |_$|   d#¡|_%|  &|¡ d S )$NrI   rG   ÚAsyncIdÚ	SessionIdrH   r   ZDFS)rd   rU   é!   zJUNICODE+NT_SMBS+STATUS32+LEVEL_II_OPLOCKS+DYNAMIC_REAUTH+EXTENDED_SECURITYÚVCNumberrM   )ÚServerCapabilitiesro   ÚNativeOSÚNativeLanManÚSecuritySignaturez1.3.6.1.4.1.311.2.2.10)Úoid)Úvalue)Z	mechTypesZ	mechToken)Útoken)ZinnerContextToken)Ú	negResultz)UNICODE+NT_SMBS+STATUS32+LEVEL_II_OPLOCKSs                           ÚPrimaryDomainÚAccountName)rp   ro   rq   rr   ZOEMPasswordZUnicodePasswordrx   ry   ZEXTENDED_RESPONSEó    )ÚFlagsZPasswordz\\%s\ÚPathé   ú\r6   ÚService)'re   r?   rI   rG   r,   rl   rm   rH   r&   rO   r    ZCreditsRequestedr   rs   Ú
isinstancer   r^   r   r   r   r   r   r   r   r   rv   ZresponseTokenZDROP_MICr   ZmechListMICr   r   rx   ry   r(   Úsplitr|   r   rP   )r/   rj   Z
ntlm_tokenrw   ZMICZrawTokenrR   r4   r4   r5   Úsend_setup_andx_requestÑ   s˜    
þùÿ

þÿüÿÿ
ÿÿÿÿÿ
ø	þ÷ÿÿz'NTLM_SMB_Client.send_setup_andx_requestc                 C   s€  t |v st|v st|v r°|  d|t j¡ |  d|t j¡ |  d|t j¡ |  d|t j¡ t |v r||  	d¡ |  
¡ ‚n4t|v sŒt|v r°|  d| d¡¡ |  d| d¡¡ t|v �r|  d|j¡ |  d|j¡ |  d|j¡ |  d|j¡ |  d	|j¡ |  d
|j¡ t|v �s"t|v �rr|  |j¡ \}}}}}|dk�rX|  	|¡ |  ¡ ‚n|  	|¡ |  
¡  |¡‚n
t|v �r|d S )NÚStatusrH   rI   rG   r[   rq   rr   rs   rl   rm   r   )r   r   r   r\   r   rƒ   rH   rI   rG   r_   r`   Zgetfieldvalr!   rs   rl   rm   r]   r^   ÚAUTHENTICATEDri   )r/   rR   Ú_rw   rj   r4   r4   r5   Úreceive_setup_andx_response)  sp    ÿþþþþ

ÿÿþÿþ

ÿÿ




z+NTLM_SMB_Client.receive_setup_andx_responsec                 C   s   d S r8   r4   r9   r4   r4   r5   r„   d  s    zNTLM_SMB_Client.AUTHENTICATEDr   c                 C   s    | j r|  ¡ ‚| jr|  ¡ ‚d S r8   )r)   ÚSOCKET_MODEr*   ÚDO_RUN_SCRIPTr9   r4   r4   r5   Úauthenticated_post_actionsh  s    z*NTLM_SMB_Client.authenticated_post_actionsc                 C   s   |   ¡  |¡‚d S r8   )r„   ri   rQ   r4   r4   r5   Úreceive_packeto  s    zNTLM_SMB_Client.receive_packetc                 C   s   |   |¡ d S r8   )ZechorQ   r4   r4   r5   Úpass_packets  s    zNTLM_SMB_Client.pass_packet)Úfinalc                 C   sz   | j  jd7  _|  | j  ¡ tdd| j fgd� ¡ | j  jd7  _| j  ¡ }d|_|tdd� }|  |¡ |  ¡  d S )Nr6   r|   z	\\%s\IPC$)ZBufferZSMB2_CREATEsD   9                      Ÿ               x          s r v s v c )Úload)	r?   rI   rP   rO   r"   r(   ÚCommandr   ÚendrQ   r4   r4   r5   rˆ   w  s    ÿÿÿ

zNTLM_SMB_Client.DO_RUN_SCRIPTc                 C   s   d S r8   r4   r9   r4   r4   r5   r‡   ‹  s    zNTLM_SMB_Client.SOCKET_MODEc                 C   s   |   ¡  |¡‚d S r8   )r‡   ri   rQ   r4   r4   r5   Úincoming_data_received�  s    z&NTLM_SMB_Client.incoming_data_receivedc                 C   s   | j j t|ƒ¡ d S r8   )ZoiÚsmbpiperP   ÚbytesrQ   r4   r4   r5   Úreceive_data“  s    zNTLM_SMB_Client.receive_datar‘   Zsmblink)ÚnameZas_supersocketc                 C   s   |   ¡  | ¡ ¡‚d S r8   )ZESTABLISHEDri   Úrecv)r/   Úfdr4   r4   r5   Úoutgoing_data_received—  s    z&NTLM_SMB_Client.outgoing_data_receivedc                 C   s(   | j  jd7  _|  | j  ¡ | ¡ d S )Nr6   )r?   rI   rP   rO   )r/   Údr4   r4   r5   Ú	send_data›  s    zNTLM_SMB_Client.send_data)(Ú__name__Ú
__module__Ú__qualname__Úportr
   Úclsr#   Z
kwargs_clsr.   r   Ústater:   Ú	conditionrA   rE   ÚactionrS   rD   Zreceive_conditionra   r@   rb   rf   r`   rk   rh   r‚   r†   r„   r‰   rŠ   r‹   rˆ   r‡   r�   r“   Zioeventr—   r™   Ú__classcell__r4   r4   r2   r5   r$   6   sj   
ÿ	






2






W
:









r$   N)-Ú__doc__Zscapy.automatonr   r   Zscapy.layers.ntlmr   r   r   r   Zscapy.packetr   Zscapy.volatiler	   Zscapy.layers.netbiosr
   Zscapy.layers.gssapir   r   r   r   r   r   r   Zscapy.layers.smbr   r   r   r   r   r   r   r   r   r   r   Zscapy.layers.smb2r   r   r   r    r!   r"   Zscapy.layers.smbserverr#   r$   r4   r4   r4   r5   Ú<module>   s   $	4 