4. Submitting Responses
The main difference between submitting a response with a post_response
and submitting responses with get_tasking
is that in a get_tasking
message with a responses
key, you'll also get back additional tasking that's available. With a post_response
message and a responses
key, you won't get back additional tasking that's ready for your agent. You can still get socks
, rpfwd
, interact
, and delegates
messages as part of your message back from Mythic, but you won't have a tasks
key.
Message Request
The contents of the JSON message from the agent to Mythic when posting tasking responses is as follows:
There are two things to note here:
responses
- This parameter is a list of all the responses for each tasking.For each element in the responses array, we have a dictionary of information about the response. We also have a
task_id
field to indicate which task this response is for. After that though, comes the actual response output from the task.If you don't want to hook a certain feature (like sending keystrokes, downloading files, creating artifacts, etc), but just want to return output to the user, the response section can be as simple as:
{"task_id": "uuid of task", "user_output": "output of task here"}
You can find many fields to send in the hooking features section, but outside of that you can set:
completed
- boolean field to indicate that the task is done or notstatus
- string field to indicate the current status of the task. If the task completes successfully, you can set this tosuccess
, otherwise you can use it to indicate a generic error mesage to the user. If you start the status witherror:
then in the Mythic UI that status message will turn red to help indicate an error. Any other status you set will appear as blue text.
To continue adding to that JSON response, you can indicate that a command is finished by adding
"completed": true
or indicate that there was an error with"status": "error"
.
Message Response
Mythic responds with the following message format for post_response requests:
If your initial responses
array to Mythic has something improperly formatted and Mythic can't deserialize it into GoLang structs, then Mythic will simply set the responses
array going back as empty. So, you can't always check for a matching response array entry for each response you send to Mythic. In this case, Mythic can't respond back with task_id
in this response array because it failed to deserialize it completely.
There are two things to note here:
responses
- This parameter is always a list and contains a success or error + error message for each task that was responded to.delegates
- This parameter contains any responses for the messages that came through in the first message
Last updated
Was this helpful?