Skip to content

Commit 4ed5172

Browse files
committed
v3.2.20-rc9
Fixed SendMythicRPCTaskSearch and added new data sent out for logging
1 parent f7a002e commit 4ed5172

6 files changed

+26
-4
lines changed

CHANGELOG.MD

+7
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## [3.2.20-rc9] - 2024-04-08
8+
9+
### Changed
10+
11+
- Added CallbackDisplayID, PayloadType, IsInteractiveTask, and InteractiveTaskType to RPC Search results and new_task logging data
12+
- Fixed an issue with SendMythicRPCTaskSearch
13+
714
## [3.2.20-rc8] - 2024-04-05
815

916
### Changed

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.2.20-rc8
1+
3.2.20-rc9

mythic-docker/src/rabbitmq/recv_mythic_rpc_task_search.go

+2
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ func MythicRPCTaskSearch(input MythicRPCTaskSearchMessage) MythicRPCTaskSearchMe
105105
searchString += `AND task.id=:search_id `
106106
}
107107
paramDict["search_id"] = *input.SearchTaskID
108+
setAnySearchValues = true
108109
}
109110
if input.SearchTaskDisplayID != nil {
110111
if !setAnySearchValues {
@@ -113,6 +114,7 @@ func MythicRPCTaskSearch(input MythicRPCTaskSearchMessage) MythicRPCTaskSearchMe
113114
searchString += `AND task.display_id=:search_display_id `
114115
}
115116
paramDict["search_display_id"] = *input.SearchTaskDisplayID
117+
setAnySearchValues = true
116118
}
117119
if !setAnySearchValues {
118120
searchString += `WHERE task.id=:id`

mythic-docker/src/rabbitmq/structs.go

+4
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ type PTTaskMessageTaskData struct {
7373
Params string `json:"params"`
7474
Timestamp string `json:"timestamp"`
7575
CallbackID int `json:"callback_id"`
76+
CallbackDisplayID int `json:"callback_display_id"`
77+
PayloadType string `json:"payload_type"`
7678
Status string `json:"status"`
7779
OriginalParams string `json:"original_params"`
7880
DisplayParams string `json:"display_params"`
@@ -101,6 +103,8 @@ type PTTaskMessageTaskData struct {
101103
TaskingLocation string `json:"tasking_location"`
102104
ParameterGroupName string `json:"parameter_group_name"`
103105
TokenID int `json:"token_id"`
106+
InteractiveTaskType int `json:"interactive_task_type"`
107+
IsInteractiveTask bool `json:"is_interactive_task"`
104108
}
105109

106110
type PTTaskMessageCallbackData struct {

mythic-docker/src/rabbitmq/utils.go

+10-1
Original file line numberDiff line numberDiff line change
@@ -959,9 +959,14 @@ func GetTaskMessageTaskInformation(taskID int) PTTaskMessageTaskData {
959959
// select task data, then marshal/unmarshal it as a quick way to filter out attributes
960960
err := database.DB.Get(&databaseTask, `SELECT
961961
task.*,
962-
operator.username "operator.username"
962+
callback.display_id "callback.display_id",
963+
operator.username "operator.username",
964+
payloadtype.name "callback.payload.payloadtype.name"
963965
FROM task
964966
JOIN operator ON task.operator_id = operator.id
967+
JOIN callback ON task.callback_id = callback.id
968+
JOIN payload ON callback.registered_payload_id = payload.id
969+
JOIN payloadtype ON payload.payload_type_id = payloadtype.id
965970
WHERE task.id=$1`, taskID)
966971
if err != nil {
967972
logging.LogError(err, "Failed to get task information")
@@ -980,6 +985,8 @@ func GetTaskMessageTaskInformation(taskID int) PTTaskMessageTaskData {
980985
Params: databaseTask.Params,
981986
Timestamp: databaseTask.Timestamp.String(),
982987
CallbackID: databaseTask.CallbackID,
988+
CallbackDisplayID: databaseTask.Callback.DisplayID,
989+
PayloadType: databaseTask.Callback.Payload.Payloadtype.Name,
983990
Status: databaseTask.Status,
984991
OriginalParams: databaseTask.OriginalParams,
985992
DisplayParams: databaseTask.DisplayParams,
@@ -1007,6 +1014,8 @@ func GetTaskMessageTaskInformation(taskID int) PTTaskMessageTaskData {
10071014
SubtaskGroupName: databaseTask.SubtaskGroupName,
10081015
TaskingLocation: databaseTask.TaskingLocation,
10091016
ParameterGroupName: databaseTask.ParameterGroupName,
1017+
IsInteractiveTask: databaseTask.IsInteractiveTask,
1018+
InteractiveTaskType: int(databaseTask.InteractiveTaskType.Int64),
10101019
}
10111020
if databaseTask.TokenID.Valid {
10121021
err = database.DB.Get(&data.TokenID, `SELECT token_id FROM token WHERE id=$1`, databaseTask.TokenID.Int64)

mythic-docker/src/rabbitmq/utils_siem_message_create_and_emit.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
func emitTaskLog(taskId int) {
1111
task := databaseStructs.Task{}
1212
if err := database.DB.Get(&task, `SELECT
13-
task.*,
1413
operation.name "operation.name",
1514
operator.username "operator.username"
1615
FROM task
@@ -19,13 +18,14 @@ func emitTaskLog(taskId int) {
1918
WHERE task.id=$1`, taskId); err != nil {
2019
logging.LogError(err, "Failed to fetch task data for log emit")
2120
} else {
21+
data := GetTaskMessageTaskInformation(taskId)
2222
go RabbitMQConnection.EmitSiemMessage(LoggingMessage{
2323
OperationID: task.OperationID,
2424
OperationName: task.Operation.Name,
2525
OperatorName: task.Operator.Username,
2626
Timestamp: time.Now().UTC(),
2727
Action: LOG_TYPE_TASK,
28-
Data: task,
28+
Data: data,
2929
})
3030
}
3131
}

0 commit comments

Comments
 (0)