aboutsummaryrefslogtreecommitdiff
path: root/cmd/scmr.go
diff options
context:
space:
mode:
authorBryan McNulty <bryanmcnulty@protonmail.com>2025-03-08 08:35:09 -0600
committerBryan McNulty <bryanmcnulty@protonmail.com>2025-03-08 08:35:09 -0600
commit8360747c22987c8f7de7b4d19cf2d6ee68994183 (patch)
tree937bcd554ee9b7442e66bfa771b6a25016202211 /cmd/scmr.go
parent7574b7370be083ff563fa8ad6d01d5ac776d7e4d (diff)
downloadgoexec-8360747c22987c8f7de7b4d19cf2d6ee68994183.tar.gz
goexec-8360747c22987c8f7de7b4d19cf2d6ee68994183.zip
Some quick fixes and validations
Diffstat (limited to 'cmd/scmr.go')
-rw-r--r--cmd/scmr.go184
1 files changed, 92 insertions, 92 deletions
diff --git a/cmd/scmr.go b/cmd/scmr.go
index 8d453a5..f2f0d51 100644
--- a/cmd/scmr.go
+++ b/cmd/scmr.go
@@ -1,116 +1,116 @@
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"
+ "fmt"
+ "github.com/FalconOpsLLC/goexec/internal/exec"
+ "github.com/FalconOpsLLC/goexec/internal/windows"
+ "github.com/RedTeamPentesting/adauth"
+ "github.com/spf13/cobra"
- scmrexec "github.com/FalconOpsLLC/goexec/internal/exec/scmr"
+ scmrexec "github.com/FalconOpsLLC/goexec/internal/exec/scmr"
)
func scmrCmdInit() {
- 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-name", "s", "", "Name of service to create or modify")
+ registerRpcFlags(scmrCmd)
+ 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-name", "s", "", "Name of service to create or modify")
- scmrCmd.MarkPersistentFlagRequired("executable-path")
- scmrCmd.MarkPersistentFlagRequired("service-name")
+ scmrCmd.MarkPersistentFlagRequired("executable-path")
+ scmrCmd.MarkPersistentFlagRequired("service-name")
- scmrCmd.AddCommand(scmrChangeCmd)
- scmrCreateCmdInit()
- scmrCmd.AddCommand(scmrCreateCmd)
- scmrChangeCmdInit()
+ scmrCmd.AddCommand(scmrChangeCmd)
+ scmrCreateCmdInit()
+ scmrCmd.AddCommand(scmrCreateCmd)
+ scmrChangeCmdInit()
}
func scmrChangeCmdInit() {
- scmrChangeCmd.Flags().StringVarP(&scmrDisplayName, "display-name", "n", "", "Display name of service to create")
- scmrChangeCmd.Flags().BoolVar(&scmrNoStart, "no-start", false, "Don't start service")
+ 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().BoolVar(&scmrNoDelete, "no-delete", false, "Don't delete service after execution")
+ scmrCreateCmd.Flags().BoolVar(&scmrNoDelete, "no-delete", false, "Don't delete service after execution")
}
var (
- // scmr arguments
- scmrName string
- scmrDisplayName string
- scmrNoDelete bool
- scmrNoStart bool
+ // scmr arguments
+ scmrName string
+ scmrDisplayName string
+ 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
- }
+ 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
+ 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: scmrArgs,
- RunE: func(cmd *cobra.Command, args []string) (err error) {
- if scmrNoDelete {
- log.Warn().Msg("Service will not be deleted after execution")
- }
- if scmrDisplayName == "" {
- scmrDisplayName = scmrName
- log.Warn().Msg("No display name specified, using service name as display name")
- }
- executor := scmrexec.Module{}
- execCfg := &exec.ExecutionConfig{
- ExecutablePath: executablePath,
- ExecutableArgs: executableArgs,
- ExecutionMethod: scmrexec2.MethodCreate,
+ 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: scmrArgs,
+ RunE: func(cmd *cobra.Command, args []string) (err error) {
+ if scmrNoDelete {
+ log.Warn().Msg("Service will not be deleted after execution")
+ }
+ if scmrDisplayName == "" {
+ scmrDisplayName = scmrName
+ log.Warn().Msg("No display name specified, using service name as display name")
+ }
+ executor := scmrexec.Module{}
+ execCfg := &exec.ExecutionConfig{
+ ExecutablePath: executablePath,
+ ExecutableArgs: executableArgs,
+ ExecutionMethod: scmrexec.MethodCreate,
- ExecutionMethodConfig: scmrexec2.MethodCreateConfig{
- NoDelete: scmrNoDelete,
- ServiceName: scmrName,
- DisplayName: scmrDisplayName,
- ServiceType: windows.SERVICE_WIN32_OWN_PROCESS,
- StartType: windows.SERVICE_DEMAND_START,
- },
- }
- if err := executor.Exec(log.WithContext(ctx), creds, target, execCfg); err != nil {
- log.Fatal().Err(err).Msg("SCMR execution failed")
- }
- return nil
- },
- }
- scmrChangeCmd = &cobra.Command{
- Use: "change [target]",
- Short: "Change an existing Windows service to gain execution",
- Args: scmrArgs,
- Run: func(cmd *cobra.Command, args []string) {
- executor := scmrexec.Module{}
- execCfg := &exec.ExecutionConfig{
- ExecutablePath: executablePath,
- ExecutableArgs: executableArgs,
- ExecutionMethod: scmrexec2.MethodModify,
+ ExecutionMethodConfig: scmrexec.MethodCreateConfig{
+ NoDelete: scmrNoDelete,
+ ServiceName: scmrName,
+ DisplayName: scmrDisplayName,
+ ServiceType: windows.SERVICE_WIN32_OWN_PROCESS,
+ StartType: windows.SERVICE_DEMAND_START,
+ },
+ }
+ if err := executor.Exec(log.WithContext(ctx), creds, target, execCfg); err != nil {
+ log.Fatal().Err(err).Msg("SCMR execution failed")
+ }
+ return nil
+ },
+ }
+ scmrChangeCmd = &cobra.Command{
+ Use: "change [target]",
+ Short: "Change an existing Windows service to gain execution",
+ Args: scmrArgs,
+ Run: func(cmd *cobra.Command, args []string) {
+ executor := scmrexec.Module{}
+ execCfg := &exec.ExecutionConfig{
+ ExecutablePath: executablePath,
+ ExecutableArgs: executableArgs,
+ ExecutionMethod: scmrexec.MethodModify,
- ExecutionMethodConfig: scmrexec2.MethodModifyConfig{
- NoStart: scmrNoStart,
- ServiceName: scmrName,
- },
- }
- if err := executor.Exec(log.WithContext(ctx), creds, target, execCfg); err != nil {
- log.Fatal().Err(err).Msg("SCMR execution failed")
- }
- },
- }
+ ExecutionMethodConfig: scmrexec.MethodModifyConfig{
+ NoStart: scmrNoStart,
+ ServiceName: scmrName,
+ },
+ }
+ if err := executor.Exec(log.WithContext(ctx), creds, target, execCfg); err != nil {
+ log.Fatal().Err(err).Msg("SCMR execution failed")
+ }
+ },
+ }
)