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mZ d dlm	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mZmZmZ G d
d dZedkreej ejdddZej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g dd d!d"d#d$ ed%Zejd&dd'd(d e ej!d)kre"  e#d) e$ Z%e	&e%j'e%j( ee%j)\Z*Z+Z,Z-e*du rd*Z*e,d*kre+d*kre%j.du rd d+l/m/Z/ e/d,Z,e%j0du re-e%_0ee+e,e*e%j.e1e%j2Z3e34e-e%j0 dS dS )-    )division)print_functionN)	AUTH_NTLM)logger)parse_target)uuidversion)	transportepm)RPC_PROXY_INVALID_RPC_PORT_ERRRPC_PROXY_CONN_A1_0X6BA_ERRRPC_PROXY_CONN_A1_404_ERRRPC_PROXY_RPC_OUT_DATA_404_ERRc                   @   sJ   e Zd ZddiddiddiddiddidZdd
dZdd Zdd ZdS )RPCDumpbindstrzncacn_ip_tcp:%s[135]zncacn_np:%s[\pipe\epmapper]z ncacn_http:[593,RpcProxy=%s:443]zncacn_http:%s)          iQ   Nr   c                 C   sL   || _ || _|| _d| _d| _|| _d| _|d ur$|d\| _| _d S d S )Nr   :)_RPCDump__username_RPCDump__password_RPCDump__domain_RPCDump__lmhash_RPCDump__nthash_RPCDump__port_RPCDump__stringbindingsplit)selfusernamepassworddomainhashesport r%   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/../../../bin/rpcdump.py__init__/   s   zRPCDump.__init__c              
   C   s  t d|  g }| j| j d | | _t d| j  t| j}| jdv rA|| j	| j
| j| j| j || || j n| jdv rZ|| j	| j
| j| j| j |t n	 z| |}W n7 ty } z+d| }t | t|v st|v st|v st|v rt d W Y d}~dS W Y d}~nd}~ww i }|D ]}t|d	 d
 }	t|d	 d
 d }
|
|v duri ||
< t ||
 d< tt|
dd tj v rtj tt|
dd  ||
 d< nd||
 d< |d dd !d||
 d< ||
 d "|	 |
dd tjv rtj|
dd  ||
 d< qd||
 d< qt|# D ];}t$d|| d   t$d|| d   t$d||| d f  t$d || d D ]	}	t$d|	  qVt$d q*|rt%|}d|kryt d dS t d|  dS t d dS ) zDumps the list of endpoints registered with the mapper
        listening at addr. remoteName is a valid host name or IP
        address in string format.
        z Retrieving endpoint list from %sr   zStringBinding %s)r   r   )r   zProtocol failed: %szWThis usually means the target does not allow to connect to its epmapper using RpcProxy.NtowerFloorsr   TBindings   EXEzN/A
annotationzutf-8$   ProtocolzProtocol: %s zProvider: %s zUUID    : %s %sz
Bindings: z          %sr      zReceived one endpoint.zReceived %d endpoints.zNo endpoints found.)&logginginfoKNOWN_PROTOCOLSr   r   debugr	   DCERPCTransportFactoryset_credentialsr   r   r   r   r   setRemoteHost	set_dportset_auth_typer   _RPCDump__fetchList	Exceptioncriticalr   r   r   r   r
   PrintStringBindingstrlistr   uuidtup_to_binstring_to_uuidtupKNOWN_UUIDSdecodeappendkeysprintlen)r   
remoteName
remoteHostentriesrpctransporte
error_text	endpointsentrybindingtmpUUIDendpointnumr%   r%   r&   dump:   sx   




(
zRPCDump.dumpc                 C   s*   |  }|  tjd |d}|  |S )N)dce)get_dce_rpcconnectr
   hept_lookup
disconnect)r   rL   rV   respr%   r%   r&   __fetchList   s
   zRPCDump.__fetchList)r   r   r   Nr   )__name__
__module____qualname__r4   r'   rU   r;   r%   r%   r%   r&   r   &   s    
`r   __main__Tz7Dumps the remote RPC enpoints information via epmapper.)add_helpdescriptiontargetstorez6[[domain/]username[:password]@]<targetName or address>)actionhelpz-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 ommited it will use whatever was specified as target. This is useful when target is the NetBIOS name and you cannot resolve it)re   metavarrf   z-port)135139443445593?rj   zdestination portz2Destination port to connect to RPC Endpoint Mapper)choicesnargsdefaultri   rf   authenticationz-hasheszLMHASH:NTHASHz$NTLM hashes, format is LMHASH:NTHASHr1   r   )getpassz	Password:)5
__future__r   r   sysr2   argparseimpacket.httpr   impacket.examplesr   impacket.examples.utilsr   impacketr   r   impacket.dcerpc.v5r	   r
   impacket.dcerpc.v5.rpchr   r   r   r   r   r]   rG   BANNERArgumentParserparseradd_argumentadd_argument_groupgrouprH   argv
print_helpexit
parse_argsoptionsinittsr5   rc   r"   r    r!   rI   r#   rt   	target_ipintr$   dumperrU   r%   r%   r%   r&   <module>   sT    




