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Zd dlm	Z	 d dl
mZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ zd d
lmZ W n eyc   e d¡ e d¡ Y nw dZG dd„ dejƒZdd„ Zedkr|eƒ  dS dS )é    )Údivision)Úprint_functionN)Úversion)ÚepmÚmimilib)ÚRPC_C_AUTHN_LEVEL_PKT_PRIVACYÚRPC_C_AUTHN_GSS_NEGOTIATE)ÚDCERPCTransportFactory)Úlogger)Úparse_target)ÚARC4zDWarning: You don't have any crypto installed. You need pycryptodomexz+See https://pypi.org/project/pycryptodomex/zType help for list of commandsc                   @   sL   e Z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 )ÚMimikatzShellc                 C   sî   t j | ¡ d | _d| _d | _t| _d| _d | _	d| _
d | _|| _t ¡ }t ¡ }| ¡ d d d… |d< t ¡ }tj|d< d|d< | ¡ |d	< t | j|¡}t d
 |d d	 ¡¡}| |d d d d… ¡dd … d d d… | _|d | _d S )Nzmimikatz # Ú TéÿÿÿÿÚyÚsessionTypeé�   ÚcbPublicKeyÚpbPublicKeyó    ÚserverPublicKeyiðÿÿÿÚphMimi)ÚcmdÚCmdÚ__init__ÚshellÚpromptÚtidÚmimikatz_introÚintroÚpwdÚshareÚloggedInÚlast_outputÚdcer   Ú
MimiDiffeHÚPUBLICKEYBLOBÚgenPublicKeyÚMIMI_PUBLICKEYÚCALG_RC4ÚgetDataÚ	hMimiBindÚjoinÚgetSharedSecretÚkeyÚpHandle)Úselfr$   ÚdhÚblobÚ	publicKeyÚresp© r5   úˆ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/../../../bin/mimikatz.pyr   0   s*   
,zMimikatzShell.__init__c                 C   s   d S ©Nr5   )r0   r5   r5   r6   Ú	emptylineK   s   zMimikatzShell.emptylinec                 C   s   |S r7   r5   ©r0   Úliner5   r5   r6   ÚprecmdN   s   zMimikatzShell.precmdc                 C   s€   |  d¡r|dd … }| d¡d  d¡}t | j¡ |¡}t | j	| j
|¡}d |d ¡}t | j¡}t| |¡ d¡ƒ d S )NÚ*é   Ú
ú zutf-16ler   Ú	encResult)Ú
startswithÚstripÚencoder   Únewr.   Úencryptr   ÚhMimiCommandr$   r/   r,   ÚprintÚdecryptÚdecode)r0   r:   Úcommandr4   Ú
cipherTextÚcipherr5   r5   r6   ÚdefaultS   s   
zMimikatzShell.defaultc              
   C   sX   d}z
t j | |¡}W |S  ty+ } ztjddd� t |¡ W Y d }~|S d }~ww )NFú
Exception:T©Úexc_info)r   r   ÚonecmdÚ	ExceptionÚloggingÚdebugÚerror)r0   ÚsÚretValÚer5   r5   r6   rQ   ]   s   ü€üzMimikatzShell.onecmdc                 C   s   | j d ur
| j  ¡  dS )NT)r   Úcloser9   r5   r5   r6   Údo_exitg   s   

