o
    Žõ±jþ  ã                   @   s  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 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 d dlmZ d dlmZmZmZmZmZ d dlm Z  d dl!m"Z"m#Z# d dl$m%Z% e  &d¡Z'ddd„Z(dd„ Z)e*dkr‡e)ƒ  dS dS )é    N)Úlogger)Ú
__banner__)ÚSMBConnectionFactory)ÚICPRRPC)ÚDCERPC5Connection)Ú
DCERPCAuth)ÚEPM)Ú
EKUS_NAMES)ÚpaddingÚrsa)Úhashes)ÚEncodingÚpkcs7Úpkcs12ÚBestAvailableEncryptionÚload_pem_private_key)Úx509)ÚExtensionOIDÚNameOID)Úcoreú1.3.6.1.4.1.311.20.2.3c
               
   Ã   s  ��zï|d u rdt  d¡ ¡  }|d u rd}tdƒ t | ¡}
|
 ¡  ¡ }|d u r3d|
jj	|
jj
f }td| ƒ tdƒ t dd	¡}td
ƒ d|i}t ¡ }| t t tj|¡g¡¡}|rut |¡ ¡ }|jt t t|¡g¡dd�}| |t ¡ ¡}|d ur¿d }d }t|dƒ�}t  | !¡ |	¡\}}}W d   ƒ n1 s w   Y  t" #¡  $|¡ %||t &¡ ¡}|jt'j(t"j)j*gd�}n| +t'j(¡}tdƒ t,j-|t.ƒ j/|
 ¡ j0|
 ¡ j
d�I d H \}}|d urå|‚tdƒ t1 2|
 3¡ ¡}t4||ƒ}t.j5|dd�I d H \}}|d u�r|‚t6 7d¡ tdƒ | 8|||¡I d H \}}|d u�r(tdƒ |‚|d dv �r5t9d| ƒ‚tdƒ t :|d ¡}td ;|j< =¡ ¡ƒ td ;|j> =¡ ¡ƒ td ;|j?¡ƒ z|j@ AtBjC¡}|jDD ]}td ;tE F|jG|jG¡¡ƒ �qgW n   td ƒ Y z/|j@ AtBjH¡}|jD Itj¡D ]}|jJt Kd!¡k�rªtd"tj L|jD¡jM ƒ  n�q‘td#ƒ W n   td#ƒ Y td$||f ƒ t|d%ƒ�}tjNd&||d tO| P¡ ƒd'�}| Q|¡ W d   ƒ n	1 �sæw   Y  td(ƒ W d)S  t9�y } ztR S¡  d|fW  Y d }~S d }~ww )*Nzcert_%s.pfxé   Úadminz$[+] Parsing connection parameters...z%s@%sz[*] Using CN: %sz [+] Generating RSA privat key...i  i   z#[+] Building certificate request...ÚCertificateTemplateF)ÚcriticalÚrb)Úoptionsz[+] Connecting to EPM...)Údc_ipÚdomainz"[+] Connecting to ICRPR service...T)Úperform_dummyzDCE Connected!z.[+] Requesting certificate from the service...z[-] Request failed!Úencodedcert)Nó    z:No certificate was returned from server!. Full message: %sz[+] Got certificate!z[*]   Cert subject: {}z[*]   Cert issuer: {}z[*]   Cert Serial: {:X}z![*]   Cert Extended Key Usage: {}z)[-]   Could not verify extended key usager   z[*]   Certificate ALT NAME: %sz&[-]   Certificate doesnt have ALT NAMEz9[+] Writing certificate to disk (file:"%s" pass: "%s")...Úwbr!   )ÚnameÚkeyÚcertÚcasÚencryption_algorithmz[+] Finished!)TN)TÚosÚurandomÚhexÚprintr   Úfrom_urlÚ
