o
    àý°jì1  ã                   @   s:  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Zd dl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 d d	lmZ d d
lmZ d dlmZ ejjZG dd„ dƒZedk�r›e ej!ƒ e "¡ Z#e#j$dddd� e#j$dddddd� e#j$dde%dd� e#j$dddd� e#j$dddd d!� e#j$d"dd#d� e#j$d$dd%e 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d0d1d*� e'j$d2dd3d4d*� e'j$d5dd6d� e(ej)ƒd7kr÷e# *¡  e +d7¡ e# ,¡ Z-e
 .e-j/e-j0¡ e-j1du�re-j1Znedu �rd8Ze 2d9¡ d: 3e-j4¡dk�r,e 5d;¡ e +d7¡ ee-j6ƒ\Z7Z8Z9Z:e7du �r<d:Z7e-j;du�rNe <e-j;e8e7e-¡ d<e-_=e9d:k�rte8d:k�rte-j>du �rte-j?du �rte-j@du �rtd d=lAmAZA eAd>ƒZ9e-j@du�r}d<e-_=ee8e9e7e-j>e-j@e-j=e-jBd 3e-j4¡e-jCe-jDƒ
ZEeE Fe:¡ dS dS )?é    )Údivision)Úprint_functionN)Úlogger)Úversion)ÚtschÚ	transport)ÚNULL)ÚRPC_C_AUTHN_GSS_NEGOTIATEÚRPC_C_AUTHN_LEVEL_PKT_PRIVACY)Úparse_target)ÚKeytab)ÚPY2c                   @   s*   e Zd Z		d
dd„Zdd„ Zdd	„ ZdS )Ú	TSCH_EXECÚ NFc                 C   sd   || _ || _|| _d| _d| _|| _|| _|| _|| _|
| _	|	| _
|d ur0| d¡\| _| _d S d S )Nr   ú:)Ú_TSCH_EXEC__usernameÚ_TSCH_EXEC__passwordÚ_TSCH_EXEC__domainÚ_TSCH_EXEC__lmhashÚ_TSCH_EXEC__nthashÚ_TSCH_EXEC__aesKeyÚ_TSCH_EXEC__doKerberosÚ_TSCH_EXEC__kdcHostÚ_TSCH_EXEC__commandÚ_TSCH_EXEC__silentCommandÚ	sessionIdÚsplit)ÚselfÚusernameÚpasswordÚdomainÚhashesÚaesKeyÚ
doKerberosÚkdcHostÚcommandr   ÚsilentCommand© r'   ú†/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/../../../bin/atexec.pyÚ__init__.   s   ÿzTSCH_EXEC.__init__c              
   C   sØ   d| }t  |¡}t|dƒr&| | j| j| j| j| j| j	¡ | 
| j| j¡ z|  |¡ W d S  tyk } z1t ¡ jtjkrFdd l}| ¡  t |¡ t|ƒ d¡dkr`t d¡ W Y d }~d S W Y d }~d S d }~ww )Nzncacn_np:%s[\pipe\atsvc]Úset_credentialsr   ÚSTATUS_OBJECT_NAME_NOT_FOUNDzOWhen STATUS_OBJECT_NAME_NOT_FOUND is received, try running again. It might work)r   ÚDCERPCTransportFactoryÚhasattrr*   r   r   r   r   r   r   Úset_kerberosr   r   ÚdoStuffÚ	ExceptionÚloggingÚ	getLoggerÚlevelÚDEBUGÚ	tracebackÚ	print_excÚerrorÚstrÚfindÚinfo)r   ÚaddrÚstringbindingÚrpctransportÚer5   r'   r'   r(   Úplay?   s&   

ÿ
ÿ€ûzTSCH_EXEC.playc                 C   sÈ  dd„ }dd„ }dd„ }|  ¡ }|j| ¡ Ž  | jdu r!| t¡ | ¡  | t¡ | 	t
j¡ d d	d
„ tdƒD ƒ¡}|d }| jd urM|| jƒ\}}	n	d}d| j|f }	d| jdu r`||ƒn| j ¡ d | jdu ro||	ƒnd | j ¡ dd … ¡f }
d}zÒz£t d| ¡ t
 |d| |
