コード例 #1
0
        private static void PostResults(string fileName, ResultMachine machine, string postUrl, bool isDeletable = false)
        {
            var sb   = new StringBuilder();
            var data = File.ReadLines(fileName);

            foreach (var d in data)
            {
                sb.AppendLine(d);
            }

            var r = new TransferLogDump();

            r.Log = sb.ToString();

            var payload = JsonConvert.SerializeObject(r);

            if (Program.Configuration.ClientResults.IsSecure)
            {
                payload = Crypto.EncryptStringAes(payload, machine.Name);
                payload = Base64Encoder.Base64Encode(payload);

                var p = new EncryptedPayload();
                p.Payload = payload;

                payload = JsonConvert.SerializeObject(p);
            }

            using (var client = WebClientBuilder.Build(machine))
            {
                client.Headers[HttpRequestHeader.ContentType] = "application/json";
                client.UploadString(postUrl, payload);
            }

            if (isDeletable)
            {
                File.Delete(fileName);
            }
            else
            {
                File.WriteAllText(fileName, string.Empty);
            }

            _log.Trace($"{DateTime.Now} - {fileName} posted to server successfully");
        }
コード例 #2
0
        // ReSharper disable once UnusedParameter.Local
        private IActionResult Process(HttpContext context, HttpRequest request, TransferLogDump value, CancellationToken ct)
        {
            var id = request.Headers["ghosts-id"];

            //log.Trace($"Request by {id}");

            var m = WebRequestReader.GetMachine(HttpContext);

            if (!string.IsNullOrEmpty(id))
            {
                m.Id = new Guid(id);
            }
            else
            {
                if (!m.IsValid())
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized, "Invalid machine request"));
                }
            }

            if (!string.IsNullOrEmpty(value.Log))
            {
                log.Trace($"payload received: {value.Log}");

                _service.Enqueue(
                    new QueueEntry
                {
                    Payload =
                        new MachineQueueEntry
                    {
                        Machine     = m,
                        LogDump     = value,
                        HistoryType = Machine.MachineHistoryItem.HistoryType.PostedResults
                    },
                    Type = QueueEntry.Types.Machine
                });
            }

            return(NoContent());
        }
コード例 #3
0
        private static void PostClientResults()
        {
            if (!Program.Configuration.ClientResults.IsEnabled)
            {
                return;
            }

            // ignore all certs
            ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

            var fileName = ApplicationDetails.LogFiles.ClientUpdates;
            var posturl  = Program.Configuration.ClientResults.PostUrl;

            var machine = new ResultMachine();

            GuestInfoVars.Load(machine);

            Thread.Sleep(ProcessManager.Jitter(Program.Configuration.ClientResults.CycleSleep));

            while (true)
            {
                try
                {
                    var sb   = new StringBuilder();
                    var data = File.ReadLines(fileName);
                    foreach (var d in data)
                    {
                        sb.AppendLine(d);
                    }

                    var r = new TransferLogDump();
                    r.Log = sb.ToString();

                    var payload = JsonConvert.SerializeObject(r);

                    if (Program.Configuration.ClientResults.IsSecure)
                    {
                        payload = Crypto.EncryptStringAes(payload, machine.Name);
                        payload = Crypto.Base64Encode(payload);

                        var p = new EncryptedPayload();
                        p.Payload = payload;

                        payload = JsonConvert.SerializeObject(p);
                    }

                    using (var client = WebClientBuilder.Build(machine))
                    {
                        client.Headers[HttpRequestHeader.ContentType] = "application/json";
                        client.UploadString(posturl, payload);
                    }

                    File.WriteAllText(fileName, string.Empty);

                    _log.Trace($"{DateTime.Now} - {fileName} posted to server successfully");
                }
                catch (Exception e)
                {
                    _log.Debug($"Problem posting logs from { fileName } to server { posturl }");
                    _log.Error(e);
                }

                Thread.Sleep(ProcessManager.Jitter(Program.Configuration.ClientResults.CycleSleep));
            }
        }
コード例 #4
0
 public IActionResult Index([FromBody] TransferLogDump value, CancellationToken ct)
 {
     return(Process(HttpContext, Request, value, ct));
 }