get_targetÚget_hostname_or_ipÚ
credentialÚusernamer   r   Úgenerate_private_keyr   Ú CertificateSigningRequestBuilderÚsubject_nameÚNameÚNameAttributer   ÚCOMMON_NAMEr   Ú
UTF8StringÚdumpÚadd_extensionÚSubjectAlternativeNameÚ	OtherNameÚPRINCIPAL_NAMEÚsignr   ÚSHA256Úopenr   Úload_key_and_certificatesÚreadr   ÚPKCS7SignatureBuilderÚset_dataÚ
add_signerÚSHA1r   ÚDERÚPKCS7OptionsÚBinaryÚpublic_bytesr   Úcreate_targetr   Úservice_uuidr   r   Úfrom_smb_gssapiÚget_credentialr   Úfrom_rpcconnectionr   ÚdebugÚrequest_certificateÚ	ExceptionÚload_der_x509_certificateÚformatÚsubjectÚrfc4514_stringÚissuerÚserial_numberÚ
extensionsÚget_extension_for_oidr   ÚEXTENDED_KEY_USAGEÚvaluer	   ÚgetÚdotted_stringÚSUBJECT_ALTERNATIVE_NAMEÚget_values_for_typeÚtype_idÚObjectIdentifierÚloadÚnativeÚserialize_key_and_certificatesr   ÚencodeÚwriteÚ	tracebackÚ	print_exc) ÚurlÚserviceÚtemplateÚaltnameÚonbehalfÚcnÚpfx_fileÚpfx_passwordÚenroll_certÚenroll_passwordÚsuÚipr$   Ú
attributesÚcsrÚ	agent_keyÚ
agent_certÚfÚ_Úpkcs7builderÚtargetÚerrÚauthÚ
connectionÚrpcÚresr%   ÚextÚoidr#   ÚdataÚe© r†   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/examples/smbcertreq.pyÚamain   sÌ   €
ÿÿÿÿ
ÿÿú	ÿ,




ÿ
þ€

ûø
€þrˆ   c                  C   s  dd l } | jdd�}|jddddd� |jdd	d
� |jdddd� |jddd
� |jddd
� | d¡}|jddd
� |jddd
� |jddd
� |jddd
� |jddd
� |jddd
� | ¡ }ttƒ |jd krrt 	t
j¡ t t|j|j|j|j|j|j|j|j|j|jƒ
¡ d S )!Nr   z(Request certificate via ICPR-RPC service)Údescriptionz-vz	--verboseÚcount)ÚactionÚdefaultz
--pfx-filez0Output PFX file name. Default is cert_<rand>.pfx)Úhelpz
--pfx-passr   zOuput PFX file password)rŒ   r�   z
--alt-namez3Alternate username. Preferable username@FQDN formatz--cnzaCN (common name). In case you want to set it to something custom. Preferable username@FQDN formatzAgent enrollment parametersz--on-behalfzOn behalf usernamez--enroll-certzAgent enrollment PFX filez--enroll-passz"Agent enrollment PFX file passwordÚsmb_urlzƒConnection string that describes the authentication and target. Example: smb+ntlm-password://TEST\Administrator:password@10.10.10.2rj   zEnrollment service endpointrk   z Certificate template name to useé   )ÚargparseÚArgumentParserÚadd_argumentÚadd_argument_groupÚ
parse_argsr+   r   Úverboser   ÚsetLevelÚloggingÚDEBUGÚasyncioÚrunrˆ   rŽ   rj   rk   Úalt_nameÚ	on_behalfrn   ro   Úpfx_passrq   Úenroll_pass)r�   ÚparserÚagentenrollÚargsr†   r†   r‡   Úmainš   s@   

öÿr¢   Ú__main__)NNNNN)+r™   rg   r—   r(   Úaiosmbr   Úaiosmb._versionr   Ú!aiosmb.commons.connection.factoryr   Ú#aiosmb.dcerpc.v5.interfaces.icprmgrr   Úaiosmb.dcerpc.v5.connectionr   Ú1aiosmb.dcerpc.v5.common.connection.authenticationr   Ú'aiosmb.dcerpc.v5.interfaces.endpointmgrr   Ú)msldap.ldap_objects.adcertificatetemplater	   Ú)cryptography.hazmat.primitives.asymmetricr
   r   Úcryptography.hazmat.primitivesr   Ú,cryptography.hazmat.primitives.serializationr   r   r   r   r   Úcryptographyr   Úcryptography.x509.oidr   r   Ú
asn1cryptor   ra   r<   rˆ   r¢   Ú__name__r†   r†   r†   r‡   Ú<module>   s0   

|'
ÿ