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 rd$}|d$kr|d$kr|jd u r|jd%u r|jd u rd&d'lm} |d(}|jd urd|_|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 rt|}||||||	|j | }|jdu r|d|j | t! ||||||	 |"t# |$  |+t'j( t/|}|j0d urt12d0|j0j3  |j04 D ]}|d& d1krt d2| d3d4 |5| qt |d3d4 qW d S |6  W d S  t,y } zt1jd5dd6 t17t-| 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-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 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-ipzIP 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{
