diff options
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/scmr.go | 39 | ||||
-rw-r--r-- | cmd/tsch.go | 9 |
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]", |