public override void Command(MenuItem menuItem, string UserInput) { WscriptLauncher wscriptLauncher = ((WscriptLauncherMenuItem)menuItem).wscriptLauncher; string[] commands = UserInput.Split(" "); if (commands.Length < 3 || commands[0].ToLower() != "set") { menuItem.PrintInvalidOptionError(UserInput); return; } else if (this.Parameters.FirstOrDefault(P => P.Name == "Option").Values.Select(V => V.Value.ToLower()).Contains(commands[1].ToLower())) { if (commands[1].ToLower() == "listenername") { Listener listener = this.CovenantClient.ApiListenersGet().FirstOrDefault(L => L.Name == commands[2]); if (listener == null || listener.Name != commands[2]) { EliteConsole.PrintFormattedErrorLine("Invalid ListenerName: \"" + commands[2] + "\""); menuItem.PrintInvalidOptionError(UserInput); return; } else { wscriptLauncher.ListenerId = listener.Id; } } else if (commands[1].ToLower() == "scriptlanguage") { if (commands[2].ToLower().StartsWith("js")) { wscriptLauncher.ScriptLanguage = ScriptingLanguage.JScript; } else if (commands[2].ToLower().StartsWith("vb")) { wscriptLauncher.ScriptLanguage = ScriptingLanguage.VBScript; } else { EliteConsole.PrintFormattedErrorLine("Invalid ScriptLanguage \"" + commands[2] + "\". Valid options are: JScript, VBScript"); menuItem.PrintInvalidOptionError(UserInput); return; } } else if (commands[1].ToLower() == "dotnetframeworkversion") { if (commands[2].ToLower().Contains("35") || commands[2].ToLower().Contains("3.5")) { wscriptLauncher.DotNetFrameworkVersion = DotNetVersion.Net35; } else if (commands[2].ToLower().Contains("40") || commands[2].ToLower().Contains("4.0")) { wscriptLauncher.DotNetFrameworkVersion = DotNetVersion.Net40; } else { EliteConsole.PrintFormattedErrorLine("Invalid DotNetFrameworkVersion \"" + commands[2] + "\". Valid options are: v3.5, v4.0"); menuItem.PrintInvalidOptionError(UserInput); return; } } else if (commands[1].ToLower() == "delay") { int.TryParse(commands[2], out int n); wscriptLauncher.Delay = n; } else if (commands[1].ToLower() == "jitter") { int.TryParse(commands[2], out int n); wscriptLauncher.Jitter = n; } else if (commands[1].ToLower() == "connectattempts") { int.TryParse(commands[2], out int n); wscriptLauncher.ConnectAttempts = n; } else if (commands[1].ToLower() == "launcherstring") { wscriptLauncher.LauncherString = commands[2]; } CovenantAPIExtensions.ApiLaunchersWscriptPut(this.CovenantClient, wscriptLauncher); } else { menuItem.PrintInvalidOptionError(UserInput); } }
public override void Command(MenuItem menuItem, string UserInput) { WscriptLauncherMenuItem wscriptMenuItem = (WscriptLauncherMenuItem)menuItem; wscriptMenuItem.wscriptLauncher = this.CovenantClient.ApiLaunchersWscriptPost(); EliteConsole.PrintFormattedHighlightLine("Generated WscriptLauncher: " + wscriptMenuItem.wscriptLauncher.LauncherString); }
public override async void Command(MenuItem menuItem, string UserInput) { try { HttpListener httpListener = ((HTTPListenerMenuItem)menuItem).HttpListener; string[] commands = UserInput.Split(" "); if (commands.Length != 3 || !commands[0].Equals(this.Name, StringComparison.OrdinalIgnoreCase)) { menuItem.PrintInvalidOptionError(UserInput); return; } if (this.Parameters.FirstOrDefault(P => P.Name == "Option").Values.Select(V => V.Value).Contains(commands[1], StringComparer.OrdinalIgnoreCase)) { if (commands[1].Equals("name", StringComparison.OrdinalIgnoreCase)) { httpListener.Name = commands[2]; } else if (commands[1].Equals("url", StringComparison.OrdinalIgnoreCase)) { try { httpListener.Url = commands[2]; Uri uri = new Uri(httpListener.Url); httpListener.UseSSL = uri.Scheme == "https"; httpListener.ConnectAddress = uri.Host; httpListener.BindPort = uri.Port; } catch (Exception) { EliteConsole.PrintFormattedErrorLine("Specified URL: \"" + commands[2] + "\" is not a valid URI"); menuItem.PrintInvalidOptionError(UserInput); return; } } else if (commands[1].Equals("connectaddress", StringComparison.OrdinalIgnoreCase)) { httpListener.ConnectAddress = commands[2]; string scheme = (httpListener.UseSSL ?? default) ? "https://" : "http://"; Uri uri = new Uri(scheme + httpListener.ConnectAddress + ":" + httpListener.BindPort); httpListener.Url = uri.ToString(); } else if (commands[1].Equals("bindaddress", StringComparison.OrdinalIgnoreCase)) { httpListener.BindAddress = commands[2]; } else if (commands[1].Equals("bindport", StringComparison.OrdinalIgnoreCase)) { int.TryParse(commands[2], out int n); httpListener.BindPort = n; string scheme = (httpListener.UseSSL ?? default) ? "https://" : "http://"; Uri uri = new Uri(scheme + httpListener.ConnectAddress + ":" + httpListener.BindPort); httpListener.Url = uri.ToString(); } else if (commands[1].Equals("usessl", StringComparison.OrdinalIgnoreCase)) { httpListener.UseSSL = commands[2].StartsWith("t", StringComparison.OrdinalIgnoreCase); string scheme = (httpListener.UseSSL ?? default) ? "https://" : "http://"; Uri uri = new Uri(scheme + httpListener.ConnectAddress + ":" + httpListener.BindPort); httpListener.Url = uri.ToString(); } else if (commands[1].Equals("sslcertpath", StringComparison.OrdinalIgnoreCase)) { string FileName = Path.Combine(Common.EliteDataFolder, commands[2]); if (!File.Exists(FileName)) { menuItem.PrintInvalidOptionError(UserInput); EliteConsole.PrintFormattedErrorLine("File: \"" + FileName + "\" does not exist on the local system."); return; } X509Certificate2 certificate = new X509Certificate2(FileName, httpListener.SslCertificatePassword); httpListener.SslCertificate = Convert.ToBase64String(File.ReadAllBytes(FileName)); ((HTTPListenerMenuItem)menuItem).SSLCertPath = FileName; } else if (commands[1].Equals("sslcertpassword", StringComparison.OrdinalIgnoreCase)) { httpListener.SslCertificatePassword = commands[2]; } else if (commands[1].Equals("httpprofile", StringComparison.OrdinalIgnoreCase)) { HttpProfile profile = ((HTTPListenerMenuItem)menuItem).HttpProfiles.FirstOrDefault(HP => HP.Name.Equals(commands[2], StringComparison.OrdinalIgnoreCase)); if (profile == null) { menuItem.PrintInvalidOptionError(UserInput); EliteConsole.PrintFormattedErrorLine("HttpProfile: \"" + commands[2] + "\" does not exist."); return; } httpListener.ProfileId = profile.Id; } await this.CovenantClient.ApiListenersHttpPutAsync(httpListener); menuItem.Refresh(); } else { menuItem.PrintInvalidOptionError(UserInput); } } catch (HttpOperationException e) { EliteConsole.PrintFormattedWarningLine("CovenantException: " + e.Response.Content); } }
public override void Command(MenuItem menuItem, string UserInput) { PowerShellLauncher PowerShellLauncher = ((PowerShellLauncherMenuItem)menuItem).powerShellLauncher; string[] commands = UserInput.Split(" "); if (commands.Length < 3 || commands[0].ToLower() != "set") { menuItem.PrintInvalidOptionError(UserInput); } else if (this.Parameters.FirstOrDefault(P => P.Name == "Option").Values.Select(V => V.Value.ToLower()).Contains(commands[1].ToLower())) { if (commands[1].ToLower() == "listenername") { Listener listener = this.CovenantClient.ApiListenersGet().FirstOrDefault(L => L.Name == commands[2]); if (listener == null || listener.Name != commands[2]) { EliteConsole.PrintFormattedErrorLine("Invalid ListenerName"); } else { PowerShellLauncher.ListenerId = listener.Id; } } else if (commands[1].ToLower() == "parameterstring") { PowerShellLauncher.ParameterString = String.Join(" ", commands.TakeLast(commands.Length - 2).ToList()); } else if (commands[1].ToLower() == "dotnetframeworkversion") { if (commands[2].ToLower().Contains("35") || commands[2].ToLower().Contains("3.5")) { PowerShellLauncher.DotNetFrameworkVersion = DotNetVersion.Net35; } else if (commands[2].ToLower().Contains("40") || commands[2].ToLower().Contains("4.0")) { PowerShellLauncher.DotNetFrameworkVersion = DotNetVersion.Net40; } } else if (commands[1].ToLower() == "delay") { int.TryParse(commands[2], out int n); PowerShellLauncher.Delay = n; } else if (commands[1].ToLower() == "jitter") { int.TryParse(commands[2], out int n); PowerShellLauncher.Jitter = n; } else if (commands[1].ToLower() == "connectattempts") { int.TryParse(commands[2], out int n); PowerShellLauncher.ConnectAttempts = n; } else if (commands[1].ToLower() == "launcherstring") { PowerShellLauncher.LauncherString = commands[2]; } CovenantAPIExtensions.ApiLaunchersPowershellPut(this.CovenantClient, PowerShellLauncher); } else { menuItem.PrintInvalidOptionError(UserInput); } }
public MenuCommandInstallUtilLauncherSet(CovenantAPI CovenantClient) : base(CovenantClient) { this.Name = "Set"; this.Description = "Set InstallUtilLauncher option"; try { this.Parameters = new List <MenuCommandParameter> { new MenuCommandParameter { Name = "Option", Values = new List <MenuCommandParameterValue> { new MenuCommandParameterValue { Value = "ListenerName" }, new MenuCommandParameterValue { Value = "CommType", NextValueSuggestions = new List <string> { "HTTP", "SMB" } }, new MenuCommandParameterValue { Value = "SMBPipeName" }, new MenuCommandParameterValue { Value = "ValidateCert" }, new MenuCommandParameterValue { Value = "UseCertPinning" }, new MenuCommandParameterValue { Value = "DotNetFrameworkVersion", NextValueSuggestions = new List <string> { "net35", "net40" } }, new MenuCommandParameterValue { Value = "Delay" }, new MenuCommandParameterValue { Value = "JitterPercent" }, new MenuCommandParameterValue { Value = "ConnectAttempts" }, new MenuCommandParameterValue { Value = "KillDate" }, new MenuCommandParameterValue { Value = "LauncherString" } } }, new MenuCommandParameter { Name = "Value" } }; } catch (HttpOperationException e) { EliteConsole.PrintFormattedWarningLine("CovenantException: " + e.Response.Content); } }
public override async void Command(MenuItem menuItem, string UserInput) { try { List <string> commands = Utilities.ParseParameters(UserInput); if (commands.Count() != 3 || !commands[0].Equals(this.Name, StringComparison.OrdinalIgnoreCase)) { menuItem.PrintInvalidOptionError(UserInput); return; } InstallUtilLauncher launcher = ((InstallUtilLauncherMenuItem)menuItem).InstallUtilLauncher; if (this.Parameters.FirstOrDefault(P => P.Name == "Option").Values.Select(V => V.Value).Contains(commands[1], StringComparer.OrdinalIgnoreCase)) { if (commands[1].Equals("listenername", StringComparison.OrdinalIgnoreCase)) { Listener listener = this.CovenantClient.ApiListenersGet().FirstOrDefault(L => L.Name == commands[2]); if (listener == null || listener.Name != commands[2]) { EliteConsole.PrintFormattedErrorLine("Invalid ListenerName: \"" + commands[2] + "\""); menuItem.PrintInvalidOptionError(UserInput); return; } launcher.ListenerId = listener.Id; } else if (commands[1].Equals("dotnetframeworkversion", StringComparison.OrdinalIgnoreCase)) { if (commands[2].Contains("35", StringComparison.OrdinalIgnoreCase) || commands[2].Contains("3.5", StringComparison.OrdinalIgnoreCase)) { launcher.DotNetFrameworkVersion = DotNetVersion.Net35; } else if (commands[2].Contains("40", StringComparison.OrdinalIgnoreCase) || commands[2].Contains("4.0", StringComparison.OrdinalIgnoreCase)) { launcher.DotNetFrameworkVersion = DotNetVersion.Net40; } else { EliteConsole.PrintFormattedErrorLine("Invalid DotNetFrameworkVersion \"" + commands[2] + "\". Valid options are: v3.5, v4.0"); menuItem.PrintInvalidOptionError(UserInput); return; } } else if (commands[1].Equals("commtype", StringComparison.OrdinalIgnoreCase)) { if (commands[2].Equals("smb", StringComparison.OrdinalIgnoreCase)) { launcher.CommType = CommunicationType.SMB; } else { launcher.CommType = CommunicationType.HTTP; } } else if (commands[1].Equals("validatecert", StringComparison.OrdinalIgnoreCase)) { bool parsed = bool.TryParse(commands[2], out bool validate); if (parsed) { launcher.ValidateCert = validate; } else { menuItem.PrintInvalidOptionError(UserInput); return; } } else if (commands[1].Equals("usecertpinning", StringComparison.OrdinalIgnoreCase)) { bool parsed = bool.TryParse(commands[2], out bool pin); if (parsed) { launcher.UseCertPinning = pin; } else { menuItem.PrintInvalidOptionError(UserInput); return; } } else if (commands[1].Equals("smbpipename", StringComparison.OrdinalIgnoreCase)) { launcher.SmbPipeName = commands[2]; } else if (commands[1].Equals("delay", StringComparison.OrdinalIgnoreCase)) { int.TryParse(commands[2], out int n); launcher.Delay = n; } else if (commands[1].Equals("jitterpercent", StringComparison.OrdinalIgnoreCase)) { int.TryParse(commands[2], out int n); launcher.JitterPercent = n; } else if (commands[1].Equals("connectattempts", StringComparison.OrdinalIgnoreCase)) { int.TryParse(commands[2], out int n); launcher.ConnectAttempts = n; } else if (commands[1].Equals("killdate", StringComparison.OrdinalIgnoreCase)) { DateTime.TryParse(commands[2], out DateTime result); launcher.KillDate = result; } else if (commands[1].Equals("launcherstring", StringComparison.OrdinalIgnoreCase)) { launcher.LauncherString = commands[2]; } await this.CovenantClient.ApiLaunchersInstallutilPutAsync(launcher); } else { menuItem.PrintInvalidOptionError(UserInput); } } catch (HttpOperationException e) { EliteConsole.PrintFormattedWarningLine("CovenantException: " + e.Response.Content); } }
public override void Command(MenuItem menuItem, string UserInput) { try { menuItem.Refresh(); GruntTask task = ((TaskMenuItem)menuItem).Task; EliteConsoleMenu menu = new EliteConsoleMenu(EliteConsoleMenu.EliteConsoleMenuType.Parameter, "Task: " + task.Name) { ShouldShortenFields = false }; menu.Rows.Add(new List <string> { "Name:", task.Name }); menu.Rows.Add(new List <string> { "Description:", task.Description }); if (task.ReferenceAssemblies.Any()) { menu.Rows.Add(new List <string> { "ReferenceAssemblies:", String.Join(",", task.ReferenceAssemblies) }); } if (task.ReferenceSourceLibraries.Any()) { menu.Rows.Add(new List <string> { "ReferenceSourceLibraries:", String.Join(",", task.ReferenceSourceLibraries) }); } if (task.EmbeddedResources.Any()) { menu.Rows.Add(new List <string> { "EmbeddedResources:", String.Join(",", task.EmbeddedResources) }); } // string usage = "Usage: " + task.Name; // foreach (GruntTaskOption o in task.Options) // { // usage += " <" + o.Name.ToLower() + ">"; // } // menu.Rows.Add(new List<string> { "Usage:", usage }); if (task.Options.Any()) { foreach (GruntTaskOption o in task.Options) { menu.Rows.Add(new List <string> { "Parameter:" }); menu.Rows.Add(new List <string> { " Name:", o.Name }); menu.Rows.Add(new List <string> { " Description:", o.Description }); menu.Rows.Add(new List <string> { " Value:", o.Value }); } } menu.Print(); } catch (HttpOperationException e) { EliteConsole.PrintFormattedWarningLine("CovenantException: " + e.Response.Content); } }
public void PrintInvalidOptionError(string UserInput) { EliteConsole.PrintFormattedErrorLine("Invalid option \"" + UserInput + "\" selected. Try \"help\" to see a list of valid options."); }
public override void Refresh() { try { this.Grunts = this.CovenantClient.ApiGruntsGet().ToList(); } catch (HttpOperationException e) { EliteConsole.PrintFormattedWarningLine("CovenantException: " + e.Response.Content); } List <MenuCommandParameterValue> gruntNames = Grunts.Where(G => G.Status != GruntStatus.Uninitialized) .Select(G => new MenuCommandParameterValue { Value = G.Name }).ToList(); List <MenuCommandParameterValue> killableGruntNames = Grunts.Where(G => G.Status != GruntStatus.Uninitialized && G.Status != GruntStatus.Killed) .Select(G => new MenuCommandParameterValue { Value = G.Name }).ToList(); this.MenuOptions.FirstOrDefault(M => M.MenuTitle == "Interact") .MenuItemParameters.FirstOrDefault(P => P.Name == "Grunt Name").Values = gruntNames; this.AdditionalOptions.FirstOrDefault(AO => AO.Name == "Rename") .Parameters.FirstOrDefault(P => P.Name == "Old Name").Values = gruntNames; this.AdditionalOptions.FirstOrDefault(O => O.Name == "Delay") .Parameters.FirstOrDefault(P => P.Name == "Grunt Name").Values = gruntNames.AsEnumerable() .Append(new MenuCommandParameterValue { Value = "all" }) .ToList(); this.AdditionalOptions.FirstOrDefault(O => O.Name == "Kill") .Parameters.FirstOrDefault(P => P.Name == "Grunt Name").Values = killableGruntNames.AsEnumerable() .Append(new MenuCommandParameterValue { Value = "all" }) .ToList(); this.AdditionalOptions.FirstOrDefault(AO => AO.Name == "Hide") .Parameters.FirstOrDefault(P => P.Name == "Grunt Name").Values = gruntNames.Where(GN => !this.HiddenGruntNames.Contains(GN.Value)) .Append(new MenuCommandParameterValue { Value = "all" }) .ToList(); this.AdditionalOptions.FirstOrDefault(AO => AO.Name == "Unhide") .Parameters.FirstOrDefault(P => P.Name == "Hidden Grunt Name").Values = this.HiddenGruntNames .Select(G => new MenuCommandParameterValue { Value = G }) .Append(new MenuCommandParameterValue { Value = "all" }) .ToList(); this.SetupMenuAutoComplete(); }
public override async void Command(MenuItem menuItem, string UserInput) { GruntsMenuItem gruntsMenuItem = (GruntsMenuItem)menuItem; string[] commands = UserInput.Split(" "); if (commands.Length != 2 || !commands[0].Equals("kill", StringComparison.OrdinalIgnoreCase)) { menuItem.PrintInvalidOptionError(UserInput); return; } if (commands[1].Equals("all", StringComparison.OrdinalIgnoreCase)) { EliteConsole.PrintFormattedWarning("Kill all Grunts? [y/N] "); string input1 = EliteConsole.Read(); if (!input1.StartsWith("y", StringComparison.OrdinalIgnoreCase)) { return; } foreach (Grunt g in gruntsMenuItem.Grunts) { GruntTasking gt = new GruntTasking { Id = 0, GruntId = g.Id, TaskId = 1, Name = Guid.NewGuid().ToString().Replace("-", "").Substring(0, 10), Status = GruntTaskingStatus.Uninitialized, Type = GruntTaskingType.Kill, TaskingCommand = UserInput, TokenTask = false }; try { await this.CovenantClient.ApiGruntsByIdTaskingsPostAsync(g.Id ?? default, gt); } catch (HttpOperationException e) { EliteConsole.PrintFormattedWarningLine("CovenantException: " + e.Response.Content); } } return; } Grunt grunt = gruntsMenuItem.Grunts.FirstOrDefault(G => G.Name == commands[1]); if (grunt == null) { EliteConsole.PrintFormattedErrorLine("Invalid GruntName: \"" + commands[1] + "\""); menuItem.PrintInvalidOptionError(UserInput); return; } EliteConsole.PrintFormattedWarning("Kill Grunt: " + commands[1] + "? [y/N] "); string input2 = EliteConsole.Read(); if (!input2.StartsWith("y", StringComparison.OrdinalIgnoreCase)) { return; } GruntTasking gruntTasking = new GruntTasking { Id = 0, GruntId = grunt.Id, TaskId = 1, Name = Guid.NewGuid().ToString().Replace("-", "").Substring(0, 10), Status = GruntTaskingStatus.Uninitialized, Type = GruntTaskingType.Kill, TaskingCommand = UserInput, TokenTask = false }; try { await this.CovenantClient.ApiGruntsByIdTaskingsPostAsync(grunt.Id ?? default, gruntTasking); } catch (HttpOperationException e) { EliteConsole.PrintFormattedWarningLine("CovenantException: " + e.Response.Content); } }
public bool PrintMenu(string UserInput = "") { try { UserInput = UserInput.Trim(); if (UserInput != "") { MenuItem currentMenuItem = this.GetCurrentMenuItem(); if (UserInput.Equals("back", StringComparison.OrdinalIgnoreCase)) { if (this.MenuStack.Count > 1) { currentMenuItem.LeavingMenuItem(); this.MenuStack.RemoveAt(this.MenuStack.Count - 1); currentMenuItem = this.GetCurrentMenuItem(); currentMenuItem.ValidateMenuParameters(new string[] {}, false); } else { currentMenuItem.PrintInvalidOptionError(UserInput); } } else if (UserInput.Equals("exit", StringComparison.OrdinalIgnoreCase)) { EliteConsole.PrintFormattedWarning("Exit Elite console? [y/N] "); string input = EliteConsole.Read(); if (input.StartsWith("y", StringComparison.OrdinalIgnoreCase)) { return(false); } } else { MenuItem newMenuLevelItem = currentMenuItem.GetMenuOption(UserInput); if (newMenuLevelItem != null) { this.MenuStack.Add(newMenuLevelItem); newMenuLevelItem.PrintMenu(); } else { MenuCommand menuCommandOption = currentMenuItem.GetMenuCommandOption(UserInput); if (menuCommandOption != null) { menuCommandOption.Command(currentMenuItem, UserInput); } else { currentMenuItem.PrintInvalidOptionError(UserInput); } } } currentMenuItem = this.GetCurrentMenuItem(); ReadLine.AutoCompletionHandler = currentMenuItem.TabCompletionHandler; } this.PrintMenuLevel(); return(true); } catch (HttpRequestException) { EliteConsole.PrintFormattedWarning("Covenant has disconnected. Quit? [y/N] "); string input = EliteConsole.Read(); if (input.ToLower().StartsWith('y')) { return(false); } } catch (Exception e) { EliteConsole.PrintFormattedErrorLine("EliteMenu Exception: " + e.Message); EliteConsole.PrintErrorLine(e.StackTrace); this.PrintMenuLevel(); return(true); } this.PrintMenuLevel(); return(true); }