zMimikatzShell.do_exitc                 C   s    t  |¡ ¡ }t|ƒ || _d S r7   )ÚosÚpopenÚreadrG   r#   )r0   r:   Úoutputr5   r5   r6   Údo_shelll   s   
zMimikatzShell.do_shellc                 C   s   |   d¡ d S )Nz::)rM   r9   r5   r5   r6   Údo_helpq   s   zMimikatzShell.do_helpN)Ú__name__Ú
__module__Ú__qualname__r   r8   r;   rM   rQ   rZ   r_   r`   r5   r5   r5   r6   r   /   s    

r   c               
   C   s>  t tjƒ tjddd�} | jdddd� | jdt d	¡d
d� | jdddd� | jdddd� |  d¡}|jddddd� |jdddd� |jdddd� |jddddd� |  d¡}|jdddd d� |jd!ddd"d� tt	j
ƒd#kr}|  ¡  t	 d#¡ |  ¡ }t |j|j¡ t|jƒ\}}}}|jd u rš||_|d u r d$}|d$krÁ|d$krÁ|jd u rÁ|jd%u rÁ|jd u rÁd&d'lm} |d(ƒ}|jd urÉd|_|jd ur×|j d)¡\}}	nd$}d$}	d%}
�z|d$k�rpzctd*| ƒ}| |||||	|j¡ | ¡ }|j�r
| d|j¡ |  t!¡ | "t#¡ | $¡  t%j&|t'j(d+|d,�}t|ƒ}| )| *¡ ¡ | ¡ }|j�r5|  t!¡ | "t#¡ | $¡  | +t'j(¡ d}
W n1 t,�yo } zt-|ƒ .d-¡d&k�rdt%j&|t'j(d.d/�}n‚ W Y d }~nd }~ww t%j&|t'j(d.d/�}|
d%u �r»t|ƒ}| |||||	|j¡ | ¡ }|jdu �r£| d|j¡ |  t!¡ | |||||	¡ | "t#¡ | $¡  | +t'j(¡ t/|ƒ}|j0d u�röt1 2d0|j0j3 ¡ |j0 4¡ D ]}|d& d1k�rët d2| d3d4� | 5|¡ �qÓt |d3d4� �qÓW d S | 6¡  W d S  t,�y } zt1jd5dd6� t1 7t-|ƒ¡ W Y d }~d S d }~ww )7NTzSMB client implementation.)Úadd_helpÚdescriptionÚtargetÚstorez6[[domain/]username[:password]@]<targetName or address>)ÚactionÚhelpz-fileÚrz5input file with commands to execute in the mini shell)Útyperi   z-debugÚ
store_truezTurn DEBUG output ONz-tsz&Adds timestamp to every logging outputÚauthenticationz-hasheszLMHASH:NTHASHz$NTLM hashes, format is LMHASH:NTHASH)rh   Úmetavarri   z-no-passz&don't ask for password (useful for -k)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 linez-aesKeyzhex keyz<AES key to use for Kerberos Authentication (128 or 256 bits)Ú
connectionz-dc-ipz
ip addressztIP Address of the domain controller. If omitted it will use the domain part (FQDN) specified in the target parameterz
-target-ipz£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 itr=   r   Fr   )Úgetpassz	Password:ú:zncacn_np:%s[\pipe\epmapper]Úncacn_np)Úprotocolr$   Úept_s_not_registeredÚncacn_ip_tcp)rs   zExecuting commands from %sú#z# %sú )ÚendrN   rO   )8rG   r   ÚBANNERÚargparseÚArgumentParserÚadd_argumentÚFileTypeÚadd_argument_groupÚlenÚsysÚargvÚ
print_helpÚexitÚ
parse_argsr
   ÚinitÚtsrT   r   rf   Ú	target_ipÚhashesÚno_passÚaesKeyrp   ÚkÚsplitr	   Úset_credentialsÚget_dce_rpcÚset_kerberosÚdc_ipÚset_auth_typer   Úset_auth_levelr   Úconnectr   Úhept_mapr   ÚMSRPC_UUID_MIMIKATZÚset_smb_connectionÚget_smb_connectionÚbindrR   ÚstrÚfindr   ÚfilerS   ÚinfoÚnameÚ	readlinesrQ   ÚcmdlooprU   )ÚparserÚgroupÚoptionsÚdomainÚusernameÚpasswordÚaddressrp   ÚlmhashÚnthashÚboundÚrpctransportr$   ÚstringBindingÚrpctransport2rX   r   r:   r5   r5   r6   Úmaint   sº   



ÿ
ÿ

.






þ€ý


û€þr­   Ú__main__)Ú
__future__r   r   rz   r   rS   r[   r€   Úimpacketr   Úimpacket.dcerpc.v5r   r   Úimpacket.dcerpc.v5.rpcrtr   r   Úimpacket.dcerpc.v5.transportr	   Úimpacket.examplesr
   Úimpacket.examples.utilsr   ÚCryptodome.Cipherr   rR   Úcriticalr   r   r   r­   ra   r5   r5   r5   r6   Ú<module>   s2   
þE{
ÿ