Kompilowanie i testowanie programów uruchamiających C#

https://chacker.pl/

Jednym z najbardziej podstawowych sposobów uruchomienia kodu powłoki jest umieszczenie go w wątku. Wątek to zestaw kodu, który działa równolegle z innym fragmentem kodu. Kiedy uruchamiamy kod w wątku, czy to w naszym bieżącym procesie, czy w innym procesie, główna część aplikacji nadal działa, podczas gdy nasz kod powłoki jest uruchamiany w tym samym czasie. W tym laboratorium będziemy nadal używać konfiguracji multi/handler Metasploit z poprzedniego laboratorium i dodamy kod powłoki do szablonu. W instancji Kali znajduje się podkatalog powłoki. Przeglądając ten katalog, widzimy dwa pliki, których będziemy używać w tym laboratorium: build_csharp.sh i csharp.template. Plik szablonu zawiera treść kodu z fragmentem umożliwiającym wstawienie naszego kodu powłoki. Skrypt build_csharp.sh zawiera polecenie msfvenom służące do utworzenia 64-bitowej powłoki odwrotnego protokołu TCP Meterpretera, która łączy się z naszym modułem obsługi, a następnie kompiluje powstały kod za pomocą kompilatora Mono C#, mcs. Powstałe dwa pliki to plik csharp.cs i plik csharp_dropper.exe w katalogu /tmp. Przyjrzyjmy się plikowi szablonu:

Nasz kod C# zaczyna się od (1) , gdzie tworzymy pamięć o rozmiarze naszego kodu powłoki. Ta pamięć jest pusta, więc w (2) kopiujemy do niej zawartość naszego kodu powłoki. Aby go wykonać, pamięć musi być oznaczona jako wykonywalna i VirtualProtect robi to (2) za nas. Stamtąd w (3) tworzymy wątek uruchamiający kod powłoki. Na koniec czekamy, aż kod powłoki zakończy się za pomocą polecenia WaitForSingleObject, a po jego zakończeniu program będzie mógł zakończyć działanie. Teraz, gdy przeanalizowaliśmy, co robi, zbudujmy go za pomocą następujących poleceń:

Kiedy uruchamiamy plik powłoki, na ekranie pojawiają się dane wyjściowe msfvenom, a wynikowy plik csharp_dropper64.exe znajduje się w katalogu /tmp. Możemy uzyskać do niego dostęp z okna Windows za pośrednictwem naszego udziału. Gdy Metasploit nadal działa i czeka na połączenia, uruchommy ten plik binarny:

W konsoli Metasploit na Kali powinniśmy zobaczyć naszą nową powłokę:

Aby sprawdzić, czy działamy jako nowy proces, możemy użyć polecenia getpid , aby uzyskać bieżący identyfikator procesu, a następnie użyj ps -S <nazwa procesu>, aby   sprawdzić, czy pasuje do naszego identyfikatora procesu:

Widzimy, że nasz kod działa w naszym launcherze C# i mamy możliwość uruchamiania poleceń w Metasploit. Może to być dowolny ładunek, jaki chcemy, taki jak ładunek Covenant lub inny typ ładunku C2.

Tworzenie programów uruchamiających C#

https://chacker.pl/

Domyślne programy uruchamiające z Metasploit i innymi narzędziami C2 są często wykrywane przez AV, wykrywanie i reagowanie na punkty końcowe (EDR) oraz inne narzędzia bezpieczeństwa. Aby temu zaradzić, wielu etycznych hakerów i przestępców używa programów uruchamiających kod powłoki, aby ukryć swój kod powłoki. Te programy uruchamiające mogą używać różnych technik do uruchamiania kodu powłoki, w tym wstrzykiwania do innych procesów, używania szyfrowania i wielu innych technik lub kombinacji technik, aby wyglądać na tyle inaczej, że kontrole bezpieczeństwa nie mogą być łatwo wykryte. W języku C# utworzono wiele wzorców uruchamiania kodu powłoki, w tym platformy takie jak SharpSploit, które można dołączyć jako biblioteki do innych narzędzi, które oferują wiele sposobów uruchamiania kodu powłoki, których można używać za pośrednictwem funkcji. Rozszerzalność i możliwość dołączania funkcji z zewnętrznych bibliotek DLL napisanych w C++ i innych językach ułatwiają korzystanie z funkcji wyższego poziomu języka C# w celu wykonania większości operacji w programie uruchamiającym podczas przełączania do funkcji C++ z systemowymi bibliotekami DLL w celu wykonywania określonych zadań .

