diff --git a/client/command/filesystem.go b/client/command/filesystem.go index ad2cfccd52..f7ffcb7117 100644 --- a/client/command/filesystem.go +++ b/client/command/filesystem.go @@ -187,10 +187,10 @@ func cat(ctx *grumble.Context, rpc rpcpb.SliverRPCClient) { } if ctx.Flags.Bool("colorize-output") { if err = colorize(download); err != nil { - fmt.Printf(string(download.Data)) + fmt.Println(string(download.Data)) } } else { - fmt.Printf(string(download.Data)) + fmt.Println(string(download.Data)) } } diff --git a/client/command/generate.go b/client/command/generate.go index 0bd89cd598..cabdffcf7d 100644 --- a/client/command/generate.go +++ b/client/command/generate.go @@ -25,6 +25,7 @@ import ( "fmt" "io/ioutil" "log" + "net" "net/url" "os" "path" @@ -162,6 +163,30 @@ func generateStager(ctx *grumble.Context, rpc rpcpb.SliverRPCClient) { fmt.Println(Warn + "please specify a listening host") return } + match, err := regexp.MatchString(`^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$`, lhost) + if err != nil { + return + } + if !match { + addr, err := net.LookupHost(lhost) + if err != nil { + fmt.Printf(Warn+"Error resolving %s: %v\n", lhost, err) + return + } + if len(addr) > 1 { + prompt := &survey.Select{ + Message: "Select an address", + Options: addr, + } + err := survey.AskOne(prompt, &lhost) + if err != nil { + fmt.Printf(Warn+"Error: %v\n", err) + return + } + } else { + lhost = addr[0] + } + } lport := ctx.Flags.Int("lport") stageOS := ctx.Flags.String("os") arch := ctx.Flags.String("arch")