o
    �õ±j"  ã                   @   sÌ   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mZ d dlmZ d d	lmZ d d
lmZ dZdegfdegfdegfdegfdegfdegfdœZG dd„ dƒZdS )é    N)ÚKerberosTarget)ÚKerberosCredential)ÚKerberosSecretType)ÚAIOKerberosClient)ÚKerbrosClient)ÚurlparseÚparse_qs)ÚUniProto)ÚUniProxyTarget)ÚEncryptionTypea7  ==== Extra Help ====
   kerberos connection url secret types: 
   - Plaintext: "pw" or "pass" or "password"
   - NT hash: "nt"
   - RC4 key: "rc4"
   - AES128/256 key: "aes"
   - CCACHE file: "ccache"
   - SSPI: "sspi"
   
   Example:
   - Plaintext + SOCKS5 proxy:
      kerberos+password://domain\user:SecretPassword@127.0.0.1/proxytype=socks5&proxyhost=127.0.0.1&proxyport=1080
   - Plaintext:
      kerberos+password://domain\user:SecretPassword@127.0.0.1
      kerberos+pw://domain\user:SecretPassword@127.0.0.1
      kerberos+pass://domain\user:SecretPassword@127.0.0.1
   - NT hash:
      kerberos+nt://domain\user:921a7fece11f4d8c72432e41e40d0372@127.0.0.1
   - SSPI:
      TEST/user/sspi:@192.168.1.1
   - RC4 key:
      kerberos+rc4://domain\user:921a7fece11f4d8c72432e41e40d0372@127.0.0.1
   - AES key:
      kerberos+aes://domain\user:921a7fece11f4d8c72432e41e40d0372@127.0.0.1
   - CCACHE file:
      kerberos+ccache://domain\user:creds.ccache@127.0.0.1
   - KEYTAB file:
      kerberos+keytab://domain\user:creds.keytab@127.0.0.1
   - PFX file:
      kerberos+pfx://TEST.corp\Administrator:admin@10.10.10.2/?certdata=test.pfx
   - PFX string (b64):
      kerberos+pfxstr://TEST.corp\Administrator:admin@10.10.10.2/?certdata=BASE64DATA
   - No auth (preauth not req):
      kerberos+none://TEST.corp\asrepuser@10.10.10.2/
ÚtimeoutÚcertdataÚkeydataÚetypeÚ	certstoreÚ
commonname)r   r   r   r   r   Úcnc                   @   sv   e Zd Zddg ddfdefdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	de
fdd„Zde
fdd„Zedd„ ƒZdS )ÚKerberosClientFactoryNÚtargetc                 C   sf   d | _ d | _d | _d | _d | _d| _d | _d | _tj	| _
d| _d| _|| _|| _|| _|| _|| _d S )NÚMYé
   éX   )ÚdomainÚusernameÚsecret_typeÚsecretr   r   r   Údc_ipr	   Ú
CLIENT_TCPÚprotocolr   Úportr   Ú
credentialÚproxiesr   r   )Úselfr   r    r!   r   r   © r#   úŽ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minikerberos/common/factory.pyÚ__init__@   s    
zKerberosClientFactory.__init__c                 C   sV   | j d ur| j jd u r| jd ur| j| j _t | j ¡S t| j| jtj| j| j	d�}|S )N)r   r   r!   r   )
r   r!   ÚcopyÚdeepcopyr   r   r   r	   r   r   ©r"   Úresr#   r#   r$   Ú
get_targetT   s   

