o
    j2                     @   s   d dl Z e dZe dZdd Zdd Zd dlmZmZ d dl	Z	d dl
Z
d d	lmZ d d
lmZmZ d!ddZd"ddZdd Zdd Zd dlmZ d dlZd#ddZdZd$ddZd!ddZd dlZd!dd ZdS )%    Nz.(?:(?:([^/@:]*)/)?([^@:]*)(?::([^@]*))?@)?(.*)z$(?:(?:([^/:]*)/)?([^:]*)(?::(.*))?)?c                 C   sP   t | d\}}}}d|v r"|d |dd  }|dd }||||fS )a1   Helper function to parse target information. The expected format is:

    <DOMAIN></USERNAME><:PASSWORD>@HOSTNAME

    :param target: target to parse
    :type target: string

    :return: tuple of domain, username, password and remote name or IP address
    :rtype: (string, string, string, string)
     @r      )target_regexmatchgroups
rpartition)targetdomainusernamepasswordremote_name r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/examples/utils.pyparse_target   s
   r   c                 C   s    t | d\}}}|||fS )a   Helper function to parse credentials information. The expected format is:

    <DOMAIN></USERNAME><:PASSWORD>

    :param credentials: credentials to parse
    :type credentials: string

    :return: tuple of domain, username and password
    :rtype: (string, string, string)
    r   )credential_regexr   r   )credentialsr
   r   r   r   r   r   parse_credentials1   s   
r   )SMBConnectionSessionError)	unhexlify)SPNEGO_NegTokenInit	TypesMechFc              
   C   s   t | | }z|dd W n. ty' } zt|ddkr"td d }~w ty;   | dkr9td|  Y nw |  |rLd| | f S | S )Nr   STATUS_NOT_SUPPORTEDr   zThe SMB request is not supported. Probably NTLM is disabled. Try to specify corresponding NetBIOS name or FQDN as the value of the -dc-host optionz%Error while anonymous logging into %sz%s.%s)	r   loginr   strfind	ExceptiongetServerNamelogoffgetServerDNSDomainName)machinefqdnser   r   r   _get_machine_nameH   s"   
r%   r   Tc           ,   	   C   s@  ddl m}m} ddlm} 	 |dks|dkr?t|d r!d| }t|d r+d| }z
t|}t|}W n	 ty>   Y nw ddlm	} ddl
m}m}m}m} dd	lm}m} dd
lm} ddlm}m}m} dd l}|	d usu|
d urwd}d| }|r||||\}}}	}
|||jjjd}|	d u r|
d u r||||||||\}}}}n|	d }|	d }|	d }|
d u r|||jjjd} || |||||\}!}}}n|
d }!|
d }|
d }t }"td g|"d< |j |!| dd }!| }#|#!|!d  | }$d|$d< t"|j#jj|$d< g }%|$|%|$d< ||$d|#j% | }&d|&d< ||&d< ||&d|j& |j'|j(j)}'|'j*|&d< |%|'|&d< |+|&}(|,|d|(d })||$d < |j-|$d  d!< |)|$d  d< |+|$|"d"< t.j/j01| j2t.j3|d d#|"4 }*| j5r~| j6dd$ d%| _7| 8| 9d&|*d }+d| _7|+d d' dkrt:|+d%| _;d%S )(Nr   )encoderdecoder)noValuer   r   0)CCache)AP_REQAuthenticatorTGS_REPseq_set)getKerberosTGTgetKerberosTGS)	constants)	PrincipalKerberosTimeTicketFzldap/%s)typeKDC_REPcipher
sessionKeyzMS KRB5 - Microsoft Kerberos 5	MechTypes)asn1Specticket   pvnozmsg-typez
ap-optionszauthenticator-vnocrealmcnamecusecctime   authenticatoretype	MechTokenz
GSS-SPNEGO)read_server_infoTbindRequestresult)<pyasn1.codec.berr&   r'   pyasn1.type.univr(   lenr   	TypeErrorimpacket.krb5.ccacher*   impacket.krb5.asn1r+   r,   r-   r.   impacket.krb5.kerberosv5r/   r0   impacket.krb5r1   impacket.krb5.typesr2   r3   r4   datetime	parseFilePrincipalNameTypeNT_PRINCIPALvalueNT_SRV_INSTr   r   decode	from_asn1intApplicationTagNumbersencodeFlagsto_asn1components_to_asn1nowtimezoneutcmicrosecondencodeencryptenctypeldap3	operationbindbind_operationversionSASLgetDataclosedopensasl_in_progresspost_send_single_responsesendr   bound),
connectionr	   userr   r
   lmhashnthashaesKeykdcHostTGTTGSuseCacher&   r'   r(   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   rR   userNametgtr7   oldSessionKeyr8   
