diff --git a/AdaptixServer/extenders/gopher_agent/pl_agent.go b/AdaptixServer/extenders/gopher_agent/pl_agent.go index 9abce944..422305d5 100644 --- a/AdaptixServer/extenders/gopher_agent/pl_agent.go +++ b/AdaptixServer/extenders/gopher_agent/pl_agent.go @@ -381,14 +381,28 @@ func CreateTask(ts Teamserver, agent adaptix.AgentData, args map[string]any) (ad switch command { case "cat": + taskData.Type = TYPE_JOB + path, ok := args["path"].(string) if !ok { err = errors.New("parameter 'path' must be set") goto RET } - packerData, _ := msgpack.Marshal(ParamsCat{Path: path}) - cmd = Command{Code: COMMAND_CAT, Data: packerData} + r := make([]byte, 4) + _, _ = rand.Read(r) + taskId := binary.BigEndian.Uint32(r) + taskData.TaskId = fmt.Sprintf("%08x", taskId) + + if agent.Os == OS_WINDOWS { + cmdArgs := []string{"/c", fmt.Sprintf("type %s", path)} + packerData, _ := msgpack.Marshal(ParamsRun{Program: "C:\\Windows\\System32\\cmd.exe", Args: cmdArgs, Task: taskData.TaskId}) + cmd = Command{Code: COMMAND_RUN, Data: packerData} + } else { + cmdArgs := []string{path} + packerData, _ := msgpack.Marshal(ParamsRun{Program: "/bin/cat", Args: cmdArgs, Task: taskData.TaskId}) + cmd = Command{Code: COMMAND_RUN, Data: packerData} + } case "cd": path, ok := args["path"].(string) @@ -498,13 +512,28 @@ func CreateTask(ts Teamserver, agent adaptix.AgentData, args map[string]any) (ad cmd = Command{Code: COMMAND_KILL, Data: packerData} case "ls": + taskData.Type = TYPE_JOB + dir, ok := args["directory"].(string) if !ok { err = errors.New("parameter 'directory' must be set") goto RET } - packerData, _ := msgpack.Marshal(ParamsLs{Path: dir}) - cmd = Command{Code: COMMAND_LS, Data: packerData} + + r := make([]byte, 4) + _, _ = rand.Read(r) + taskId := binary.BigEndian.Uint32(r) + taskData.TaskId = fmt.Sprintf("%08x", taskId) + + if agent.Os == OS_WINDOWS { + cmdArgs := []string{"/c", fmt.Sprintf("dir %s", dir)} + packerData, _ := msgpack.Marshal(ParamsRun{Program: "C:\\Windows\\System32\\cmd.exe", Args: cmdArgs, Task: taskData.TaskId}) + cmd = Command{Code: COMMAND_RUN, Data: packerData} + } else { + cmdArgs := []string{"-la", dir} + packerData, _ := msgpack.Marshal(ParamsRun{Program: "/bin/ls", Args: cmdArgs, Task: taskData.TaskId}) + cmd = Command{Code: COMMAND_RUN, Data: packerData} + } case "mv": src, ok := args["src"].(string) @@ -532,10 +561,39 @@ func CreateTask(ts Teamserver, agent adaptix.AgentData, args map[string]any) (ad cmd = Command{Code: COMMAND_MKDIR, Data: packerData} case "ps": - cmd = Command{Code: COMMAND_PS, Data: nil} + taskData.Type = TYPE_JOB + + r := make([]byte, 4) + _, _ = rand.Read(r) + taskId := binary.BigEndian.Uint32(r) + taskData.TaskId = fmt.Sprintf("%08x", taskId) + + if agent.Os == OS_WINDOWS { + cmdArgs := []string{"/c", "tasklist"} + packerData, _ := msgpack.Marshal(ParamsRun{Program: "C:\\Windows\\System32\\cmd.exe", Args: cmdArgs, Task: taskData.TaskId}) + cmd = Command{Code: COMMAND_RUN, Data: packerData} + } else { + cmdArgs := []string{"-ef"} + packerData, _ := msgpack.Marshal(ParamsRun{Program: "/bin/ps", Args: cmdArgs, Task: taskData.TaskId}) + cmd = Command{Code: COMMAND_RUN, Data: packerData} + } case "pwd": - cmd = Command{Code: COMMAND_PWD, Data: nil} + taskData.Type = TYPE_JOB + + r := make([]byte, 4) + _, _ = rand.Read(r) + taskId := binary.BigEndian.Uint32(r) + taskData.TaskId = fmt.Sprintf("%08x", taskId) + + if agent.Os == OS_WINDOWS { + cmdArgs := []string{"/c", "cd"} + packerData, _ := msgpack.Marshal(ParamsRun{Program: "C:\\Windows\\System32\\cmd.exe", Args: cmdArgs, Task: taskData.TaskId}) + cmd = Command{Code: COMMAND_RUN, Data: packerData} + } else { + packerData, _ := msgpack.Marshal(ParamsRun{Program: "/bin/pwd", Args: []string{}, Task: taskData.TaskId}) + cmd = Command{Code: COMMAND_RUN, Data: packerData} + } case "rev2self": cmd = Command{Code: COMMAND_REV2SELF, Data: nil} @@ -572,20 +630,27 @@ func CreateTask(ts Teamserver, agent adaptix.AgentData, args map[string]any) (ad cmd = Command{Code: COMMAND_RUN, Data: packerData} case "shell": + taskData.Type = TYPE_JOB + cmdParam, ok := args["cmd"].(string) if !ok { err = errors.New("parameter 'cmd' must be set") goto RET } + r := make([]byte, 4) + _, _ = rand.Read(r) + taskId := binary.BigEndian.Uint32(r) + taskData.TaskId = fmt.Sprintf("%08x", taskId) + if agent.Os == OS_WINDOWS { cmdArgs := []string{"/c", cmdParam} - packerData, _ := msgpack.Marshal(ParamsShell{Program: "C:\\Windows\\System32\\cmd.exe", Args: cmdArgs}) - cmd = Command{Code: COMMAND_SHELL, Data: packerData} + packerData, _ := msgpack.Marshal(ParamsRun{Program: "C:\\Windows\\System32\\cmd.exe", Args: cmdArgs, Task: taskData.TaskId}) + cmd = Command{Code: COMMAND_RUN, Data: packerData} } else { cmdArgs := []string{"-c", cmdParam} - packerData, _ := msgpack.Marshal(ParamsShell{Program: "/bin/sh", Args: cmdArgs}) - cmd = Command{Code: COMMAND_SHELL, Data: packerData} + packerData, _ := msgpack.Marshal(ParamsRun{Program: "/bin/sh", Args: cmdArgs, Task: taskData.TaskId}) + cmd = Command{Code: COMMAND_RUN, Data: packerData} } case "screenshot":