Uruchamianie Mimikatz przez PowerShell

https://chacker.pl/

Jedną z niesamowitych funkcji PowerSploit jest możliwość wywołania Mimikatz przez PowerShell. Aby to zrobić, musimy wywołać skrypt Invoke-Mimikatz.ps1 z folderu Privesc. Spróbujmy. Zaloguj się do systemu docelowego Windows w laboratorium, a następnie użyj następujących poleceń:

Jedną z niesamowitych funkcji PowerSploit jest możliwość wywołania Mimikatz przez PowerShell. Aby to zrobić, musimy wywołać skrypt Invoke-Mimikatz.ps1 z folderu Privesc. Spróbujmy. Zaloguj się do systemu docelowego Windows w laboratorium, a następnie użyj następujących poleceń:

Obejście AMSI zadziałało! W tym przypadku widzimy, że skrypt został pomyślnie załadowany. Stąd możemy spróbować uruchomić Invoke-Mimikatz i sprawdzić, czy możemy uzyskać poświadczenia:

Tym razem posunęliśmy się trochę dalej, ale skrypt popełnił błąd. Jedną z wad PowerSploit jest to, że nie jest on aktywnie utrzymywany. Od jakiegoś czasu w repozytorium GitHub pojawia się wiele próśb o aktualizacje. Jedna z nich obejmuje skrypt Invoke-Mimikatz.ps1, który znajduje się w katalogu domowym Kali. Spróbujmy zamiast tego tej wersji:

Działa, ale jest kilka problemów. Pierwszą rzeczą, którą zauważamy, jest brak poświadczeń. Dzieje się tak, ponieważ ten użytkownik podlega Kontroli konta użytkownika (UAC), a użytkownik nie działa w podwyższonej powłoce. Drugą rzeczą, którą zauważamy, jest to, że PowerShell z jakiegoś powodu jest wyłączony. Kiedy zwracamy uwagę na alerty programu Windows Defender, widzimy, że program Defender wykrył złośliwą aktywność i zamknął nasz proces. Gdybyśmy byli w podwyższonym procesie, ten skrypt by zadziałał, ale ponieważ nie jesteśmy, musimy dowiedzieć się, jak uzyskać uprzywilejowaną powłokę. Ponieważ jesteśmy na konsoli, możemy po prostu poprosić o „Uruchom jako administrator”, ale gdybyśmy byli w sesji zdalnej, nie bylibyśmy w stanie tego zrobić.

Konfigurowanie PowerSploit

https://chacker.pl/

Wcześniej przyjrzeliśmy się różnym sposobom uruchamiania skryptów w PowerShell. W tej części rozdziału musimy skonfigurować PowerSploit, aby mieć do niego łatwy dostęp. Dzięki naszej konfiguracji w chmurze mamy już sklonowanego PowerSploit do katalogu lokalnego, a ponieważ znajduje się on w naszym katalogu domowym, jest również mapowany na naszym udziale SMB i serwerze internetowym uruchomionym w poprzednim ćwiczeniu.

UWAGA: Niektóre samouczki online umożliwią Ci dostęp do plików w PowerSploit i innych kodów exploitów bezpośrednio z GitHub przy użyciu surowej witryny .githubusercontent.com. Jest to niezwykle niebezpieczne, ponieważ nie zawsze znasz stan tego kodu, a jeśli go nie przetestowałeś, możesz uruchomić coś destrukcyjnego na swoim celu. Zawsze klonuj repozytorium i testuj skrypty, które zamierzasz uruchomić na maszynie wirtualnej, zanim uruchomisz je w systemie docelowym, aby Ty, Twój klient i Twoi prawnicy nie byli zaskoczeni. Aby ułatwić dostęp do adresów URI, zmieńmy nazwę katalogu na krótszą. Miejsce nie jest tutaj problemem; jednak gdy próbujemy przemycić zakodowane dane, kodowanie dodaje więcej znaków, więc krótsza nazwa jest często lepsza. Aby zmienić nazwę katalogu, po prostu wpisz następujące polecenie:

Gdy „cd” przejdziemy do katalogu ps, zobaczymy kilka plików i strukturę katalogów. Przyjrzyjmy się bliżej temu, co możemy znaleźć w każdym katalogu:

Podkatalog AntivirusBypass zawiera skrypty, które pomagają nam ustalić, gdzie w pliku binarnym program antywirusowy (AV) może identyfikować plik jako złośliwe oprogramowanie. Skrypty w tym miejscu pomagają podzielić plik binarny na części, a następnie te części są uruchamiane przez AV. Następnie, gdy zawęzisz zakres tak bardzo, jak to możliwe, możesz zidentyfikować bajty w pliku binarnym, które należy zmienić, aby ominąć podpis AV. Podkatalog CodeExecution zawiera różne narzędzia do wprowadzania kodu powłoki do pamięci. Niektóre z tych technik obejmują wstrzykiwanie DLL, wstrzykiwanie kodu powłoki do procesu, wstrzykiwanie refleksyjne i wstrzykiwanie zdalnego hosta za pomocą WMI. Przyjrzymy się niektórym z tych technik później w tym rozdziale jako sposobowi wstrzykiwania kodu powłoki Metasploit do systemu bez użycia plików. Gdy chcesz uzyskać informacje z systemu, zajrzyj do folderu Exfiltration. Ten folder zawiera narzędzia, które pomogą Ci kopiować zablokowane pliki, pobierać dane z Mimikatz i nie tylko. Niektóre z innych atrakcji obejmują keyloggery, narzędzia do zrzutów ekranu, programy do zrzutu pamięci i narzędzia pomocne w Volume Shadow Service (VSS). Te narzędzia nie pomagają w usuwaniu danych z systemu, ale świetnie nadają się do generowania danych, które warto wyekstrahować. Jeśli chcesz postępować zgodnie z zasadą spalonej ziemi, folder Mayhem jest dla Ciebie. Skrypty w tym katalogu nadpiszą Master Boot Record (MBR) systemu wybranym przez Ciebie komunikatem. W wielu przypadkach wymaga to przywrócenia systemu z kopii zapasowej, więc jeśli Twój cel zawiera coś, co Ci się podoba, trzymaj się z daleka od tego katalogu. Katalog Persistence zawiera narzędzia, które pomagają utrzymać dostęp do systemu. Dostępnych jest wiele mechanizmów trwałości, w tym rejestr, WMI i zaplanowane zadania. Te narzędzia pomagają tworzyć trwałość zarówno na poziomie podwyższonym, jak i na poziomie użytkownika; w ten sposób, niezależnie od potrzebnego poziomu dostępu, możesz łatwo utrzymać trwałość w systemach docelowych. Katalog PrivEsc zawiera narzędzia, które pomogą Ci uzyskać podwyższony dostęp. Są to narzędzia, które pomagają zidentyfikować słabe uprawnienia, które mogą zostać wykorzystane, jak również narzędzia, które faktycznie wykonują część pracy za Ciebie.  Katalog Recon zawiera narzędzia, które mogą pomóc Ci lepiej zrozumieć środowisko, w którym pracujesz. Narzędzia te są przydatne do zbierania podstawowych informacji, skanowania portów i uzyskiwania informacji o domenach, serwerach i stacjach roboczych. Mogą pomóc Ci zidentyfikować to, co chcesz osiągnąć, a także pomóc Ci w tworzeniu profili dla tego, co istnieje w środowisku

Eksploatacja i posteksploatacja z PowerSploit

https://chacker.pl/

