o
    àý°jK#  ã                   @   s6  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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mZ edk�rd dlZG dd„ dejƒZeejƒ ejddd�Zejdddd� ejddddd� ejde  d¡dd� ejdddd� ejd dd!d� ejd"dd#d$d%� e !d&¡Z"e"jd'dd(d)d%� e"jd*dd+d� e"jd,dd-d� e"jd.dd/d0d%� e"jd1dd2d3d%� e"jd4g d5¢d6d7d8d9� e#ej$ƒd:krée %¡  e &d:¡ e '¡ Z(e )e(j*e(j+¡ e(j,du�r$ze(j, -d;¡\Z.Z/e 0e1e.ƒe1e/ƒ¡ W n e2�y#   e 3d<¡ e &d:¡ Y nw e
e(j4ƒ\Z5Z6Z7Z8e5du �r4d=Z5e7d=k�rZe6d=k�rZe(j9du �rZe(j:d>u �rZe(j;du �rZd d?l<m<Z< e<d@ƒZ7e(j;du�rcde(_=e(j9du�rre(j9 -dA¡\Z>Z?nd=Z>d=Z?zuee8e6e7e5e>e?e(j;de(j=e(j@dB�
ZAeA BejCejD¡ZEe FeE¡ZGeG He(jIee¡ZJe(jKdCk�r«eJ L¡  Me¡ ne(jKdDk�r¸eJ L¡  Me¡ eG N¡  eeJƒZOe(jPdu �rËeO Q¡  ne(jP R¡ D ]ZSedEeS dFdG� eO TeS¡ �qÐeJ N¡  eA U¡  W dS  e2�y ZV z e 3eWeVƒ¡ zeA U¡  W n   Y W Y dZV[VdS W Y dZV[VdS dZV[Vww dS )Hé    )Údivision)Úprint_functionN)Úlogger)Úparse_target)Úversion)ÚNULL)Úwmi)ÚDCOMConnectionÚ
COMVERSION)ÚRPC_C_AUTHN_LEVEL_PKT_PRIVACYÚRPC_C_AUTHN_LEVEL_PKT_INTEGRITYÚ__main__c                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚWMIQUERYc                 C   s"   t j | ¡ || _d| _d| _d S )NzWQL> z'[!] Press help for extra shell commands)ÚcmdÚCmdÚ__init__ÚiWbemServicesÚpromptÚintro)Úselfr   © r   úˆ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/../../../bin/wmiquery.pyr   -   s   
zWMIQUERY.__init__c                 C   s   t dƒ d S )Na  
     lcd {path}                 - changes the current local directory to {path}
     exit                       - terminates the server process (and this session)
     describe {class}           - describes class
     ! {cmd}                    - executes a local shell cmd
     )Úprint©r   Úliner   r   r   Údo_help3   s   zWMIQUERY.do_helpc                 C   s   t  |¡ d S ©N)ÚosÚsystem©r   Úsr   r   r   Údo_shell;   s   zWMIQUERY.do_shellc              
   C   s¢   |  d¡}|dd … dkr|d d… }z| j |¡\}}| ¡  | ¡  W d S  tyP } zt ¡ jtj	kr>dd l
}| ¡  t t|ƒ¡ W Y d }~d S d }~ww )NÚ
éÿÿÿÿú;r   )Ústripr   Ú	GetObjectÚprintInformationÚ
RemReleaseÚ	ExceptionÚloggingÚ	getLoggerÚlevelÚDEBUGÚ	tracebackÚ	print_excÚerrorÚstr)r   ÚsClassÚiObjectÚ_Úer.   r   r   r   Údo_describe>   s   
€üzWMIQUERY.do_describec                 C   s&   |dkrt t ¡ ƒ d S t |¡ d S )NÚ )r   r   ÚgetcwdÚchdirr   r   r   r   Údo_lcdL   s   zWMIQUERY.do_lcdc           
   
   C   s6  d}	 zd|  dd¡d }| ¡ }|du r,tddd� |D ]
}td| dd� qtƒ  d	}tddd� |D ].}t|| d
 ƒtu rV|| d
 D ]}t|dd� qFtddd� q4td|| d
  dd� q4tƒ  W n, ty“ } z t|ƒ d¡dk r‰t 	¡ j