t
jtt
j¡ d}t d| ¡ d}| jd u r¯t
 |d| ¡ n=zt
j|d| t
j| jd� W n- tyë } z!t|ƒ d¡dksØt|ƒ d¡dkràt d¡ d}n‚ W Y d }~nd }~ww |�st d| ¡ t
 |d| ¡}|d d dk�r
d}nt  d¡ |rït d| ¡ t
 !|d| ¡ d}W n t
j"�yB } zt #|¡ | $¡  %¡  W Y d }~nd }~ww W |du �rQt
 !|d| ¡ n|du �r`t
 !|d| ¡ w w | jd u�rm| &¡  d S | j�rw| &¡  d S | '¡ }d}	 zt d | ¡ | (d!d"| |¡ W n> t�yÌ } z/t|ƒ d#¡dk�r©t  d$¡ nt|ƒ d%¡dk�rÁ|du �rÀt  d$¡ d}n‚ ‚ W Y d }~nd }~ww �q~t d&| ¡ | )d!d"| ¡ | &¡  d S )'Nc                 S   sF   z
t |  t¡ƒ W d S  ty"   t d¡ t | jtdd�ƒ Y d S w )NzßDecoding error detected, consider running chcp.com at the target,
map the result with https://docs.python.org/3/library/codecs.html#standard-encodings
and then execute atexec.py again with -codec and the corresponding codecÚreplace)Úerrors)ÚprintÚdecodeÚCODECÚUnicodeDecodeErrorr1   r7   ©Údatar'   r'   r(   Úoutput_callbackS   s   
üz*TSCH_EXEC.doStuff.<locals>.output_callbackc                    s(   ddddddœ‰ d  ‡ fdd	„| D ƒ¡S )
Nz&amp;z&quot;z&apos;z&gt;z&lt;)ú&ú"ú'ú>ú<r   c                 3   s   � | ]	}ˆ   ||¡V  qd S )N)Úget)Ú.0Úc©Úreplace_tabler'   r(   Ú	<genexpr>d   s   € z8TSCH_EXEC.doStuff.<locals>.xml_escape.<locals>.<genexpr>)ÚjoinrF   r'   rQ   r(   Ú
xml_escape\   s   ûz%TSCH_EXEC.doStuff.<locals>.xml_escapec                 S   s4   |   dd¡} | d }t| ƒdkr| d nd}||gS )Nú é   r   r   )r   Úlen)ÚcmdlineÚcmdÚargsr'   r'   r(   Ú	cmd_splitf   s   z$TSCH_EXEC.doStuff.<locals>.cmd_splitTr   c                 S   s   g | ]}t  tj¡‘qS r'   )ÚrandomÚchoiceÚstringÚascii_letters)rO   Ú_r'   r'   r(   Ú
<listcomp>u   s    z%TSCH_EXEC.doStuff.<locals>.<listcomp>é   z.tmpzcmd.exez/C %s > %%windir%%\Temp\%s 2>&1al  <?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <Triggers>
    <CalendarTrigger>
      <StartBoundary>2015-07-15T20:35:13.2757294</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByDay>
        <DaysInterval>1</DaysInterval>
      </ScheduleByDay>
    </CalendarTrigger>
  </Triggers>
  <Principals>
    <Principal id="LocalSystem">
      <UserId>S-1-5-18</UserId>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>true</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="LocalSystem">
    <Exec>
      <Command>%s</Command>
      <Arguments>%s</Arguments>
    </Exec>
  </Actions>
</Task>
        Fr   rV   rW   zCreating task \%sz\%szRunning task \%s)Úflagsr   ÚERROR_FILE_NOT_FOUNDÚE_INVALIDARGz$The specified session doesn't exist!z$Calling SchRpcGetLastRunInfo for \%sÚpLastRuntimeÚwYearé   zDeleting task \%sz!Attempting to read ADMIN$\Temp\%szADMIN$zTemp\%sÚSHARINGé   r+   zDeleting file ADMIN$\Temp\%s)*Úget_dce_rpcr*   Úget_credentialsr   Úset_auth_typer	   ÚconnectÚset_auth_levelr
   Úbindr   ÚMSRPC_UUID_TSCHSrT   Úranger   r   r   r   r1   r:   ÚhSchRpcRegisterTaskÚTASK_CREATEr   ÚTASK_LOGON_NONEÚ
hSchRpcRunÚTASK_RUN_USE_SESSION_IDr0   r8   r9   ÚdebugÚhSchRpcGetLastRunInfoÚtimeÚsleepÚhSchRpcDeleteÚDCERPCSessionErrorr7   Ú
get_packetÚdumpÚ
disconnectÚget_smb_connectionÚgetFileÚ
deleteFile)r   r=   rH   rU   r\   ÚdceÚtmpNameÚtmpFileNamerZ   r[   ÚxmlÚtaskCreatedÚdoner>   ÚrespÚsmbConnectionÚwaitOncer'   r'   r(   r/   R   s´   	




*(ÿÖ,
$
þ€ý
ú
€þ€
€
ÿÿ

€õûzTSCH_EXEC.doStuff)
r   r   r   NNFNNNF)Ú__name__Ú
__module__Ú__qualname__r)   r?   r/   r'   r'   r'   r(   r   -   s    
ÿr   Ú__main__ÚtargetÚstorez6[[domain/]username[:password]@]<targetName or address>)ÚactionÚhelpr%   Ú*rV   z!command to execute at the target )r”   ÚnargsÚdefaultr•   z-session-idz7an existed logon session to use (no output, no cmd.exe))r”   Útyper•   z-tsÚ
store_truez&adds timestamp to every logging outputz-silentcommandFz9does not execute cmd.exe to run given command (no output))r”   r˜   r•   z-debugzTurn DEBUG output ONz-codeca  Sets encoding used (codec) from the target's output (default "%s"). If errors are detected, run chcp.com at the target, map the result with https://docs.python.org/3/library/codecs.html#standard-encodings and then execute wmiexec.py again with -codec and the corresponding codec Úauthenticationz-hasheszLMHASH:NTHASHz$NTLM hashes, format is LMHASH:NTHASH)r”   Úmetavarr•   z-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 addressztIP Address of the domain controller. If omitted it will use the domain part (FQDN) specified in the target parameterz-keytabz"Read keys for SPN from keytab filerW   zutf-8z'This will work ONLY on Windows >= Vistar   z)You need to specify a command to execute!T)Úgetpassz	Password:)GÚ
__future__r   r   r_   ÚsysÚargparser{   r]   r1   Úimpacket.examplesr   Úimpacketr   Úimpacket.dcerpc.v5r   r   Úimpacket.dcerpc.v5.dtypesr   Úimpacket.dcerpc.v5.rpcrtr	   r
   Úimpacket.examples.utilsr   Úimpacket.krb5.keytabr   Úsixr   ÚstdoutÚencodingrD   r   rŽ   rB   ÚBANNERÚArgumentParserÚparserÚadd_argumentÚintÚadd_argument_groupÚgrouprX   ÚargvÚ
print_helpÚexitÚ
parse_argsÚoptionsÚinitÚtsry   ÚcodecÚwarningrT   r%   r7   r’   r    r   r   ÚaddressÚkeytabÚloadKeysFromKeytabÚkr!   Úno_passr"   r�   Údc_ipÚ
session_idÚsilentcommandÚ
atsvc_execr?   r'   r'   r'   r(   Ú<module>   s†    
G

ü






8ÿ¹