o
    j1                     @   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re 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re#*  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
ZEeEFe: 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}zztd|  t
|d| |
t
jtt
j d}td|  d}| jd u rt
|d|  n=zt
j|d| t
j| jd W n- ty } z!t|ddkst|ddkrtd d}n W Y d }~nd }~ww |std|  t
|d| }|d d dkr
d}nt d |rt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rt d$ nt|d%dkr|du rt 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 )NzDecoding 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-kzUse 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