tjkrˆdd l}	|	 ¡  ‚ W Y d }~nd }~ww q| ¡  d S )NTl   ÿÿ é   r   ú|ú ©Úendz%s |FÚvaluez |ÚS_FALSE)ÚNextÚgetPropertiesr   ÚtypeÚlistr)   r1   Úfindr*   r+   r,   r-   r.   r/   r(   )
r   ÚiEnumÚprintHeaderÚpEnumÚrecordÚcolÚkeyÚitemr5   r.   r   r   r   Ú
printReplyR   s<   
€ùízWMIQUERY.printReplyc              
   C   s†   |  d¡}|dd … dkr|d d… }z| j |  d¡¡}|  |¡ | ¡  W d S  tyB } zt t|ƒ¡ W Y d }~d S d }~ww )Nr"   r#   r$   )	r%   r   Ú	ExecQueryrN   r(   r)   r*   r0   r1   )r   r   ÚiEnumWbemClassObjectr5   r   r   r   Údefaultq   s   

€ÿzWMIQUERY.defaultc                 C   s   d S r   r   )r   r   r   r   Ú	emptyline|   ó   zWMIQUERY.emptylinec                 C   s   dS )NTr   r   r   r   r   Údo_exit   rS   zWMIQUERY.do_exitN)Ú__name__Ú
__module__Ú__qualname__r   r   r!   r6   r:   rN   rQ   rR   rT   r   r   r   r   r   ,   s    r   Tz[Executes WQL queries and gets object descriptions using Windows Management Instrumentation.)Úadd_helpÚdescriptionÚtargetÚstorez6[[domain/]username[:password]@]<targetName or address>)ÚactionÚhelpz
-namespacez//./root/cimv2z'namespace name (default //./root/cimv2))r\   rQ   r]   z-fileÚrz4input file with commands to execute in the WQL shell)rD   r]   z-debugÚ
store_truezTurn DEBUG output ONz-tsz&Adds timestamp to every logging outputz-com-versionzMAJOR_VERSION:MINOR_VERSIONz<DCOM version, format is MAJOR_VERSION:MINOR_VERSION e.g. 5.7)r\   Úmetavarr]   Úauthenticationz-hasheszLMHASH:NTHASHz$NTLM hashes, format is LMHASH:NTHASHz-no-passz&don't ask for password (useful for -k)z-kzÁUse Kerberos authentication. Grabs credentials from ccache file (KRB5CCNAME) based on target parameters. If valid credentials cannot be found, it will use the ones specified in the command linez-aesKeyzhex keyz<AES key to use for Kerberos Authentication (128 or 256 bits)z-dc-ipz
ip addresszoIP Address of the domain controller. If ommited it use the domain part (FQDN) specified in the target parameterz-rpc-auth-level)Ú	integrityÚprivacyrQ   ú?rQ   z®default, integrity (RPC_C_AUTHN_LEVEL_PKT_INTEGRITY) or privacy (RPC_C_AUTHN_LEVEL_PKT_PRIVACY). For example CIM path "root/MSCluster" would require privacy level by default))ÚchoicesÚnargsrQ   r]   r;   Ú.z>Wrong COMVERSION format, use dot separated integers e.g. "5.7"r7   F)Úgetpassz	Password:ú:)ÚoxidResolverÚ
doKerberosÚkdcHostrc   rb   zWQL> %sr=   r>   )XÚ
__future__r   r   ÚargparseÚsysr   r*   Úimpacket.examplesr   Úimpacket.examples.utilsr   Úimpacketr   Úimpacket.dcerpc.v5.dtypesr   Úimpacket.dcerpc.v5.dcomr   Úimpacket.dcerpc.v5.dcomrtr	   r
   Úimpacket.dcerpc.v5.rpcrtr   r   rU   r   r   r   r   ÚBANNERÚArgumentParserÚparserÚadd_argumentÚFileTypeÚadd_argument_groupÚgroupÚlenÚargvÚ
print_helpÚexitÚ
parse_argsÚoptionsÚinitÚtsÚdebugÚcom_versionÚsplitÚmajor_versionÚminor_versionÚset_default_versionÚintr)   r0   rZ   ÚdomainÚusernameÚpasswordÚaddressÚhashesÚno_passÚaesKeyrh   ÚkÚlmhashÚnthashÚdc_ipÚdcomÚCoCreateInstanceExÚCLSID_WbemLevel1LoginÚIID_IWbemLevel1LoginÚ
iInterfaceÚIWbemLevel1LoginÚiWbemLevel1LoginÚ	NTLMLoginÚ	namespacer   Úrpc_auth_levelÚget_dce_rpcÚset_auth_levelr(   ÚshellÚfileÚcmdloopÚ	readlinesr   ÚonecmdÚ
disconnectr5   r1   r   r   r   r   Ú<module>   s²   

V
ÿ

þ
8ÿ

þ€ý �Ð