ûz KerberosClientFactory.get_targetc                 C   s   |   ¡ S ©N)Ú	get_creds©r"   r#   r#   r$   Úget_credentialb   s   z$KerberosClientFactory.get_credentialc                 C   sä  | j d urt | j ¡S | jtjkrt | j| j	| j
¡S | jtjkr't | j¡S | jtjkr5t | j| j¡S | jtjkrHtj| j| j| j	| j
d�S | jtjkrYtj| j| j	| j
d�S | jtjkrltj| j| j| j	| j
d�S | jtjkr€tj| j| jd | j	| j
d�S tƒ }| j	|_	| j
|_
| jtjtjtjfv r›| j|_nÈ| jtjtj fv r»t!| jƒdkr²t"d| j ƒ‚| j|_#| j|_$n¨| jtj%tj&tj'fv �r| jtj'krìt!| jƒdkrÙ| j|_(nŠt!| jƒdkrå| j|_)n~t"d| j ƒ‚| jtj%k�rt!| jƒdk�rt"d| j ƒ‚| j|_(n\t!| jƒdk�rt"d	| j ƒ‚| j|_)nH| jtj*k�r6t!| jƒd
k�r1t"d| j ƒ‚| j|_+n-| jtj,tj-fv �rTt!| jƒdk�rOt"d| j ƒ‚| j|_.n| jtj/k�r_d|_0nt"dƒ‚| j1d u�rpt2| j1ƒg|_3|S )N)r   r   )Ú	principalÚrealm)Úcertstore_nameÚdhparamsr   r   é    zIncorrect RC4/NT key! %sé@   zIncorrect AES key! %szIncorrect AES128 key! %szIncorrect AES256 key! %sé   zIncorrect DES key! %sé   zIncorrect DES3 key! %sTzMissing/unknown secret_type!)4r    r&   r'   r   r   ÚKEYTABr   Úfrom_keytabr   r   r   ÚKIRBIÚ
from_kirbiÚPFXSTRÚfrom_pfx_stringr   ÚPFXÚfrom_pfx_fileÚCCACHEÚfrom_ccacheÚPEMÚfrom_pem_filer   Ú	CERTSTOREÚfrom_windows_certstorer   r   ÚPASSWORDÚPWÚPASSÚpasswordÚNTÚRC4ÚlenÚ	ExceptionÚnt_hashÚkerberos_key_rc4ÚAES128ÚAES256ÚAESÚkerberos_key_aes_128Úkerberos_key_aes_256ÚDESÚkerberos_key_desÚDES3ÚTDESÚkerberos_key_des3ÚNONEÚ	nopreauthr   r   Úoverride_etypesr(   r#   r#   r$   r,   e   sl   








zKerberosClientFactory.get_credsc                 C   ó   t |  ¡ |  ¡ ƒS r+   )r   r,   r*   r-   r#   r#   r$   Ú
get_client¥   ó   z KerberosClientFactory.get_clientc                 C   r\   r+   )r   r,   r*   r-   r#   r#   r$   Úget_client_blocking¨   r^   z)KerberosClientFactory.get_client_blockingÚcredc                 C   ó   t t |¡|  ¡ ƒS r+   )r   r&   r'   r*   ©r"   r`   r#   r#   r$   Úget_client_newcred«   ó   z(KerberosClientFactory.get_client_newcredc                 C   ra   r+   )r   r&   r'   r*   rb   r#   r#   r$   Úget_client_newcred_blocking®   rd   z1KerberosClientFactory.get_client_newcred_blockingc           
      C   sV  t ƒ }t| ƒ}|j|_|j ¡  d¡}|d dvr!td|d  ƒ‚|d  d¡du r.t	j
|_|d }| d¡d	krL| ¡  d
¡rL| d¡d }t ¡ |_zt|ƒ|_W n	   td| ƒ‚|jd ury|j d¡d	kru|j d¡\|_|_ntdƒ‚|jtjkrƒtdƒ‚|jd u rŒ|j|_|jd ur—t|jƒ|_t|jƒ}d }|D ]-}|dkr¬|| d }|tv rÍ|| d }t| d D ]}	|	|ƒ}t|t| d |ƒ q¼q |d urÜt ||j|j¡|_|jd u rë|jtjkrëtdƒ‚|jtjkrútj|_t ¡ |_|jd u �rtdƒ‚|jd u �rtdƒ‚|jd u �r)|jtj k�r)|jtj!tjfv�r)tdƒ‚|S )Nú+r   )ÚKERBEROSzKERBEROS-TCP, KERBEROS-UDPÚKRB5zKRB5-UDPzKRB5-TCPzUnknown protocol! %sÚUDPTé   ú-éÿÿÿÿz-PROMPTzUnknown secret type! %sú\zDomain missing from username!zMissing username!Ú	proxytypezMissing secret_type!zMissing target hostname or IP!zMissing secret/password!)"r   r   Úhostnamer   ÚschemeÚupperÚsplitrL   Úendswithr	   Ú
CLIENT_UDPr   ÚfindÚgetpassr   r   r   r   r   rC   rH   r   Úintr   ÚqueryÚKerberosClientFactory_param2varÚsetattrr
   Úfrom_url_paramsr!   ÚPWPROMPTrE   rY   rA   )
Úurl_strr)   ÚurlÚschemesÚttyperx   Ú
proxy_typeÚkÚdataÚcr#   r#   r$   Úfrom_url±   sr   





ý€

zKerberosClientFactory.from_url)Ú__name__Ú
__module__Ú__qualname__r   r%   r*   r.   r,   r]   r_   r   rc   re   Ústaticmethodr…   r#   r#   r#   r$   r   ?   s    @r   )rv   r&   Úminikerberos.common.targetr   Úminikerberos.common.credsr   Úminikerberos.common.constantsr   Úminikerberos.aioclientr   Úminikerberos.clientr   Úurllib.parser   r   Úasysocks.unicomm.common.targetr	   Úasysocks.unicomm.common.proxyr
   Úminikerberos.protocol.constantsr   Úkerberos_url_help_epilogrw   Ústrry   r   r#   r#   r#   r$   Ú<module>   s(   &ú	