diff options
Diffstat (limited to 'cmd/scmr.go')
-rw-r--r-- | cmd/scmr.go | 50 |
1 files changed, 13 insertions, 37 deletions
diff --git a/cmd/scmr.go b/cmd/scmr.go index 150320c..df0bc84 100644 --- a/cmd/scmr.go +++ b/cmd/scmr.go @@ -1,8 +1,6 @@ package cmd import ( - "errors" - "fmt" "github.com/bryanmcnulty/adauth" "github.com/spf13/cobra" @@ -12,26 +10,26 @@ import ( ) func scmrCmdInit() { - scmrCmd.PersistentFlags().StringVarP(&executablePath, "executable-path", "e", "", "Full path to remote Windows executable") + scmrCmd.PersistentFlags().StringVarP(&executablePath, "executable-path", "f", "", "Full path to remote Windows executable") scmrCmd.PersistentFlags().StringVarP(&executableArgs, "args", "a", "", "Arguments to pass to executable") - scmrCmd.PersistentFlags().StringVarP(&scmrName, "service", "s", "", "Name of service to create or modify") - scmrCmd.PersistentFlags().BoolVar(&scmrNoStart, "no-start", false, "Don't start service after execution") + scmrCmd.PersistentFlags().StringVarP(&scmrName, "service-name", "s", "", "Name of service to create or modify") scmrCmd.MarkPersistentFlagRequired("executable-path") - scmrCmd.MarkPersistentFlagRequired("service") + scmrCmd.MarkPersistentFlagRequired("service-name") - scmrCmd.AddCommand(scmrChangeCmd) scmrChangeCmdInit() - scmrCmd.AddCommand(scmrCreateCmd) + scmrCmd.AddCommand(scmrChangeCmd) + scmrCreateCmdInit() + scmrCmd.AddCommand(scmrCreateCmd) } func scmrChangeCmdInit() { - // no unique flags + scmrChangeCmd.Flags().StringVarP(&scmrDisplayName, "display-name", "n", "", "Display name of service to create") + scmrChangeCmd.Flags().BoolVar(&scmrNoStart, "no-start", false, "Don't start service") } func scmrCreateCmdInit() { - scmrCreateCmd.Flags().StringVarP(&scmrDisplayName, "display-name", "n", "", "Display name new service") scmrCreateCmd.Flags().BoolVar(&scmrNoDelete, "no-delete", false, "Don't delete service after execution") } @@ -42,39 +40,17 @@ 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: func(cmd *cobra.Command, args []string) error { - if len(args) != 1 { - return errors.New(`command not set. Choose from (change, create)`) - } - return nil - }, - Run: func(cmd *cobra.Command, args []string) { - if err := cmd.Help(); err != nil { - panic(err) - } - }, } scmrCreateCmd = &cobra.Command{ Use: "create [target]", Short: "Create & run a new Windows service to gain execution", - Args: scmrArgs, + Args: needsTarget, RunE: func(cmd *cobra.Command, args []string) (err error) { if scmrNoDelete { log.Warn().Msg("Service will not be deleted after execution") @@ -83,7 +59,7 @@ var ( scmrDisplayName = scmrName log.Warn().Msg("No display name specified, using service name as display name") } - executor := scmrexec.Executor{} + module := scmrexec.Module{} execCfg := &exec.ExecutionConfig{ ExecutablePath: executablePath, ExecutableArgs: executableArgs, @@ -97,7 +73,7 @@ var ( StartType: windows.SERVICE_DEMAND_START, }, } - if err := executor.Exec(log.WithContext(ctx), creds, target, execCfg); err != nil { + if err := module.Exec(log.WithContext(ctx), creds, target, execCfg); err != nil { log.Fatal().Err(err).Msg("SCMR execution failed") } return nil @@ -106,9 +82,9 @@ var ( scmrChangeCmd = &cobra.Command{ Use: "change [target]", Short: "Change an existing Windows service to gain execution", - Args: scmrArgs, + Args: needsTarget, Run: func(cmd *cobra.Command, args []string) { - executor := scmrexec.Executor{} + executor := scmrexec.Module{} execCfg := &exec.ExecutionConfig{ ExecutablePath: executablePath, ExecutableArgs: executableArgs, |