o
    j                   	   @   s  d dl mZ d dl m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 d dlmZmZmZ d dlmZ d d	lmZ d d
lmZ G dd dZedkrHejjdu reedeje_eej e Zej dddd ej dddddd ej dddd ej dddd e!dZ"e"j dddd d! e"j d"d#d$gdd$d%d&d' e"j d(dd)d e!d*Z"e"j d+dd,d-d! e"j d.dd/d e"j d0dd1d e#ej$d2kre%  e&d2 e' Z(e)e(j*e(j+ e
e(j,\Z-Z.Z/Z0e-du rd3Z-e/d3kre.d3kre(j1du re(j2d4u rd d5l3m3Z3 e3d6Z/e(j4du r%e0e(_4ee.e/e-e5e(j6e(j1e(j7e(j8e(j9Z:z
e:;e0e(j4 W dS    Y dS dS )7    )division)print_functionN)logger)parse_target)version)	transportlsatlsad)SID_NAME_USE)MAXIMUM_ALLOWED)DCERPCExceptionc                   @   s@   e Zd ZdddddddZ		dd	d
Zdd Zdd ZdS )LSALookupSidzncacn_np:%s[\pipe\lsarpc]T)bindstrset_host)   i   NF  c	           	      C   s\   || _ || _|| _t|| _|| _d| _d| _|| _|| _	|d ur,|
d\| _| _d S d S )Nr   :)_LSALookupSid__username_LSALookupSid__password_LSALookupSid__portint_LSALookupSid__maxRid_LSALookupSid__domain_LSALookupSid__lmhash_LSALookupSid__nthash_LSALookupSid__domain_sids_LSALookupSid__doKerberossplit)	selfusernamepassworddomainporthashesdomain_sidsuse_kerberosmaxRid r(   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/../../../bin/lookupsid.py__init__,   s   
zLSALookupSid.__init__c              
   C   s   t d|  | j| j d | }t d|  t|}|| j || j | j| j d r6|	| t
|drI|| j| j| j| j| j z
| || j W d S  tyw } zt  jt jkrkdd l}|  t t|  d }~ww )NzBrute forcing SIDs at %sr   zStringBinding %sr   set_credentialsr   )logginginfoKNOWN_PROTOCOLSr   r   DCERPCTransportFactory	set_dportset_kerberosr   setRemoteHosthasattrr+   r   r   r   r   r   _LSALookupSid__bruteForcer   	Exception	getLoggerlevelDEBUG	traceback	print_exccriticalstr)r   
remoteName
remoteHoststringbindingrpctransporter9   r(   r(   r)   dump;   s(   


zLSALookupSid.dumpc                 C   s  |  }g }|  |tj t|ttjB }|d }| j	r4t
||tjj}|d d d  }nt
||tjj}|d d d  }td|  d}d	}	t||	 d
 D ]}
|| |	 dkrk|| |	 }n|	}|dkrs nt }t||| D ]}||d|   q}zt|||tjj W n4 ty } z(t|ddkr||	7 }W Y d }~qZt|ddkr| }n W Y d }~nd }~ww t|d d D ])\}}|d tjkrtd|| |d d |d  d |d t|d j f  q||	7 }qZ|!  |S )NPolicyHandlePolicyInformationPolicyPrimaryDomainInfoSidPolicyAccountDomainInfo	DomainSidzDomain SID is: %sr   i     z-%dSTATUS_NONE_MAPPEDSTATUS_SOME_NOT_MAPPEDTranslatedNamesNamesUsez%d: %s\%s (%s)ReferencedDomainsDomainsDomainIndexName)"get_dce_rpcconnectbindr   MSRPC_UUID_LSATr	   hLsarOpenPolicy2r   POLICY_LOOKUP_NAMESr   hLsarQueryInformationPolicy2POLICY_INFORMATION_CLASSPolicyPrimaryDomainInformationformatCanonicalPolicyAccountDomainInformationr,   r-   rangelistappendhLsarLookupSidsLSAP_LOOKUP_LEVELLsapLookupWkstar   r<   find
get_packet	enumerater
   SidTypeUnknownprint	enumItemsname
disconnect)r   r@   r'   dceentriesresppolicyHandle	domainSidsoFarSIMULTANEOUSjsidsToChecksidsirA   nitemr(   r(   r)   __bruteForceU   sZ   	
	"
zLSALookupSid.__bruteForce)r   r   r   NNFFr   )__name__
__module____qualname__r.   r*   rB   r4   r(   r(   r(   r)   r   &   s    
r   __main__utf8targetstorez6[[domain/]username[:password]@]<targetName or address>)actionhelpr'   4000?zmax Rid to check (default 4000))r   defaultnargsr   z-debug
store_truezTurn DEBUG output ONz-tsz&Adds timestamp to every logging output
connectionz
-target-ipz
ip addresszIP Address of the target machine. If omitted it will use whatever was specified as target. This is useful when target is the NetBIOS name and you cannot resolve it)r   metavarr   z-port139445zdestination portz)Destination port to connect to SMB Server)choicesr   r   r   r   z-domain-sidsz>Enumerate Domain SIDs (will likely forward requests to the DC)authenticationz-hasheszLMHASH:NTHASHz$NTLM hashes, format is LMHASH:NTHASHz-no-passz?don't ask for password (useful when proxying through smbrelayx)z-kzUse Kerberos authentication. Grabs credentials from ccache file (KRB5CCNAME) based on target parameters. If valid credentials cannot be found, it will use the ones specified in the command linerI   r   F)getpassz	Password:)<
__future__r   r   sysr,   argparsecodecsimpacket.examplesr   impacket.examples.utilsr   impacketr   impacket.dcerpc.v5r   r   r	   impacket.dcerpc.v5.samrr
   impacket.dcerpc.v5.dtypesr   impacket.dcerpc.v5.rpcrtr   r   rz   stdoutencoding	getwriterrh   BANNERArgumentParserparseradd_argumentadd_argument_groupgrouplenargv
print_helpexit
parse_argsoptionsinittsdebugr   r"   r    r!   r=   r$   no_passr   	target_ipr   r#   r%   kr'   lookuprB   r(   r(   r(   r)   <module>   sl   
o



,$