Zaciemnianie ładunków za pomocą msfvenom

https://chacker.pl/

W tym laboratorium przyjrzymy się różnym metodom kodowania i zaciemniania, których można użyć z msfvenom do ukrycia ładunków. W pierwszym przykładzie przyjrzymy się użyciu kodowania do zmiany wyglądu samego ładunku. Aby to zrobić, użyjemy powszechnego kodowania „shikata_ga_nai”, co w języku japońskim z grubsza oznacza „nic nie da się z tym zrobić”. Na początek przyjrzyjmy się niektórym ciągom znaków będącym częścią Meterpretera z naszego początkowego pliku msf1.exe. Te ciągi znaków są częścią funkcji manipulacji tokenami i możemy użyć tej funkcji do śledzenia ukrywania Meterpretera dla przyszłych plików binarnych:

Widzimy nazwy funkcji do otwierania tokenów procesów i wątków oraz dostosowywania uprawnień. Następnie dodajmy trochę kodowania, aby zobaczyć, jak to wygląda:

Określamy dodatkowe opcje -e z typem naszego kodera i -i z liczbą iteracji, które chcemy uruchomić. Widzimy, jak koduje trzy razy i zapisuje plik binarny. Jeśli chcesz użyć innego kodera, kodery msfvenom -l pokażą Ci opcje. Zauważ, że każdy z nich jest poprzedzony platformą typu kodera, a tutaj generujemy pliki binarne x86. Kiedy ponownie uruchomimy naszą komendę strings, nie otrzymamy niczego w zamian, co pokazuje, że tekst w samym ładunku Meterpretera jest zaciemniony:

Dzieje się tak, ponieważ szablony tych plików binarnych są identyczne. Nie jest to optymalne, ponieważ rozmiar jest dobrym wskaźnikiem. Jedną rzeczą, którą możemy zrobić, to wybrać plik binarny systemu Windows, którego moglibyśmy użyć jako szablonu, który byłby inny. Kali ma już w systemie kilka plików binarnych Windows, więc użyjmy pliku binarnego wget.exe jako naszego szablonu:

Błąd wynika z tego, że msfvenom próbuje wstrzyknąć ładunek do sekcji .text pliku binarnego, a jeśli ta sekcja nie istnieje, mamy problem. Rzućmy okiem na sekcje znajdujące się w pliku binarnym dla wget.exe:

Błąd wynika z tego, że msfvenom próbuje wstrzyknąć ładunek do sekcji .text pliku binarnego, a jeśli ta sekcja nie istnieje, mamy problem. Rzućmy okiem na sekcje znajdujące się w pliku binarnym dla wget.exe:

ednym z efektów ubocznych tej techniki jest to, że wget w rzeczywistości nie będzie próbował robić rzeczy, które robiłby normalnie, więc ktoś może nabrać podejrzeń. Możemy użyć flagi -k, aby zachować funkcjonalność w pliku binarnym. Utwórzmy nowy plik binarny z flagą -k:

Działało to z typem exe, ponieważ wstrzykiwał nowy nagłówek sekcji do przechowywania kodu. Przyjrzyjmy się wynikom objdump:

OK, więc teraz, gdy mamy już kilka plików binarnych, uczyńmy je wykonywalnymi i uruchommy msfconsole, aby przechwycić nasze powłoki:

Do naszego polecenia dodaliśmy dwa nowe aspekty. Pierwszym z nich jest ustawienie wartości ExitonSession na false (1) . Typowym zachowaniem jest zaprzestanie słuchania, gdy tylko odzyskamy pierwszą skorupę. W naszym przypadku chcemy przechwycić wiele powłok, aby wypróbować każdy z naszych plików binarnych. Innym zachowaniem, które chcemy naprawić, jest natychmiastowe przejście do sesji po ponownym nawiązaniu połączenia przez powłokę. Aby to zrobić, podajemy opcję -j (2) w poleceniu exploita, aby poinformować Metasploit, że chcemy, aby działał w tle jako zadanie. Teraz, gdy otrzymamy powłoki, zobaczymy komunikat informujący o podłączeniu nowej powłoki, ale nie będziemy musieli od razu z nią wchodzić w interakcję. Wróćmy teraz do naszego okna Windows i uruchommy kilka naszych nowych powłok:

Do naszego polecenia dodaliśmy dwa nowe aspekty. Pierwszym z nich jest ustawienie wartości ExitonSession na false (1) . Typowym zachowaniem jest zaprzestanie słuchania, gdy tylko odzyskamy pierwszą skorupę. W naszym przypadku chcemy przechwycić wiele powłok, aby wypróbować każdy z naszych plików binarnych. Innym zachowaniem, które chcemy naprawić, jest natychmiastowe przejście do sesji po ponownym nawiązaniu połączenia przez powłokę. Aby to zrobić, podajemy opcję -j (2) w poleceniu exploita, aby poinformować Metasploit, że chcemy, aby działał w tle jako zadanie. Teraz, gdy otrzymamy powłoki, zobaczymy komunikat informujący o podłączeniu nowej powłoki, ale nie będziemy musieli od razu z nią wchodzić w interakcję. Wróćmy teraz do naszego okna Windows i uruchommy kilka naszych nowych powłok:

Użyliśmy polecenia session, aby wejść w interakcję z otwartą sesją 2 i w miejscu wpisania exit pojawia się znak zachęty Meterpretera. Wracając do systemu Windows, kontrola powróciła. W naszym systemie Windows spróbujmy uruchomić plik binarny msf4.exe, który używa wget.exe z flagą -k, aby zachować funkcjonalność:

Kiedy po raz pierwszy uruchamiamy plik binarny, wyświetla się komunikat o błędzie wskazujący na konieczność określenia adresu URL. Jest to typowa funkcjonalność wget, ale nie odzyskujemy powłoki, ponieważ plik binarny nigdy nie dotarł do naszego kodu powłoki. Kiedy ponownie spróbujemy użyć adresu URL, zobaczymy, że wget próbuje pobrać plik do naszego udziału SMB, ale nie może zapisać. Na naszej konsoli Metasploit powinniśmy zobaczyć coś takiego:

Sesja natychmiast umarła, ponieważ kiedy plik binarny się zakończył, zabiła także naszą powłokę. Moglibyśmy poprosić o naprawdę dużą stronę, co zajęłoby dużo czasu, ale mamy dodatkowe opcje. W opcjach zaawansowanych (które można wyświetlić dla dowolnego ładunku poprzez –list-options) znajduje się opcja PrependMigrate, która doda migrację do nowego procesu na początku kodu, dzięki czemu nasza powłoka będzie działać dłużej niż sam proces . Zbudujmy jeden z nich i wypróbujmy go:

W naszym systemie Windows po uruchomieniu msf5.exe powinniśmy zobaczyć takie same dane wyjściowe jak msf4.exe, ale w Metasploit widzimy coś innego:

Proces, w którym działa nasz kod powłoki, to nie msf5.exe, ale rundll32.exe. Nasz plik binarny uruchomił nowy proces i wstrzyknął go, pozostawiając sesję nieaktywną, mimo że plik msf5.exe został zakończony. Dzięki tym technikom możemy lepiej ukryć ładunki Metasploit w innych plikach binarnych za pomocą dodatkowego zaciemniania, aby zapobiec ich wykryciu przez silniki antywirusowe oparte na sygnaturach. Mamy jednak więcej opcji niż tylko szablony dla msfvenom. Przyjrzyjmy się alternatywnym strategiom.

msfvenom i zaciemnianie

https://chacker.pl/

