aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/scmr.go39
-rw-r--r--cmd/tsch.go9
2 files changed, 29 insertions, 19 deletions
diff --git a/cmd/scmr.go b/cmd/scmr.go
index 8105ff6..8d453a5 100644
--- a/cmd/scmr.go
+++ b/cmd/scmr.go
@@ -1,12 +1,14 @@
package cmd
import (
+ "fmt"
+ "github.com/FalconOpsLLC/goexec/internal/exec"
+ scmrexec2 "github.com/FalconOpsLLC/goexec/internal/exec/scmr"
+ "github.com/FalconOpsLLC/goexec/internal/windows"
"github.com/RedTeamPentesting/adauth"
"github.com/spf13/cobra"
- "github.com/FalconOpsLLC/goexec/pkg/exec"
- scmrexec "github.com/FalconOpsLLC/goexec/pkg/exec/scmr"
- "github.com/FalconOpsLLC/goexec/pkg/windows"
+ scmrexec "github.com/FalconOpsLLC/goexec/internal/exec/scmr"
)
func scmrCmdInit() {
@@ -17,11 +19,10 @@ func scmrCmdInit() {
scmrCmd.MarkPersistentFlagRequired("executable-path")
scmrCmd.MarkPersistentFlagRequired("service-name")
- scmrChangeCmdInit()
scmrCmd.AddCommand(scmrChangeCmd)
-
scmrCreateCmdInit()
scmrCmd.AddCommand(scmrCreateCmd)
+ scmrChangeCmdInit()
}
func scmrChangeCmdInit() {
@@ -40,17 +41,29 @@ var (
scmrNoDelete bool
scmrNoStart bool
+ scmrArgs = func(cmd *cobra.Command, args []string) (err error) {
+ if len(args) != 1 {
+ return fmt.Errorf("expected exactly 1 positional argument, got %d", len(args))
+ }
+ if creds, target, err = authOpts.WithTarget(ctx, "cifs", args[0]); err != nil {
+ return fmt.Errorf("failed to parse target: %w", err)
+ }
+ log.Debug().Str("target", args[0]).Msg("Resolved target")
+ return nil
+ }
+
creds *adauth.Credential
target *adauth.Target
scmrCmd = &cobra.Command{
Use: "scmr",
Short: "Establish execution via SCMR",
+ Args: cobra.NoArgs,
}
scmrCreateCmd = &cobra.Command{
Use: "create [target]",
Short: "Create & run a new Windows service to gain execution",
- Args: needsTarget,
+ Args: scmrArgs,
RunE: func(cmd *cobra.Command, args []string) (err error) {
if scmrNoDelete {
log.Warn().Msg("Service will not be deleted after execution")
@@ -59,13 +72,13 @@ var (
scmrDisplayName = scmrName
log.Warn().Msg("No display name specified, using service name as display name")
}
- module := scmrexec.Module{}
+ executor := scmrexec.Module{}
execCfg := &exec.ExecutionConfig{
ExecutablePath: executablePath,
ExecutableArgs: executableArgs,
- ExecutionMethod: scmrexec.MethodCreate,
+ ExecutionMethod: scmrexec2.MethodCreate,
- ExecutionMethodConfig: scmrexec.MethodCreateConfig{
+ ExecutionMethodConfig: scmrexec2.MethodCreateConfig{
NoDelete: scmrNoDelete,
ServiceName: scmrName,
DisplayName: scmrDisplayName,
@@ -73,7 +86,7 @@ var (
StartType: windows.SERVICE_DEMAND_START,
},
}
- if err := module.Exec(log.WithContext(ctx), creds, target, execCfg); err != nil {
+ if err := executor.Exec(log.WithContext(ctx), creds, target, execCfg); err != nil {
log.Fatal().Err(err).Msg("SCMR execution failed")
}
return nil
@@ -82,15 +95,15 @@ var (
scmrChangeCmd = &cobra.Command{
Use: "change [target]",
Short: "Change an existing Windows service to gain execution",
- Args: needsTarget,
+ Args: scmrArgs,
Run: func(cmd *cobra.Command, args []string) {
executor := scmrexec.Module{}
execCfg := &exec.ExecutionConfig{
ExecutablePath: executablePath,
ExecutableArgs: executableArgs,
- ExecutionMethod: scmrexec.MethodModify,
+ ExecutionMethod: scmrexec2.MethodModify,
- ExecutionMethodConfig: scmrexec.MethodModifyConfig{
+ ExecutionMethodConfig: scmrexec2.MethodModifyConfig{
NoStart: scmrNoStart,
ServiceName: scmrName,
},
diff --git a/cmd/tsch.go b/cmd/tsch.go
index 6be81b8..05c55cf 100644
--- a/cmd/tsch.go
+++ b/cmd/tsch.go
@@ -1,9 +1,8 @@
package cmd
import (
- "fmt"
- "github.com/FalconOpsLLC/goexec/pkg/exec"
- tschexec "github.com/FalconOpsLLC/goexec/pkg/exec/tsch"
+ "github.com/FalconOpsLLC/goexec/internal/exec"
+ "github.com/FalconOpsLLC/goexec/internal/exec/tsch"
"github.com/spf13/cobra"
"time"
)
@@ -60,9 +59,7 @@ var (
tschCmd = &cobra.Command{
Use: "tsch",
Short: "Establish execution via TSCH (ITaskSchedulerService)",
- Args: func(cmd *cobra.Command, args []string) error {
- return fmt.Errorf("command not set. Choose from (delete, register, demand)")
- },
+ Args: cobra.NoArgs,
}
tschRegisterCmd = &cobra.Command{
Use: "register [target]",