aboutsummaryrefslogtreecommitdiff
path: root/cmd/scmr.go
diff options
context:
space:
mode:
authorBryan McNulty <bryanmcnulty@protonmail.com>2025-03-01 20:50:04 -0600
committerBryan McNulty <bryanmcnulty@protonmail.com>2025-03-01 20:50:04 -0600
commit6dcae18a99ba7f7ca44c246d0e72b4d9410eb60c (patch)
tree2c9d4e482cb42d820f853a1bc2e92205b9eeba50 /cmd/scmr.go
parent50393c546010da3745b1d80f156aeb713f3411dc (diff)
downloadgoexec-6dcae18a99ba7f7ca44c246d0e72b4d9410eb60c.tar.gz
goexec-6dcae18a99ba7f7ca44c246d0e72b4d9410eb60c.zip
Added tsch module
Diffstat (limited to 'cmd/scmr.go')
-rw-r--r--cmd/scmr.go50
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,