Zastanawialiśmy się już nad użyciem msfvenom do zbudowania podstawowego ładunku, ale msfvenom ma mnóstwo różnych funkcji, które pomagają przekształcić ładunki wbudowane w narzędzie. msfvenom ma kodery, które pomogą zakodować ładunek przy użyciu różnych technik, aby uniknąć wykrycia opartego na sygnaturach AV. Istnieje również licznik iteracji, którego można użyć do wielokrotnego kodowania ładunku w celu utworzenia dodatkowych odmian oryginalnego ładunku.

Zaciemnianie ładunku

https://chacker.pl/

Jednym z największych wyzwań, przed którymi stoimy jako etyczni hakerzy, jest to, jak wyprzedzić powszechne kontrole. Wielu przestępców będzie korzystać z niestandardowych narzędzi, aby wyprzedzić te kontrole, ale często nie mamy czasu na tworzenie niestandardowego oprogramowania do różnych testów. Wielu dostawców oprogramowania antywirusowego (AV) szuka publicznie dostępnych narzędzi i tworzy dla nich metody wykrywania, dlatego ważne jest, aby znać wskazówki i triki umożliwiające zmianę ładunku na różne sposoby, abyśmy mogli korzystać z tych narzędzi bez natychmiastowego wykrycia.

Przymierze

https://chacker.pl/

Covenant to framework C2 napisany w języku C#, który może działać zarówno w systemie Linux, jak i Windows. Wraz z popularnością języka C# w działaniach zespołu czerwonego, Covenant zyskał na popularności, ponieważ ma natywną obsługę języka C# do tworzenia plików binarnych i może korzystać z wielu popularnych narzędzi C# po eksploatacji. Ponadto możliwość wykonywania dodatkowych zestawów C# w pamięci i możliwość łatwego rozszerzania frameworka ułatwia dodawanie ulubionych narzędzi C# do frameworka w celu wykonywania operacji. Covenant można również wdrożyć za pośrednictwem Dockera i ma przyjazny interfejs sieciowy. Jest dostarczany z przykładowymi profilami do wykorzystania w sieci i nasłuchiwaniach mostkowych, których można używać w protokołach niestandardowych i zewnętrznym C2. Ponadto posiada funkcje, które są świetne dla czerwonych zespołów, takie jak możliwość śledzenia artefaktów używanych podczas operacji, a także tworzenia wykresów ataków, które pokazują ścieżkę, jaką pokonał tester podczas operacji.

 

Covenant to framework C2 napisany w języku C#, który może działać zarówno w systemie Linux, jak i Windows. Wraz z popularnością języka C# w działaniach zespołu czerwonego, Covenant zyskał na popularności, ponieważ ma natywną obsługę języka C# do tworzenia plików binarnych i może korzystać z wielu popularnych narzędzi C# po eksploatacji. Ponadto możliwość wykonywania dodatkowych zestawów C# w pamięci i możliwość łatwego rozszerzania frameworka ułatwia dodawanie ulubionych narzędzi C# do frameworka w celu wykonywania operacji. Covenant można również wdrożyć za pośrednictwem Dockera i ma przyjazny interfejs sieciowy. Jest dostarczany z przykładowymi profilami do wykorzystania w sieci i nasłuchiwaniach mostkowych, których można używać w protokołach niestandardowych i zewnętrznym C2. Ponadto posiada funkcje, które są świetne dla czerwonych zespołów, takie jak możliwość śledzenia artefaktów używanych podczas operacji, a także tworzenia wykresów ataków, które pokazują ścieżkę, jaką pokonał tester podczas operacji.

Covenant ma pewne konwencje nazewnictwa, które różnią się od wielu innych systemów C2. Grunty są klientami C2. Grunt łączy się ze słuchaczem, który jest usługą obsługującą komunikację C2. Za każdym razem, gdy wydajesz polecenie Gruntowi, jest ono traktowane jako Zadanie i jest śledzone na liście Zadań, gdzie możesz zobaczyć, jakie polecenia zostały wysłane i jakie zwrócone wartości. Aby dodać nowego słuchacza, kliknij łącze Słuchacze po lewej stronie i wybierz opcję Utwórz, aby przejść do ekranu Utwórz słuchacza.

