Skip to content

Commit 8cf829f

Browse files
committed
more functional commands
1 parent b887387 commit 8cf829f

File tree

5 files changed

+59
-19
lines changed

5 files changed

+59
-19
lines changed

Payload_Type/sliverimplant/sliverimplant/SliverRequests/SliverAPI.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99
from mythic_container.LoggingBase import *
1010
from mythic_container.MythicGoRPC import *
1111

12+
from sliver import InteractiveBeacon
13+
1214
# TODO: make this better, if using identify all fields that will be used / handle emptying when exiting
1315
sliver_clients = {}
1416

1517
async def create_sliver_interact(taskData: PTTaskMessageAllData):
1618
# check to see if its cached
1719
if (f"{taskData.Callback.ID}" in sliver_clients.keys()):
18-
return sliver_clients[f"{taskData.Callback.ID}"]['interact']
20+
return sliver_clients[f"{taskData.Callback.ID}"]['interact'], isinstance(sliver_clients[f"{taskData.Callback.ID}"]['interact'], InteractiveBeacon)
1921

2022
extraInfoObj = json.loads(taskData.Callback.ExtraInfo)
2123
configfile = extraInfoObj['slivercfg_fileid']

Payload_Type/sliverimplant/sliverimplant/agent_functions/mv.py

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,30 @@
44
from mythic_container.MythicRPC import *
55
from mythic_container.PayloadBuilder import *
66

7+
from sliver import sliver_pb2, client_pb2
8+
79
class MvArguments(TaskArguments):
810
def __init__(self, command_line, **kwargs):
911
super().__init__(command_line, **kwargs)
10-
self.args = []
12+
self.args = [
13+
CommandParameter(
14+
name="src",
15+
cli_name="src",
16+
display_name="src",
17+
description="source file",
18+
type=ParameterType.String,
19+
),
20+
CommandParameter(
21+
name="dst",
22+
cli_name="dst",
23+
display_name="dst",
24+
description="destination file",
25+
type=ParameterType.String,
26+
),
27+
]
1128

1229
async def parse_arguments(self):
13-
pass
30+
self.load_args_from_json_string(self.command_line)
1431

1532

