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re)  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rd }d }t|d}t |! |	\}}}W d    n1 sw   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 t12|
3 }t4||}t.j5|ddI d H \}}|d ur|t67d 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;tEF|jG|jG qgW n   td  Y z/|j@AtBjH}|jDItjD ]}|jJtKd!krtd"tjL|jDjM   nqtd# W n   td# Y td$||f  t|d%}tjNd&||d tO|P d'}|Q| W d    n	1 sw   Y  td( W d)S  t9y } ztRS  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_urlzConnection 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   

|'
