o
    j                     @   s  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
 d dlmZ d dlmZ d dlm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mZmZmZ d dlmZ d dlmZ d dl m!Z!m"Z"m#Z# G dd dZ$dd Z%e&dkrdZ'e (e%e' dS dS )    N)hashes)SMBDCEFactory)DCERPC5Connection)SMBConnection)gkdi)EPM)DCERPCException)logger)
pprint_exc)NULL)RPC_C_AUTHN_LEVEL_NONERPC_C_AUTHN_LEVEL_PKT_INTEGRITYRPC_C_AUTHN_LEVEL_PKT_PRIVACYr   RPC_C_AUTHN_GSS_NEGOTIATERPC_C_AUTHN_LEVEL_CONNECT)
DCERPCAuth)DCERPCTarget)DPAPINGBlobdecrypt_blobGroupKeyEnvelopec                   @   st   e Zd Zdd Zdd Zdd Zdd Zeddede	de	fddZ
eddede	de	fddZdd Zdd Zd	S )GKDIMgrc                 C   s   d | _ tj| _d | _d | _d S N)service_pipenamer   MSRPC_UUID_GKDIservice_uuiddcehandleself r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/dcerpc/v5/interfaces/gkdimgr.py__init__   s   
zGKDIMgr.__init__c                    s   | S r   r   r   r   r   r    
__aenter__   s   zGKDIMgr.__aenter__c                    s   |   I d H  dS N)TN)close)r   exc_typeexc	tracebackr   r   r    	__aexit__   s   zGKDIMgr.__aexit__c              
      sd   z| j rz| j  I d H  W W dS    Y W dS W d S  ty1 } z
d |fW  Y d }~S d }~ww r#   )r   
disconnect	Exception)r   er   r   r    r$   #   s   zGKDIMgr.closeNTF
connectionopenperform_dummyc              
      s   z8t  }| |_|d u r|jt |j I d H \}}|d ur"||jt  jI d H \}}|d ur5||d fW S  tyO } z
d|fW  Y d }~S d }~ww )NF)r   r   set_auth_levelr   connectbindr   r*   )r,   
auth_levelr-   r.   service_errr+   r   r   r    from_rpcconnection.   s"   
zGKDIMgr.from_rpcconnectionc              
      sn   zt | }tj| |||dI dH \}}|dur||dfW S  ty6 } z
d|fW  Y d}~S d}~ww )z
		Creates the connection to the service using an established SMBConnection.
		This connection will use the given SMBConnection as transport layer.
		)r2   r-   r.   N)r   r   r6   get_dce_rpcr*   )r,   r2   r-   r.   rpctransportr3   r5   r+   r   r   r    from_smbconnectionE   s    
zGKDIMgr.from_smbconnectionc           	         s`   t |tjr
|j}t| j|||||I d H \}}|d ur"d |fS d|d }t	|d fS )N    ppbOut)

isinstanceuuidUUIDbytes_ler   hGetKeyr   joinr   unpack)	r   targetSDrootKeyL0KeyIDL1KeyIDL2KeyIDrespr5   gke_rawr   r   r    GetKeyU   s    zGKDIMgr.GetKeyc                    s`   t |}|j }| ||jj|jj|jj|jj	I d H \}}|d ur)d |fS t
||d fS r   )r   rB   protection_descriptorget_target_sdrJ   key_identifierroot_key_identifierl0l1l2r   )r   datablob	target_sdrkr5   r   r   r    ncrypt_unprotect_secret_   s   