1633
class Mv(CommandBase):
@@ -40,7 +57,9 @@ async def create_go_tasking(self, taskData: MythicCommandBase.PTTaskMessageAllDa
4057
# TODO: -h, --help display help
4158
# TODO: -t, --timeout int command timeout in seconds (default: 60)
4259

43-
response = await mv(taskData)
60+
src = taskData.args.get_arg('src')
61+
dst = taskData.args.get_arg('dst')
62+
response = await mv(taskData, src, dst)
4463

4564
await SendMythicRPCResponseCreate(MythicRPCResponseCreateMessage(
4665
TaskID=taskData.Task.ID,
@@ -58,12 +77,13 @@ async def process_response(self, task: PTTaskMessageAllData, response: any) -> P
5877
resp = PTTaskProcessResponseMessageResponse(TaskID=task.Task.ID, Success=True)
5978
return resp
6079

61-
async def mv(taskData: PTTaskMessageAllData):
62-
# interact, isBeacon = await SliverAPI.create_sliver_interact(taskData)
80+
async def mv(taskData: PTTaskMessageAllData, src: str, dst: str):
81+
interact, isBeacon = await SliverAPI.create_sliver_interact(taskData)
6382

64-
# ifconfig_results = await interact._stub()
83+
# TODO: figure out how to await the task completing
84+
mv_results = await interact._stub.Mv(interact._request(sliver_pb2.MvReq(Src=src, Dst=dst)))
6585

6686
# if (isBeacon):
67-
# ifconfig_results = await ifconfig_results
87+
# mv_results = await mv_results
6888

69-
return "This command not yet implemented..."
89+
return f"Tasked [*] {src} > {dst}"

Payload_Type/sliverimplant/sliverimplant/agent_functions/pwd.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
from mythic_container.MythicRPC import *
55
from mythic_container.PayloadBuilder import *
66

7+
from sliver import sliver_pb2
8+
79
class PwdArguments(TaskArguments):
810
def __init__(self, command_line, **kwargs):
911
super().__init__(command_line, **kwargs)
@@ -60,6 +62,8 @@ async def pwd(taskData: PTTaskMessageAllData):
6062

6163
pwd_results = await interact.pwd()
6264

65+
# pwd_results = await interact._stub.Pwd(interact._request(sliver_pb2.PwdReq()))
66+
6367
if (isBeacon):
6468
pwd_results = await pwd_results
6569

Payload_Type/sliverimplant/sliverimplant/agent_functions/reconfig.py

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,21 @@
44
from mythic_container.MythicRPC import *
55
from mythic_container.PayloadBuilder import *
66

7+
from sliver import sliver_pb2
8+
79
class ReconfigArguments(TaskArguments):
810
def __init__(self, command_line, **kwargs):
911
super().__init__(command_line, **kwargs)
10-
self.args = []
12+
self.args = [
13+
CommandParameter(
14+
name="beacon_interval",
15+
description="beacon_interval in seconds",
16+
type=ParameterType.Number,
17+
),
18+
]
1119

1220
async def parse_arguments(self):
13-
pass
21+
self.load_args_from_json_string(self.command_line)
1422

1523

1624
class Reconfig(CommandBase):
@@ -32,13 +40,14 @@ async def create_go_tasking(self, taskData: MythicCommandBase.PTTaskMessageAllDa
3240

3341
# Flags:
3442
# ======
35-
# TODO: -i, --beacon-interval string beacon callback interval
43+
# -i, --beacon-interval string beacon callback interval
3644
# TODO: -j, --beacon-jitter string beacon callback jitter (random up to)
3745
# TODO: -h, --help display help
3846
# TODO: -r, --reconnect-interval string reconnect interval for implant
3947
# TODO: -t, --timeout int command timeout in seconds (default: 60)
4048

41-
response = await reconfig(taskData)
49+
beacon_interval = taskData.args.get_arg('beacon_interval')
50+
response = await reconfig(taskData, beacon_interval)
4251

4352
await SendMythicRPCResponseCreate(MythicRPCResponseCreateMessage(
4453
TaskID=taskData.Task.ID,
@@ -56,12 +65,17 @@ async def process_response(self, task: PTTaskMessageAllData, response: any) -> P
5665
resp = PTTaskProcessResponseMessageResponse(TaskID=task.Task.ID, Success=True)
5766
return resp
5867

59-
async def reconfig(taskData: PTTaskMessageAllData):
60-
# interact, isBeacon = await SliverAPI.create_sliver_interact(taskData)
68+
async def reconfig(taskData: PTTaskMessageAllData, beacon_interval_seconds: int):
69+
interact, isBeacon = await SliverAPI.create_sliver_interact(taskData)
70+
71+
if (not isBeacon):
72+
return "Beacon only command!"
73+
74+
beacon_interval = beacon_interval_seconds * 1000000000
6175

62-
# ifconfig_results = await interact._stub()
76+
reconfig_results = await interact._stub.Reconfigure(interact._request(sliver_pb2.ReconfigureReq(BeaconInterval=beacon_interval)))
6377

6478
# if (isBeacon):
6579
# ifconfig_results = await ifconfig_results
6680

67-
return "This command not yet implemented..."
81+
return "Tasked Reconfig!"

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,15 +121,15 @@ sudo ./mythic-cli install github https://github.com/MythicAgents/sliver
121121
- mkdir✅
122122
- msf👷
123123
- msf-inject👷
124-
- mv👷
124+
- mv
125125
- netstat✅
126126
- ping✅ (session only)
127127
- pivots👷 (session only)
128128
- portfwd👷
129129
- procdump👷
130130
- ps✅
131131
- pwd✅
132-
- reconfig👷 (beacon only)
132+
- reconfig (beacon only)
133133
- rename (not applicable?)
134134
- rm✅
135135
- rportfwd👷

0 commit comments

Comments
 (0)