コード例 #5
0
ファイル: Program.cs プロジェクト: 1reduviidae/GHOSTS
    static void Main(string[] args)
    {
        if (!CommandLineFlagManager.Parse(args))
        {
            return;
        }

        RestClient    client;
        IRestResponse o;
        string        id;
        RestRequest   request;

        var commands = new List <string>();

        commands.Add("BrowserChrome");
        commands.Add("BrowserFirefox");
        commands.Add("Word");
        commands.Add("Excel");
        commands.Add("Outlook");
        commands.Add("PowerPoint");
        commands.Add("Clicks");
        commands.Add("BrowserIE");
        var rnd = new Random();

        var i = 0;

        while (true)
        {
            client  = new RestClient($"{Program.Options.Host}/api/clientid");
            request = new RestRequest(Method.GET);
            request.AddHeader("Cache-Control", "no-cache");
            request.AddHeader("Content-Type", "application/json");
            request.AddHeader("ghosts-user", "clubber.lang");
            request.AddHeader("ghosts-ip", $"127.1.1.{i}");
            request.AddHeader("ghosts-domain", $"domain-{i}");
            request.AddHeader("ghosts-host", $"host-{i}");
            request.AddHeader("ghosts-resolvedhost", $"resolvedHost.{i}");
            request.AddHeader("ghosts-fqdn", $"flag01.hq.win10.user-test-vpn-{i}");
            request.AddHeader("ghosts-name", $"flag01.hq.win10.user-test-vpn-{i}");
            request.AddHeader("ghosts-version", "2.6.0.0");
            o  = client.Execute(request);
            id = o.Content.Replace("\"", "");

            Console.WriteLine($"Id response was: {id}");

            Thread.Sleep(50);

            var i2 = 30;
            Console.Write($"Results ");
            while (i2 > 0)
            {
                client  = new RestClient($"{Options.Host}/api/clientresults");
                request = new RestRequest(Method.POST);
                request.AddHeader("Cache-Control", "no-cache");
                request.AddHeader("Content-Type", "application/json");
                request.AddHeader("ghosts-user", "clubber.lang");
                request.AddHeader("ghosts-ip", $"127.1.1.{i}");
                request.AddHeader("ghosts-domain", $"domain-{i}");
                request.AddHeader("ghosts-host", $"host-{i}");
                request.AddHeader("ghosts-resolvedhost", $"resolvedHost.{i}");
                request.AddHeader("ghosts-fqdn", $"flag01.hq.win10.user-test-vpn-{i}");
                request.AddHeader("ghosts-name", $"flag01.hq.win10.user-test-vpn-{i}");
                request.AddHeader("ghosts-version", "2.6.0.0");
                request.AddHeader("ghosts-id", id);

                var r = new TransferLogDump();

                var data = File.ReadLines(Options.UpdatesFile);

                var sb = new StringBuilder();
                foreach (var d in data)
                {
                    sb.AppendLine(d);
                }

                r.Log = sb.ToString();

                var payload = JsonConvert.SerializeObject(r);

                request.AddParameter("undefined", payload, ParameterType.RequestBody);

                // request.AddParameter("undefined",
                //     "{\r\n\t\"Log\": \"TIMELINE|" + DateTime.UtcNow.ToString("MM/dd/yy H:mm:ss tt") + "|{\\\"Handler\\\":\\\"" +
                //     commands.PickRandom() +
                //     "\\\",\\\"Command\\\":\\\"random\\\",\\\"CommandArg\\\":\\\"https:\\/\\/nec-hr.region.army.mil\\\"}\\r\\nHEALTH|" +
                //     DateTime.Now.ToString("MM/dd/yy H:mm:ss tt") +
                //     "|{\\\"Internet\\\":true,\\\"Permissions\\\":false,\\\"ExecutionTime\\\":101,\\\"Errors\\\":[],\\\"LoggedOnUsers\\\":[\\\"Dustin\\\"]}\\r\\nTIMELINE|" +
                //     DateTime.Now.ToString() + "|{\\\"Handler\\\":\\\"" + commands.PickRandom() +
                //     "\\\",\\\"Command\\\":\\\"random\\\",\\\"CommandArg\\\":\\\"http:\\/\\/www.dma.mil\\\"}\"\r\n}", ParameterType.RequestBody);

                o = client.Execute(request);

                Console.Write($"{i2}, ");
                i2--;

                Thread.Sleep(50);
            }

            client  = new RestClient($"{Options.Host}/api/clientresults");
            request = new RestRequest(Method.POST);
            request.AddHeader("cache-control", "no-cache");
            request.AddHeader("ghosts-user", "clubber.lang");
            request.AddHeader("ghosts-ip", $"127.1.1.{i}");
            request.AddHeader("ghosts-domain", $"domain-{i}");
            request.AddHeader("ghosts-host", $"host-{i}");
            request.AddHeader("ghosts-resolvedhost", $"resolvedHost.{i}");
            request.AddHeader("ghosts-fqdn", $"flag01.hq.win10.user-test-vpn-{i}");
            request.AddHeader("ghosts-name", $"flag01.hq.win10.user-test-vpn-{i}");
            request.AddHeader("ghosts-version", "2.6.0.0");
            request.AddHeader("Content-Type", "application/json");
            request.AddParameter("undefined",
                                 "{\"Log\":\"HEALTH|" + DateTime.UtcNow.ToString("MM/dd/yy H:mm:ss tt") +
                                 "|{\\\"Internet\\\":true,\\\"Permissions\\\":false,\\\"ExecutionTime\\\":946,\\\"Errors\\\":[],\\\"LoggedOnUsers\\\":[\\\"Dustin\\\"],\\\"Stats\\\":{\\\"Memory\\\":0.907363832,\\\"Cpu\\\":97.98127,\\\"DiskSpace\\\":0.479912162}}\"}",
                                 ParameterType.RequestBody);
            o = client.Execute(request);

            Console.WriteLine($"Health response was: {o.ResponseStatus}");
            Thread.Sleep(50);

            client  = new RestClient($"{Options.Host}/api/clientupdates");
            request = new RestRequest(Method.GET);
            request.AddHeader("Cache-Control", "no-cache");
            request.AddHeader("Content-Type", "application/json");
            request.AddHeader("ghosts-user", "clubber.lang");
            request.AddHeader("ghosts-ip", $"127.1.1.{i}");
            request.AddHeader("ghosts-domain", $"domain-{i}");
            request.AddHeader("ghosts-host", $"host-{i}");
            request.AddHeader("ghosts-resolvedhost", $"resolvedHost.{i}");
            request.AddHeader("ghosts-fqdn", $"flag01.hq.win10.user-test-vpn-{i}");
            request.AddHeader("ghosts-name", $"flag01.hq.win10.user-test-vpn-{i}");
            request.AddHeader("ghosts-version", "2.6.0.0");
            request.AddHeader("ghosts-id", id);
            request.AddParameter("undefined", "{\"Log\":\"\"}", ParameterType.RequestBody);
            o = client.Execute(request);

            Console.WriteLine($"Updates response was: {o.ResponseStatus}");
            Thread.Sleep(500);
            i++;
        }
    }