PowerSploit to zbiór narzędzi zaprojektowanych, aby pomóc testerom penetracyjnym w nawiązaniu przyczółka i eskalacji w środowisku. Narzędzia te zostały uwzględnione w innych ramach, takich jak PowerShell Empire i Social Engineering Toolkit (SET). Te narzędzia pomagają nam ustanawiać powłoki, wstrzykiwać kod do procesów, wykrywać i łagodzić AV i nie tylko. Po nawiązaniu dostępu do komputera te narzędzia mogą pomóc nam w eskalacji i zrzucaniu krytycznych informacji systemowych. Zrozumienie, w jaki sposób te narzędzia współpracują z resztą naszego zestawu narzędzi, pomoże nam uzyskać i utrzymać dostęp do komputerów, a także propagować w całej domenie. W tej sekcji przyjrzymy się kilku przydatnym narzędziom w pakiecie PowerSploit i wykorzystamy je do utworzenia przyczółka bez konieczności instalowania dodatkowych narzędzi w systemie.PowerSploit to zbiór narzędzi zaprojektowanych, aby pomóc testerom penetracyjnym w nawiązaniu przyczółka i eskalacji w środowisku. Narzędzia te zostały uwzględnione w innych ramach, takich jak PowerShell Empire i Social Engineering Toolkit (SET). Te narzędzia pomagają nam ustanawiać powłoki, wstrzykiwać kod do procesów, wykrywać i łagodzić AV i nie tylko. Po nawiązaniu dostępu do komputera te narzędzia mogą pomóc nam w eskalacji i zrzucaniu krytycznych informacji systemowych. Zrozumienie, w jaki sposób te narzędzia współpracują z resztą naszego zestawu narzędzi, pomoże nam uzyskać i utrzymać dostęp do komputerów, a także propagować w całej domenie. W tej sekcji przyjrzymy się kilku przydatnym narzędziom w pakiecie PowerSploit i wykorzystamy je do utworzenia przyczółka bez konieczności instalowania dodatkowych narzędzi w systemie.

Bootstrapping przez Internet

https://chacker.pl/

W przypadku złożonych skryptów kodowanie ich nie zawsze jest najlepszym rozwiązaniem. Jedną z innych opcji jest umieszczenie ich na stronie internetowej, załadowanie skryptów, a następnie bootstrapowanie ich w naszym kodzie. Dwie funkcje w programie PowerShell pomagają nam to zrobić:

Invoke-Expression i Invoke-WebRequest.

Funkcja Invoke-WebRequest wyjdzie i pobierze stronę internetową, a następnie zwróci jej zawartość. Pozwala nam to umieścić stronę w Internecie z naszym kodem, a następnie pobrać ją z poziomu programu PowerShell. Ta funkcja domyślnie używa silnika IE, którego nasz komputer z systemem Windows 2019 mógł nie zainicjować, więc będziemy musieli użyć obejścia, aby upewnić się, że może pobrać nasze strony internetowe. Możemy użyć opcji -UseBasicParsing, aby powiedzieć funkcji, aby nie próbowała analizować wyników, ale zamiast tego po prostu je nam zwróciła. Funkcja Invoke-Expression ocenia przekazany jej kod. Możemy załadować kod z pliku, a następnie przekazać go przez stdin lub inną opcję. Jedną z najczęstszych metod, z których korzystają atakujący, jest jednak przekazanie Invoke-Expression wyniku z żądania internetowego, aby mogli uruchomić większe programy bez obaw o blokowanie skryptów. Na początek utwórzmy plik, który chcemy obsługiwać, a następnie możemy uruchomić podstawowy serwer Pythona w tle. Na polu Kali w laboratorium wpisz następujące polecenie:

Nasz plik nazywa się t.ps1, ponieważ chcemy wpisać jak najmniej. Dzięki naszemu serwerowi WWW działającemu na Kali (w tym przykładzie 10.0.0.40) i naszemu kodowi w t.ps1 możemy wykonać kod za pomocą wiersza poleceń programu PowerShell z naszego docelowego systemu Windows bez konieczności martwienia się o użycie opcji encodedcommand. Użyj powłoki poleceń, używając kontekstu użytkownika „target”:

Tutaj połączyliśmy nasze dwa polecenia, aby pobrać plik z naszego pudełka Kali i wykonać go. Daje nam to taki sam wynik, jak przy uruchamianiu lokalnym, i nie otrzymaliśmy żadnych komunikatów o błędach, które widzieliśmy wcześniej, gdy próbowaliśmy wykonać skrypty. Możemy zrobić to samo ze ścieżkami Universal Naming Convention (UNC). W tej części laboratorium użyjemy smbserver Impacket, aby udostępnić nasz katalog. Chcemy nazwać nasz udział ghh i chcemy, aby był mapowany na nasz katalog lokalny. Uruchomimy go również w tle. Będziemy mogli zobaczyć wynik z serwera na naszym ekranie, ale nadal będziemy mogli wpisywać polecenia.

Na koniec możemy przetestować naszą usługę Samba. Gdy smbclient poprosi o hasło, po prostu naciśnij ENTER.

Po uruchomieniu usługi tworzymy listę udziałów za pomocą smbclient, aby zweryfikować, czy nasz udział został pomyślnie dodany. Po skonfigurowaniu udziałów możemy teraz odwołać się do tego samego skryptu za pomocą ścieżki UNC. Zamiast używać wiersza poleceń, uruchommy plik wykonywalny programu PowerShell bez żadnych opcji wiersza poleceń i wypróbujmy to:

Tutaj zastosowaliśmy to samo podstawowe podejście ze ścieżką UNC zamiast adresu URL. Daje nam to kilka różnych sposobów wykonywania kodu na komputerach bez konieczności zmiany zasad programu PowerShell.

Zakodowane polecenia

https://chacker.pl/

Kiedy mamy bardziej złożone zadanie, miło jest nie martwić się o formatowanie. PowerShell ma przydatny tryb, który pozwala nam przekazać zakodowany ciąg Base64 jako skrypt do uruchomienia — pod warunkiem, że skrypt nie jest zbyt długi. Całkowita długość polecenia wiersza poleceń systemu Windows wynosi około 8000 znaków, więc to jest twój limit. Musimy wprowadzić kilka zmian, aby utworzyć zakodowane polecenie. Przede wszystkim opcja encodedcommand programu PowerShell przyjmuje zakodowany ciąg Unicode Base64, więc najpierw musimy przekonwertować nasz tekst na Unicode, a następnie zakodować go jako Base64. Aby to zrobić, potrzebujemy łatwego sposobu na konwersję do kodowania Base64. Chociaż moglibyśmy użyć narzędzi już dostępnych w Kali, aby to zrobić, użyjemy jednego z moich ulubionych zestawów narzędzi, Ruby BlackBag autorstwa Erica Montiego. Ten klejnot Ruby zawiera wiele narzędzi do kodowania i dekodowania, które pomagają zarówno w analizie złośliwego oprogramowania, jak i hakowaniu. SSH do instancji Kali w laboratorium. Najpierw musimy ją zainstalować, zanim będziemy mogli jej używać:

Po zainstalowaniu tego zestawu narzędzi nie tylko dodaje on funkcjonalność Ruby, ale także tworzy kilka skryptów pomocniczych — jeden z nich nazywa się b64, narzędzie do konwersji Base64. Następnie weźmiemy to samo polecenie, którego użyliśmy w poprzednim laboratorium, i przekonwertujemy je na ciąg Base64 zgodny z PowerShell:

Tutaj używamy echo z opcją -n, aby wydrukować nasze polecenie PowerShell bez włączania nowej linii. Następnie przekazujemy to do iconv, konwertera zestawów znaków, który przekonwertuje nasz tekst ASCII na UTF-16LE, format Windows Unicode. Na koniec przekazujemy to wszystko do b64, jak pokazano poniżej. Ciąg, który on wyprowadza, to ciąg, którego będziemy używać z PowerShell na naszym docelowym systemie Windows w laboratorium.

Powinien pojawić się następujący wynik:

Tutaj widać, że gdy przekazujemy nasz ciąg z opcją -enc, otrzymujemy oczekiwany wynik. Teraz możemy budować bardziej złożone skrypty i przekazywać cały skrypt w wierszu poleceń, dzięki czemu nie musimy się martwić o zapobieganie wykonywaniu skryptów. Oprócz użycia sztuczki b64, możemy to również zrobić bezpośrednio z PowerShell w Kali. Ta instancja ma zainstalowany Microsoft PowerShell i jest wykonywalna za pomocą polecenia pwsh. Możemy używać większości poleceń PowerShell tak samo, jak moglibyśmy to robić w systemie Windows.

Aby wyjść z powłoki PowerShell, wpisz polecenie exit, aby powrócić do zwykłych monitów powłoki.

Przekazywanie poleceń w wierszu poleceń

https://chacker.pl/

Wcześniej wykonaliśmy szereg poleceń programu PowerShell z wiersza poleceń.Tu przyjrzymy się, jak wykonywać bardziej złożone polecenia. W poprzednich przykładach widziałeś, że opcja -command może być używana do przekazywania poleceń w wierszu poleceń; jednak wiele opcji programu PowerShell można skrócić. W tym laboratorium zaloguj się ponownie do komputera docelowego w laboratorium, używając protokołu RDP jako użytkownika docelowego. Uruchom powłokę poleceń, używając uprawnień użytkownika „docelowego”. W tym przypadku możemy po prostu użyć opcji -com, jak pokazano tutaj, i zaoszczędzić sobie pisania:

Tutaj mogliśmy wydać proste zapytanie Windows Management Instrumentation (WMI) za pomocą programu PowerShell i bez żadnych dodatkowych cudzysłowów wokół zapytania. W przypadku podstawowych zapytań będzie to działać dobrze; jednak w przypadku bardziej złożonych zapytań możemy napotkać problem. Zobaczmy, co się stanie, gdy spróbujemy uzyskać dodatkowe informacje o nazwie hosta:

Tutaj widać, że nie mogliśmy użyć znaku potoku do przekazywania danych z jednej metody do drugiej, ponieważ jest on interpretowany przez system operacyjny. Najłatwiejszym sposobem obejścia tego jest użycie cudzysłowów, tak jak tutaj:

Zwróć uwagę, że nazwa hosta może być inna. Tym razem znak potoku nie został zinterpretowany przez system operacyjny, więc mogliśmy uzyskać tylko informacje o nazwie hosta z wyjścia zapytania WMI. W przypadku prostych poleceń działa to dobrze, a jeśli wykonujemy tylko kilka z tych poleceń, dość łatwo jest dodać je do skryptu wsadowego i uruchomić je stamtąd.

Warunek awarii

https://chacker.pl/

Zanim przyjrzymy się, jak obejść zabezpieczenia, powinniśmy przyjrzeć się, jak zabezpieczenia działają w działaniu. Aby to zrobić, zbudujemy bardzo prosty skrypt na naszym komputerze z systemem Windows , a następnie spróbujemy wykonać ten skrypt. W przypadku naszego skryptu po prostu utworzymy listę katalogów katalogu głównego C:\. Najpierw musimy połączyć się z systemem docelowym, używając szczegółów połączenia z wyników kompilacji naszego laboratorium i poświadczeń wymienionych w repozytorium dla rozdziału 15. Po zalogowaniu się do systemu przy użyciu protokołu pulpitu zdalnego (RDP) otwieramy wiersz poleceń jako administrator, a następnie uruchamiamy następujący kod:

Tutaj widać, że wykonanie naszego skryptu test.ps1 zostało zablokowane, ponieważ uruchamianie skryptów w systemie zostało wyłączone. Przyjrzyjmy się bieżącej polityce wykonywania:

Pokazuje to, że bieżąca polityka wykonywania jest „Restricted”. Tabela  przedstawia podział tego, co robi każda z możliwych polityk wykonywania.

Spróbujmy zmienić politykę wykonywania na Unrestricted, a następnie ponownie uruchomić nasz skrypt test.ps1:

Jak widać, po zmianie polityki na Unrestricted nasz skrypt działa bez zarzutu. Na podstawie Tabeli  wygląda na to, że RemoteSigned również powinno działać. Spróbujmy:

