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.