Skip to content
68 changes: 44 additions & 24 deletions cmd/args.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,6 @@ func registerNetworkFlags(fs *pflag.FlagSet) {
//cmd.MarkFlagsMutuallyExclusive("no-epm", "epm-filter")
}

// FUTURE: automatically stage & execute file
/*
func registerStageFlags(fs *pflag.FlagSet) {
fs.StringVarP(&stageFilePath, "stage", "E", "", "File to stage and execute")
//fs.StringVarP(&stageArgs ...)
}
*/

func registerExecutionFlags(fs *pflag.FlagSet) {
fs.StringVarP(&exec.Input.Executable, "exec", "e", "", "Remote Windows `executable` to invoke")
fs.StringVarP(&exec.Input.Arguments, "args", "a", "", "Process command line arguments")
Expand All @@ -57,6 +49,12 @@ func registerExecutionFlags(fs *pflag.FlagSet) {
//cmd.MarkFlagsMutuallyExclusive("executable", "command")
}

func registerExecutionUploadFlags(fs *pflag.FlagSet) {
fs.StringVar(&uploadSource, "upload", "", "Upload local `file` to remote filesystem")
fs.StringVar(&uploadDest, "upload-dest", "", "Remote destination `path` for uploaded file (default: random temp path)")
fs.BoolVar(&exec.Upload.NoConfirm, "no-upload-confirm", false, "Skip upload confirmation check")
}

func registerExecutionOutputFlags(fs *pflag.FlagSet) {
fs.StringVarP(&outputPath, "out", "o", "", "Fetch execution output to `file` or \"-\" for standard output")
fs.StringVarP(&outputMethod, "out-method", "m", "smb", "Method to fetch execution output")
Expand Down Expand Up @@ -153,24 +151,46 @@ func argsRpcClient(proto string, endpoint string) func(cmd *cobra.Command, args

func argsOutput(methods ...string) func(cmd *cobra.Command, args []string) error {

var as []func(*cobra.Command, []string) error
var as []func(*cobra.Command, []string) error

for _, method := range methods {
if method == "smb" {
as = append(as, argsSmbClient())
}
}
for _, method := range methods {
if method == "smb" {
as = append(as, argsSmbClient())
}
}

return args(append(as, func(*cobra.Command, []string) (err error) {
return args(append(as, func(*cobra.Command, []string) (err error) {

if outputPath != "" {
if outputPath == "-" {
exec.Output.Writer = os.Stdout
if outputPath != "" {
if outputPath == "-" {
exec.Output.Writer = os.Stdout

} else if exec.Output.Writer, err = os.OpenFile(outputPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644); err != nil {
log.Fatal().Err(err).Msg("Failed to open output file")
}
}
return
})...)
} else if exec.Output.Writer, err = os.OpenFile(outputPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644); err != nil {
log.Fatal().Err(err).Msg("Failed to open output file")
}
}
return
})...)
}

func argsUpload(methods ...string) func(cmd *cobra.Command, args []string) error {

var as []func(*cobra.Command, []string) error

for _, method := range methods {
if method == "smb" {
as = append(as, argsSmbClient())
}
}

return args(append(as, func(*cobra.Command, []string) (err error) {

if uploadSource != "" {
exec.Upload.Reader, err = os.Open(uploadSource)
if err != nil {
return fmt.Errorf("open upload file: %w", err)
}
}
return
})...)
}
Loading
Loading