Zasada RemoteSigned również działa. Teoretycznie moglibyśmy po prostu zresetować zasadę wykonywania do jednej z tych dwóch wartości. Niestety, w wielu środowiskach wartość ta jest wymuszana przez zasady grupy. W takiej sytuacji nie jest tak łatwo zmienić zasadę. Dlatego ustawmy wartość z powrotem na Restricted, jak pokazano tutaj, i przejdziemy do reszty rozdziału z włączonymi najsurowszymi kontrolami:

Zamknij teraz wiersz poleceń, ponieważ pozostałe ćwiczenia laboratoryjne należy wykonać jako normalny użytkownik „docelowy”.

Ładowanie skryptów PowerShell

https://chacker.pl/

Zanim będziemy mogli przeprowadzić jakąkolwiek eksploatację za pomocą PowerShell, musisz wiedzieć, jak wykonywać skrypty. W większości środowisk niepodpisane skrypty PowerShell nie są domyślnie dozwolone. Przyjrzymy się temu zachowaniu, abyś mógł je zidentyfikować, a następnie przyjrzymy się, jak je ominąć, aby móc uruchomić dowolny kod, który chcesz uruchomić.

Przenośność programu PowerShell

https://chacker.pl/

Jednym z miłych aspektów programu PowerShell jest to, że moduły są bardzo przenośne i można je ładować na wiele różnych sposobów. Daje nam to możliwość ładowania zarówno modułów zainstalowanych w systemie, jak i modułów w innych lokalizacjach. Możemy również ładować moduły z udziałów Server Message Block (SMB), a także z sieci Web. Dlaczego możliwość ładowania z tych zdalnych lokalizacji jest tak cenna? Chcemy pozostawić jak najmniej śladów i chcemy powielać jak najmniej pracy. Oznacza to, że możemy pozostawić elementy, których będziemy często używać, w udziale SMB lub nawet w witrynie, a następnie odwoływać się do nich z tego miejsca. Ponieważ skrypt jest tylko tekstem, nie musimy martwić się o bloki dla plików binarnych lub podobnych typów plików. Możemy również zaciemniać kod, a następnie dekodować go w locie, co potencjalnie ułatwia omijanie kontroli bezpieczeństwa. Ponieważ skrypt jest tylko tekstem, możemy go uwzględnić niemal wszędzie. Często witryny z kodem, takie jak GitHub, są przydatne do tego typu działań, ponieważ takie witryny mają wiele celów związanych z biznesem. Możemy uwzględnić nasze skrypty w repozytorium lub jako podstawowe polecenia gist, które ładujemy z naszego środowiska PowerShell, aby uruchomić inne działania. PowerShell może nawet używać ustawień proxy użytkownika, więc jest to świetny sposób na ustanowienie trwałości w środowisku.

Rejestrowanie bloków skryptów

https://chacker.pl/

Rejestrowanie bloków skryptów służy do rejestrowania, kiedy wykonywane są bloki skryptów, co zapewnia większą głębię w tym, co jest wykonywane. Począwszy od programu PowerShell v5.0, rejestrowanie bloków skryptów dostarcza wielu danych o potencjalnie podejrzanych zdarzeniach, aby dać ludziom zajmującym się analizą kryminalistyczną coś do zrobienia. Rejestrowane elementy obejmują skrypty uruchomione za pomocą opcji encodedcommand, a także wszelkie podstawowe zaciemnianie. Dlatego po włączeniu rejestrowania bloków skryptów obrońcy prawdopodobnie będą mieli dodatkowe informacje na temat tego, co robiłeś. Jest to lepsze rozwiązanie dla obrońców niż rejestrowanie modułów, ponieważ wyróżnia rzeczy, które prawdopodobnie byłyby dla Ciebie ważne z punktu widzenia analizy kryminalistycznej, a jednocześnie nie powoduje tak dużego obciążenia analizą dziennika.