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ráe %¡  e &d2¡ e '¡ Z(e )e(j*e(j+¡ e
e(j,ƒ\Z-Z.Z/Z0e-du rüd3Z-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 nŽtƒ }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rût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 addressz£IP 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-kzÁUse 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

ÿ
ÿ
,$Ç