diff options
author | Bryan McNulty <bryanmcnulty@protonmail.com> | 2025-03-12 08:25:25 -0500 |
---|---|---|
committer | Bryan McNulty <bryanmcnulty@protonmail.com> | 2025-03-12 08:25:25 -0500 |
commit | 8a2631d9348c81a724e30b0e2913f3e7bb1bb56f (patch) | |
tree | d2c57be4af18fe0df4e4a321c93e67667e7fc838 /cmd | |
parent | f0282781781bc9426f6c692226a01f54418c5923 (diff) | |
download | goexec-8a2631d9348c81a724e30b0e2913f3e7bb1bb56f.tar.gz goexec-8a2631d9348c81a724e30b0e2913f3e7bb1bb56f.zip |
Small optimizations #2
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/rpc.go | 118 |
1 files changed, 59 insertions, 59 deletions
@@ -1,76 +1,76 @@ package cmd import ( - "fmt" - "github.com/FalconOpsLLC/goexec/internal/client/dce" - "github.com/oiweiwei/go-msrpc/dcerpc" - "github.com/spf13/cobra" - "github.com/spf13/pflag" - "regexp" + "fmt" + "github.com/FalconOpsLLC/goexec/internal/client/dce" + "github.com/oiweiwei/go-msrpc/dcerpc" + "github.com/spf13/cobra" + "github.com/spf13/pflag" + "regexp" ) func needsRpcTarget(proto string) func(cmd *cobra.Command, args []string) error { - return func(cmd *cobra.Command, args []string) (err error) { + return func(cmd *cobra.Command, args []string) (err error) { - if err = needsTarget(proto)(cmd, args); err != nil { - return err - } - if argDceStringBinding != "" { - dceConfig.Endpoint, err = dcerpc.ParseStringBinding(argDceStringBinding) - if err != nil { - return fmt.Errorf("failed to parse RPC endpoint: %w", err) - } - dceConfig.NoEpm = true // If an explicit endpoint is set, don't use EPM + if err = needsTarget(proto)(cmd, args); err != nil { + return err + } + if argDceStringBinding != "" { + dceConfig.Endpoint, err = dcerpc.ParseStringBinding(argDceStringBinding) + if err != nil { + return fmt.Errorf("failed to parse RPC endpoint: %w", err) + } + dceConfig.NoEpm = true // If an explicit endpoint is set, don't use EPM - } else if argDceEpmFilter != "" { - // This ensures that filters like "ncacn_ip_tcp" will be made into a valid binding (i.e. "ncacn_ip_tcp:") - if ok, err := regexp.MatchString(`^\w+$`, argDceEpmFilter); err == nil && ok { - argDceEpmFilter += ":" - } - dceConfig.EpmFilter, err = dcerpc.ParseStringBinding(argDceEpmFilter) - if err != nil { - return fmt.Errorf("failed to parse EPM filter: %w", err) - } - } - if hostname != "" { - dceConfig.DceOptions = append(dceConfig.DceOptions, dcerpc.WithTargetName(fmt.Sprintf("%s/%s", proto, hostname))) - } - if !argDceNoSign { - dceConfig.DceOptions = append(dceConfig.DceOptions, dcerpc.WithSign()) - dceConfig.EpmOptions = append(dceConfig.EpmOptions, dcerpc.WithSign()) - } - if argDceNoSeal { - dceConfig.DceOptions = append(dceConfig.DceOptions, dcerpc.WithInsecure()) - } else { - dceConfig.DceOptions = append(dceConfig.DceOptions, dcerpc.WithSeal(), dcerpc.WithSecurityLevel(dcerpc.AuthLevelPktPrivacy)) - dceConfig.EpmOptions = append(dceConfig.EpmOptions, dcerpc.WithSeal(), dcerpc.WithSecurityLevel(dcerpc.AuthLevelPktPrivacy)) - } - return nil - } + } else if argDceEpmFilter != "" { + // This ensures that filters like "ncacn_ip_tcp" will be made into a valid binding (i.e. "ncacn_ip_tcp:") + if ok, err := regexp.MatchString(`^\w+$`, argDceEpmFilter); err == nil && ok { + argDceEpmFilter += ":" + } + dceConfig.EpmFilter, err = dcerpc.ParseStringBinding(argDceEpmFilter) + if err != nil { + return fmt.Errorf("failed to parse EPM filter: %w", err) + } + } + if hostname != "" { + dceConfig.DceOptions = append(dceConfig.DceOptions, dcerpc.WithTargetName(fmt.Sprintf("%s/%s", proto, hostname))) + } + if !argDceNoSign { + dceConfig.DceOptions = append(dceConfig.DceOptions, dcerpc.WithSign()) + dceConfig.EpmOptions = append(dceConfig.EpmOptions, dcerpc.WithSign()) + } + if argDceNoSeal { + dceConfig.DceOptions = append(dceConfig.DceOptions, dcerpc.WithInsecure()) + } else { + dceConfig.DceOptions = append(dceConfig.DceOptions, dcerpc.WithSeal(), dcerpc.WithSecurityLevel(dcerpc.AuthLevelPktPrivacy)) + dceConfig.EpmOptions = append(dceConfig.EpmOptions, dcerpc.WithSeal(), dcerpc.WithSecurityLevel(dcerpc.AuthLevelPktPrivacy)) + } + return nil + } } var ( - // DCE arguments - argDceStringBinding string - argDceEpmFilter string - argDceNoSeal bool - argDceNoSign bool + // DCE arguments + argDceStringBinding string + argDceEpmFilter string + argDceNoSeal bool + argDceNoSign bool - // DCE options - dceStringBinding *dcerpc.StringBinding - dceConfig dce.ConnectionMethodDCEConfig + // DCE options + dceStringBinding *dcerpc.StringBinding + dceConfig dce.ConnectionMethodDCEConfig ) func registerRpcFlags(cmd *cobra.Command) { - rpcFlags := pflag.NewFlagSet("RPC", pflag.ExitOnError) - rpcFlags.BoolVar(&dceConfig.NoEpm, "no-epm", false, "Do not use EPM to automatically detect endpoints") - rpcFlags.BoolVar(&dceConfig.EpmAuto, "epm-auto", false, "Automatically detect endpoints instead of using the module defaults") - rpcFlags.BoolVar(&argDceNoSign, "no-sign", false, "Disable signing on DCE messages") - rpcFlags.BoolVar(&argDceNoSeal, "no-seal", false, "Disable packet stub encryption on DCE messages") - rpcFlags.StringVarP(&argDceEpmFilter, "epm-filter", "F", "", "String binding to filter endpoints returned by EPM") - rpcFlags.StringVar(&argDceStringBinding, "endpoint", "", "Explicit RPC endpoint definition") - cmd.PersistentFlags().AddFlagSet(rpcFlags) + rpcFlags := pflag.NewFlagSet("RPC", pflag.ExitOnError) + rpcFlags.BoolVar(&dceConfig.NoEpm, "no-epm", false, "Do not use EPM to automatically detect endpoints") + rpcFlags.BoolVar(&dceConfig.EpmAuto, "epm-auto", false, "Automatically detect endpoints instead of using the module defaults") + rpcFlags.BoolVar(&argDceNoSign, "no-sign", false, "Disable signing on DCE messages") + rpcFlags.BoolVar(&argDceNoSeal, "no-seal", false, "Disable packet stub encryption on DCE messages") + rpcFlags.StringVarP(&argDceEpmFilter, "epm-filter", "F", "", "String binding to filter endpoints returned by EPM") + rpcFlags.StringVar(&argDceStringBinding, "endpoint", "", "Explicit RPC endpoint definition") + cmd.PersistentFlags().AddFlagSet(rpcFlags) - cmd.MarkFlagsMutuallyExclusive("endpoint", "epm-filter") - cmd.MarkFlagsMutuallyExclusive("no-epm", "epm-filter") + cmd.MarkFlagsMutuallyExclusive("endpoint", "epm-filter") + cmd.MarkFlagsMutuallyExclusive("no-epm", "epm-filter") } |