serverNametgsblobr;   apReqoptsrC   r_   encodedAuthenticatorencryptedEncodedAuthenticatorrequestresponser   r   r   ldap3_kerberos_login[   s   

 r   c
                 C   s   d||f }
| }|d ur|}|rdnd}t j|t j||d}|r:t |}|  t|| ||||||	|d	 ||fS |dkrQ|dkrQt j||
|t jdd}||fS t j||
|d	 | t jdd}||fS )
Nz%s\%si|  i  )get_infoportuse_sslrx   r   T)rt   r   authentication	auto_bind:)rf   ServerALL
Connectionrh   r   NTLM)r	   r   r
   r   r   ru   rv   kdc_iprw   rt   
connect_tor   ldap_serverldap_sessionr   r   r   _init_ldap_connection   s    
r   c
                 C   sZ   |r|d ur	|}
n|d urt |}
nt | }
n	|d ur|}
n| }
t|
|	| |||||||
S N)r%   r   )r
   r   r   ru   rv   r   r   dc_hostrw   	use_ldapsr	   r   r   r   init_ldap_session   s   

r   )ldapc                 C   s  |d ur|d u s||kr|} n$|d ur|d u s||kr|} n	|d ur%|} n|} |r3t d t| |} |r7dnd}z(t||  ||}|durS||||||	 W |S |j|||||	|
|d W |S  tjy } zXt|	ddkrtd|  ||}|dur||||||	 n1|j|||||	|
|d nt|	ddkrt 
d	  |d ur|d urt 
d
  W Y d }~|S W Y d }~|S d }~ww )NzGetting machine hostnamez
ldaps://%sz	ldap://%sTr   strongerAuthRequiredr   NTLMAuthNegotiatez_NTLM negotiation failed. Probably NTLM is disabled. Try to use Kerberos authentication instead.zkIf the credentials are valid, check the hostname and IP address of KDC. They must match exactly each other.)logginginfor%   r   LDAPConnectionr   kerberosLoginLDAPSessionErrorr   r   critical)r	   base_dnkdc_ipkdc_hostdo_kerberosr   r   r
   ru   rv   aeskey
ldaps_flagtarget_domainr"   urlldapConnectionr$   r   r   r   
ldap_login   sH   






r    AAD3B435B51404EEAAD3B435B51404EE	Password:c                 C   s   t | \}}}|d u rd}|dkr+|dkr+|d u r+|du r+|d u r+ddlm}	 |	|}|d ur1d}d}
d}|d urF|d\}
}|
dkrFt}
||||
||fS )Nr   Fr   )getpassTr   )r   r   splitEMPTY_LM_HASH)r   hashesno_passrw   r   getpass_msgr
   r   r   r   ru   rv   r   r   r   parse_identity+  s   (r   c                 C   sx   | |f}t j}|r8t j}| d}t|dkr|d nd}zt|}W n ty1   t |}Y nw |d|f }||fS )N%r      r   )socketAF_INETAF_INET6r   rK   rZ   
ValueErrorif_nametoindex)ipr   ipv6addressaddress_familyip_partsscope_idr   r   r   get_addressC  s   
r   c                 C   s4   t  |rt jnt j}t| ||\}}|| |S r   )r   r   r   r   connect)r   r   r   r#   _r   r   r   r   get_connected_socketU  s   
r   )F)r   r   r   r   NNNT)FNF)NFNFr   )recompiler   r   r   r   impacket.smbconnectionr   r   rf   sslbinasciir   impacket.spnegor   r   r%   r   r   r   impacket.ldapr   r   r   r   r   r   r   r   r   r   r   r   <module>   s,   



z
-