Dla pola HttpProfile wybieramy CustomHttpProfile i następnie musimy wypełnić kilka dodatkowych pól. Pierwszym z nich jest Imię; domyślna nazwa nie jest łatwa do zapamiętania, więc nazwijmy ją http1. Pole BindAddress ma same zera, ponieważ chcemy, aby akceptowało dowolny adres IP znajdujący się na komputerze hosta, ale musimy zmienić pole ConnectAddresses. Jest to adres, z którym będą się łączyć klienci i domyślnie będzie miał jeden z adresów IP Dockera, dlatego musimy ustawić go na wewnętrzny adres IP Kali, 10.0.0.40. Następnie klikamy przycisk Utwórz, aby uruchomić Listener. Kiedy spojrzymy na zakładkę Odbiorniki, powinno pojawić się, że Odbiornik http1 jest „Aktywny”, co oznacza, że ​​ten Odbiornik został poprawnie skonfigurowany. Naszym następnym krokiem jest stworzenie sposobu, aby obiekt docelowy mógł uruchomić nasz plik binarny. W tym celu przejdziemy do zakładki Launchery po lewej stronie i wybierzemy opcję Binary. Zostanie wyświetlony ekran programu uruchamiającego pliki binarne, w którym możemy wprowadzić odpowiednie informacje.

Dla pola HttpProfile wybieramy CustomHttpProfile i następnie musimy wypełnić kilka dodatkowych pól. Pierwszym z nich jest Imię; domyślna nazwa nie jest łatwa do zapamiętania, więc nazwijmy ją http1. Pole BindAddress ma same zera, ponieważ chcemy, aby akceptowało dowolny adres IP znajdujący się na komputerze hosta, ale musimy zmienić pole ConnectAddresses. Jest to adres, z którym będą się łączyć klienci i domyślnie będzie miał jeden z adresów IP Dockera, dlatego musimy ustawić go na wewnętrzny adres IP Kali, 10.0.0.40. Następnie klikamy przycisk Utwórz, aby uruchomić Listener. Kiedy spojrzymy na zakładkę Odbiorniki, powinno pojawić się, że Odbiornik http1 jest „Aktywny”, co oznacza, że ​​ten Odbiornik został poprawnie skonfigurowany. Naszym następnym krokiem jest stworzenie sposobu, aby obiekt docelowy mógł uruchomić nasz plik binarny. W tym celu przejdziemy do zakładki Launchery po lewej stronie i wybierzemy opcję Binary. Zostanie wyświetlony ekran programu uruchamiającego pliki binarne, w którym możemy wprowadzić odpowiednie informacje.

W polu Listener wybieramy http1 i pozostawiamy wszystko bez zmian, z wyjątkiem DotNetVersion, który ustawiamy na Net40. Wersja DotNet jest ważna, ponieważ starsze systemy mogą nie mieć DotNet 4.0, a nowsze systemy mogą nie mieć DotNet 3.5. Pomocne może być tutaj wykonanie krótkiego rozpoznania celu przed wybraniem typu ładunku. Ponieważ wiemy, że naszym docelowym boxem jest Windows Server 2016, możemy śmiało wybrać opcję Net40. Po kliknięciu przycisku Generuj ładunek zostanie wygenerowany w aplikacji, mimo że nie będzie informacji zwrotnej, ale teraz musimy dotrzeć do celu. Następnie widzimy ekran Binary Launcher. W polu Host możemy określić lokalizację, w której będzie hostowany nasz plik binarny. Aby to ułatwić, po prostu określimy lokalizację jako /grunt1.exe, a następnie klikniemy Host

Nie otrzymasz żadnej opinii, ale plik jest teraz hostowany. Możesz przejść do karty Słuchacze, kliknąć swój odbiornik, a następnie kliknąć opcję Hostowane pliki, aby sprawdzić, czy plik jest hostowany, jeśli masz problemy. Aby wykonać Grunt w naszym polu docelowym, przejdź do wiersza polecenia PowerShell, pobierz i wykonaj Grunt:

Gdy to zrobisz, w prawym górnym rogu przeglądarki może na krótko pojawić się alert informujący, że masz nowego Grunta. Aby wyświetlić Grunta, przejdź do zakładki Grunt i kliknij nazwę nowego Grunta. Zakładka Informacje, pokazana obok, zawiera podstawowe informacje o zaatakowanym systemie. Wiemy, że jest to HTTP Grunt działający jako użytkownik GHH\target na WS20 z adresem IP 10.0.0.20. Mamy wersję systemu operacyjnego, datę nawiązania połączenia i godzinę ostatniego zameldowania. Daje nam to podstawowe informacje na temat zdrowia i kontekstu Grunta, ale rzadko jest to to, co chcemy zrobić. Aby wykonać nasze czynności poeksploatacyjne należy przejść do zakładki Zadanie.

Zakładka Zadanie pokazuje różne wbudowane moduły Covenant, które możemy uruchomić. Wybranie zadania spowoduje wyświetlenie opcji dla tego zadania. Aby zrozumieć podstawy, uruchomimy moduł WhoAmI, który pobiera bieżący kontekst użytkownika. Widzieliśmy to już na ekranie Grunt Info, ale za pomocą tego modułu możemy łatwo zweryfikować te informacje.

Gdy uruchomimy zadanie, wyświetli się okno Interakcja. Widzimy polecenie zostało wysłane, ale odpowiedź musi minąć kilka chwil. Dzieje się tak dlatego, że nasz Grunt nie jest Gruntem działającym w czasie rzeczywistym i zamiast tego ma interwał sygnalizacyjny. W przypadku tego interwału udzielenie odpowiedzi może zająć do 10 sekund (5 sekund, aby Grunt zarejestrował się i otrzymał żądanie, a następnie kolejne 5 sekund, zanim zwróci odpowiedź). Dzieje się tak dlatego, że opóźnienie Launchera zostało ustawione na 5 sekund.

Kiedy skończysz z Covenantem, wydaj następującą komendę w Kali, aby zamknąć serwer:

Imperium PowerShella

https://chacker.pl/

PowerShell Empire został wydany na BSides w Las Vegas przez Willa Schroedera i Justina Warnera w 2015 roku. Od tego czasu projekt GitHub jest zarchiwizowany, a rozwidlona wersja jest utrzymywana i ulepszana przez BCSecurity pod adresem https://github.com/BC-SECURITY /Imperium. PowerShell Empire to platforma C2 oparta na języku Python, która do wykonywania zadań wykorzystuje ładunki, moduły pośredniczące i moduły poeksploatacyjne oparte na programie PowerShell. Wykorzystuje komponenty PowerSploit, SharpSploit i inne narzędzia w modułach poeksploatacyjnych, co oznacza, że ​​wiele narzędzi, z których będą korzystać testerzy, jest już wbudowanych. Po wdrożeniu przez Microsoft interfejsu skanowania antymalware (AMSI) i zwiększeniu liczby rejestrów PowerShell, PowerShell stał się mniej popularne, a narzędzia C# zaczęły zyskiwać na popularności. Jednak Empire zawiera teraz AMSI i Blokowanie skryptów pozwala ominąć rejestrowanie, co może pomóc w ukryciu się przed niektórymi nowszymi ulepszeniami zabezpieczeń.

Tworzenie powłoki za pomocą Metasploit

https://chacker.pl/

Na początek utworzymy udział w bloku komunikatów serwera (SMB) w systemie Kali, aby usunąć nasz ładunek. Możemy po prostu użyć katalogu /tmp z smbd w systemie. Dodajmy udział do naszej konfiguracji, a następnie zrestartujmy usługę i sprawdźmy, czy udział jest dostępny:

Na początek utworzymy udział w bloku komunikatów serwera (SMB) w systemie Kali, aby usunąć nasz ładunek. Możemy po prostu użyć katalogu /tmp z smbd w systemie. Dodajmy udział do naszej konfiguracji, a następnie zrestartujmy usługę i sprawdźmy, czy udział jest dostępny:

Właśnie użyliśmy msfvenom, generatora ładunku Metasploit, do stworzenia odwrotnej powłoki TCP Meterpreter, która jest bezstopniowa, co oznacza, że ​​cały ładunek jest w formacie binarnym. I odwrotnie, etapowanie oznacza, że ​​tylko niewielka część modułu ładującego jest włączana do ładunku, a reszta jest pobierana z serwera. Gdy zależy nam na jak najmniejszym ładunku, optymalne jest ustawienie etapowe. Czasami jednak elementy sterujące mogą zobaczyć ładowanie naszego stagera i to nas zdradzi. W większości przypadków, gdy rozmiar nie ma znaczenia, lepszym rozwiązaniem będzie inscenizacja, ponieważ przy tego typu ładunku mniej rzeczy może pójść nie tak. W przypadku tego pliku binarnego możemy stwierdzić, że nasz ładunek jest bezstopniowy ze względu na nazwę ładunku. Ogólnie w Metasploit format ładunków to <platforma>/<ładunek>/<typ ładunku> dla wersji etapowej i <platforma>/<ładunek>_<typ ładunku> dla bezetapowego. Nasza wersja etapowa tego ładunku będzie miała postać Windows/meterpreter/reverse_tcp. Następnie musimy załadować moduł obsługi, aby przechwycił naszą powłokę, gdy ta oddzwoni. Metasploit ma narzędzie zwane handlerem do przechwytywania ładunków. Ze względu na sposób, w jaki Metasploit grupuje exploity według platformy i ponieważ moduł obsługi może przechwycić dowolny typ platformy, znajduje się on w katalogu multi. W Metasploit musimy ustawić typ ładunku na taki sam, jak ładunek msfvenom, a następnie uruchomić komendę exploit, aby go uruchomić:

Teraz, gdy już działa, możemy zdalnie połączyć się z naszym systemem docelowym Windows za pomocą protokołu RDP, zalogować się jako użytkownik docelowy i otworzyć okno programu PowerShell. PowerShell pozwala nam wykonywać polecenia poprzez ścieżkę UNC, więc uruchomimy nasz plik msf1.exe z naszego udziału ghh:

Wracając do naszego Kali Boxa, powinniśmy zobaczyć wywołanie powłoki z powrotem do serwera C2 i otworzyć sesję:

Teraz możemy wykonywać polecenia. Meterpreter ma kilka wbudowanych poleceń, które można wyświetlić za pomocą polecenia help. Do częstych zadań, które możemy chcieć wykonać, zalicza się uzyskanie identyfikatora użytkownika, który wykonał powłokę za pomocą polecenia getuid oraz uzyskanie powłoki za pomocą polecenia Shell:

Teraz możemy wykonywać polecenia. Meterpreter ma kilka wbudowanych poleceń, które można wyświetlić za pomocą polecenia help. Do częstych zadań, które możemy chcieć wykonać, zalicza się uzyskanie identyfikatora użytkownika, który wykonał powłokę za pomocą polecenia getuid oraz uzyskanie powłoki za pomocą polecenia Shell:

Możemy zobaczyć, że nasz docelowy użytkownik jest zalogowany, a następnie możemy zobaczyć dodatkowe dane wyjściowe użytkowników, którzy zalogowali się ostatnio. Aby zakończyć, wpisujemy Quit w celu wyjścia z naszej powłoki, a następnie wychodzimy -y w celu wyjścia z Metasploit. Metasploit ma ogromną ilość funkcjonalności i wyliczenie wszystkich możliwości w tym rozdziale nie jest możliwe. Jednakże dzięki klasie Metasploit Unleashed i niektórym z tych wskazówek powinieneś być na dobrej drodze do używania Metasploit jako generatora ładunku i narzędzia C2.

Metasploit

https://chacker.pl/

Jednym z pierwszych systemów C2, z którego korzysta większość użytkowników, jest Metasploit. Metasploit to platforma testowa zawierająca narzędzia i biblioteki pomagające opracowywać exploity, testować je, wykorzystywać i wykonywać zadania po eksploitacji. Metasploit występuje zarówno w wersji komercyjnej, jak i open source, a jego właścicielem jest Rapid7. Wersja społecznościowa jest zainstalowana na Kali, co ułatwia użytkownikom naukę. Istnieją nawet narzędzia takie jak Metasploitable, które mogą działać jako podatna na ataki maszyna wirtualna w ramach bezpłatnego szkolenia Metasploit Unleashed pod adresem https://www.offensivesecurity.com/metasploit-unleashed /. Ponieważ istnieje wiele wysokiej jakości samouczków, takich jak Metasploit Unleashed, nie będziemy omawiać wszystkich podstaw Metasploit. Zamiast tego skupimy się na podstawach używania Metasploit dla C2.