zGKDIMgr.ncrypt_unprotect_secret)NTF)__name__
__module____qualname__r!   r"   r(   r$   staticmethodr   boolr6   r   r9   rJ   rV   r   r   r   r    r      s    
r   c                    s  dd l }ddlm} td}|| } |  }t|}|	 I d H \}}|d ur-||
t jI d H \}}|d ur?|tj||d}	t|j}
t|
|	}tj|tdI d H \}}|d urgtd |||I d H \}}|d ur{td |t| t|d d S )	Nr   )SMBConnectionFactory	  c571d901171889ade6040000000000003082045006092a864886f70d010703a08204413082043d02010231820409a2820405020104308203c704820370010000004b44534b03000000690100000f0000001e00000069d83cd1d10ebfac4620a164e805f56e080300001a0000001a000000444850420001000087a8e61db4b6663cffbbd19c651959998ceef608660dd0f25d2ceed4435e3b00e00df8f1d61957d4faf7df4561b2aa3016c3d91134096faa3bf4296d830e9a7c209e0c6497517abd5a8a9d306bcf67ed91f9e6725b4758c022e0b1ef4275bf7b6c5bfc11d45f9088b941f54eb1e59bb8bc39a0bf12307f5c4fdb70c581b23f76b63acae1caa6b7902d52526735488a0ef13c6d9a51bfa4ab3ad8347796524d8ef6a167b5a41825d967e144e5140564251ccacb83e6b486f6b3ca3f7971506026c0b857f689962856ded4010abd0be621c3a3960a54e710c375f26375d7014103a4b54330c198af126116d2276e11715f693877fad7ef09cadb094ae91e1a15973fb32c9b73134d0b2e77506660edbd484ca7b18f21ef205407f4793a1a0ba12510dbc15077be463fff4fed4aac0bb555be3a6c1b0c6b47b1bc3773bf7e8c6f62901228f8c28cbb18a55ae31341000a650196f931c77a57f2ddf463e5e9ec144b777de62aaab8a8628ac376d282d6ed3864e67982428ebc831d14348f6f2f9193b5045af2767164e1dfc967c1fb3f2e55a4bd1bffe83b9c80d052b985d182ea0adb2a3b7313d3fe14c8484b1e052588b9b7d2bbd2df016199ecd06e1557cd0915b3353bbb64e0ec377fd028370df92b52c7891428cdc67eb6184b523d1db246c32f63078490f00ef8d647d148d47954515e2327cfef98c582664b4c0f6cc4165911914ea310a2766c1ec2f5ba89d34002d975da503cc1809d05249fbad13f038a5a9fcb381601e04ec4b9b4f31f6ef25a3f56356d28590727df18f626a04caa3cd81ec602c22e0172a029256caf961a461e3ab61502ee6f27f1f134a88f37019534c7075cfe990ecfe535d1042ee1964af66a7e9e1167a0ffbd8359a6042a3117102240cf5cfd9c442259f0f3db45d1dd51a10e7f3e314250f2079b6122d84ebd9d405c83826d625c8a57dfe518389d645ee4daec02d48b7470e8419c84ed7bcabaf47ded6a1b1f132010d35004adf37fec61dfbc008fda690389ed945ea96bad5f3acffe0fe01f818cd10d01d58d012a37b98758928531d9bf5a614041f4cfbf4e00450057004c004100500053002e0043004f005200500000004e00450057004c004100500053002e0043004f00520050000000305106092b0601040182374a013044060a2b0601040182374a01013036303430320c035349440c2b532d312d352d32312d39323130343037302d313632323731323839342d333433363534373836332d353132300b060960864801650304012d04281a7b6922fc2450c81354ad9d3ce1020d24c327a071f57de6a74dddf3c0b4acb9cf3104efc06fb18d302b06092a864886f70d010701301e060960864801650304012e3011040c247911a21b5c7f4fd08359f9020110426af21e4b446113ce8c4ea45685ecf21d800047f61d5772452b3dab1efc093692f0e3fa3a16ad0fbdbe0df9e9953a934ff129848d34c1e1bc2f5eaefbe67eaa40f158759144b800325ac1307aafd02ce418badf3a9ed849d4053ffde7c2a3822d169377ebcce5c9a9a1a95261c02d49ba014edf882aa54141d0d9b5aa03155eef9f05a0233dbbd9c45f62f58f407cd25320)smb_connection)r-   zConnection to service failed!zFailed to decrypt secret!z	utf-16-le)r'   !aiosmb.commons.connection.factoryr\   bytesfromhexfrom_urlget_connectionr   r9   r0   mapr   r   r   from_connection_stringr   from_smb_gssapigssapir   r6   r-   printrV   decode)urlr'   r\   rR   r,   epmr4   r5   	constringtargetdcerpc_authrpc_connectionr3   secretr   r   r    amainp   s4   



rq   __main__z@smb2+ntlm-password://NEWLAPS\Administrator:Passw0rd!1@10.10.12.2))asyncioosr=   cryptography.hazmat.primitivesr   0aiosmb.dcerpc.v5.common.connection.smbdcefactoryr   aiosmb.dcerpc.v5.connectionr   aiosmb.connectionr   aiosmb.dcerpc.v5r   'aiosmb.dcerpc.v5.interfaces.endpointmgrr   aiosmb.dcerpc.v5.rpcrtr   aiosmbr	   aiosmb.commons.utils.extbr
   aiosmb.dcerpc.v5.dtypesr   r   r   r   r   r   1aiosmb.dcerpc.v5.common.connection.authenticationr   )aiosmb.dcerpc.v5.common.connection.targetr   (aiosmb.dcerpc.v5.common.dpapi_ng._cryptor   r   r   r   rq   rW   rj   runr   r   r   r    <module>   s.    [!