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rýe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r®e "¡  e #d)¡ e $¡ Z%e	 &e%j'e%j(¡ ee%j)ƒ\Z*Z+Z,Z-e*du rÉd*Z*e,d*kràe+d*kràe%j.du ràd d+l/m/Z/ e/d,ƒZ,e%j0du rèe-e%_0ee+e,e*e%j.e1e%j2ƒƒZ3e3 4e-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 sƒt|v sƒt|v sƒt|v r�t  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rÄi ||
< tƒ ||
 d< t t |
¡¡dd… tj v rçt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< qžd||
 d< qžt| #¡ ƒD ];}t$d|| d  ƒ t$d|| d  ƒ t$d||| d f ƒ t$dƒ || d D ]	}	t$d|	 ƒ �qVt$dƒ �q*|�r‚t%|ƒ}d|k�ryt  d¡ dS t  d| ¡ dS t  d¡ dS ) z¢Dumps 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Ú
annotationéÿÿÿÿz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 addressz£IP 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    

ÿ


×