Systemy dowodzenia i kontroli

https://chacker.pl/

Gdy system zostanie naruszony, osoba atakująca musi mieć możliwość przeprowadzenia dalszego rozpoznania, wykonania poleceń, podniesienia uprawnień i dalszego poruszania się w sieci. Jednym z najlepszych sposobów osiągnięcia tego jest zastosowanie systemu C2. System C2 zazwyczaj ma agenta działającego na zaatakowanym hoście, który odbiera polecenia od osoby atakującej, wykonuje je, a następnie zwraca wyniki. Większość systemów C2 składa się z trzech komponentów: agenta działającego w zaatakowanym systemie, serwera pełniącego rolę pośrednika między osobą atakującą a zaatakowanym hostem oraz oprogramowania zarządzającego, które umożliwia osobie atakującej wydawanie poleceń. Agenci i osoby atakujące komunikują się z serwerem C2 za pomocą odpowiednich komponentów, umożliwiając atakującemu wysyłanie i odbieranie poleceń bez konieczności bezpośredniej komunikacji z zaatakowanym systemem. Agenci mogą komunikować się za pośrednictwem wielu różnych protokołów, w zależności od oprogramowania C2, ale popularnymi protokołami są HTTP, HTTPS, DNS, SMB, surowe gniazda TCP i RPC. Gdy osoba atakująca uruchomi agenta w zaatakowanym systemie, agent połączy się z serwerem i wyśle ​​do systemu podstawowe dane klienta, takie jak poziom uprawnień, użytkownik i nazwa hosta. Serwer sprawdzi, czy są jakieś oczekujące zadania, a jeśli ich nie ma, serwer i klient albo utrzymają zawsze aktywne połączenie, na przykład za pomocą surowych gniazd TCP lub trwałych gniazd HTTP/HTTPS, albo skonfigurują okresowa odprawa, często nazywana czasem nawigacyjnym. Ten czas sygnalizowania to przedział czasu, w którym agent skontaktuje się z Tobą w celu odprawy i dodatkowych zadań. Czasy działania sygnału ostrzegawczego są ważne dla bezpieczeństwa operacyjnego. Zbyt krótki okres czasu spowoduje, że będziesz bardzo głośny, ale dłuższe czasy oznaczają mniej poleceń, które możesz wykonać. Wybór czasu między sygnałami nawigacyjnymi powinien opierać się na celach testu i tym, czy bezpieczeństwo operacyjne stanowi zagrożenie. Jeśli nie stanowi to problemu, bardzo krótki czas świecenia pozwala osiągnąć więcej, ale jeśli tak jest, rzadsze i losowe meldowanie się utrudnia dostrzeżenie wzorców, które mogą spowodować wykrycie. Wykrycia mogą opierać się na częstotliwości meldowania się (ile razy dziennie), natężeniu wysyłanego ruchu, stosunku danych wysłanych i odebranych lub próbach wykrycia wzorców. Wiele systemów C2 ma koncepcję jittera, czyli odchyleń taktowania, którą można zastosować do czasu zameldowania, aby pomóc w unikaniu. Wszystkie systemy C2 mają różne funkcje, ale niektóre typowe obejmują możliwość tworzenia ładunków agentów, możliwość wykonywania poleceń i uzyskiwania wyników oraz możliwość przesyłania i pobierania plików. Istnieją bezpłatne wersje narzędzi C2 obsługiwane przez społeczność, takie jak Metasploit, PowerShell Empire i Covenant. Istnieją również narzędzia komercyjne, takie jak Cobalt Strike i INNUENDO, które mają wsparcie. Wybór systemu C2 powinien być podyktowany Twoimi potrzebami. Nowe systemy C2 wychodzą cały czas, a inne stają się niewspierane. Jeżeli jesteś zainteresowany doborem systemu C2 do swoich potrzeb.