0Pricing
Ethical Hacking Academy · Lekcja

Kontrolowanie EIP

Nadpisywanie adresu powrotu

Kontrolowanie EIP to bezpłatna lekcja Ethical Hacking Academy na CoddyKit. To lekcja 3 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.

Cel

Znają już Państwo przesunięcie, więc mogą umieścić dowolne cztery bajty w EIP. Pozostaje pytanie: jaki adres należy tam wstawić?

Celem jest ustawienie EIP tak, aby wskazywał shellcode. Nie można jednak po prostu wpisać na stałe adresu stosu — potrzebny jest niezawodny skok.

Dlaczego nie wpisać na stałe adresu stosu

Adres stosu, pod którym znajduje się shellcode, może zmieniać się między uruchomieniami i systemami. Nawet niewielkie zmiany środowiska mogą go przesunąć.

Zamiast tego należy użyć stabilnej instrukcji znajdującej się już w pamięci, która przekieruje wykonanie tam, gdzie aktualnie wskazuje ESP.

Sztuczka JMP ESP

Jeśli w chwili awarii ESP wskazuje shellcode, można ustawić EIP na adres instrukcji JMP ESP. Po załadowaniu tego adresu do EIP procesor wykona jmp esp i przejdzie do shellcode.

Takie pośrednie przekierowanie zwiększa niezawodność exploita niezależnie od dokładnego adresu stosu.

jmp esp   ; opcode FF E4

Znajdowanie JMP ESP

Należy przeszukać załadowane moduły (najlepiej takie bez ASLR) pod kątem bajtów kodu maszynowego FF E4. Adres bazowy modułu pozostaje stały, dzięki czemu ten gadżet jest niezawodny.

Narzędzia takie jak mona.py automatycznie znajdują odpowiednie instrukcje.

!mona jmp -r esp -cpb "\x00"

Unikanie niedozwolonych znaków

Niektóre wartości bajtów uszkadzają dane wejściowe, zanim dotrą one do bufora w niezmienionej postaci. Klasycznym przykładem jest bajt null 0x00, który kończy łańcuchy C. Inne przykłady to 0x0a (znak nowej linii) i 0x0d (powrót karetki).

Adres JMP ESP nie może zawierać żadnego z tych niedozwolonych znaków.

Identyfikowanie niedozwolonych znaków

Aby ustalić, które bajty są niedozwolone, należy wysłać do bufora wszystkie wartości bajtów z zakresu 0x00-0xff, a następnie obejrzeć pamięć w debuggerze. Bajty, które zostały zmienione lub zniknęły, są niedozwolonymi znakami.

Należy wykluczyć je zarówno z adresu powrotu, jak i z shellcode.

!mona bytearray -cpb "\x00"

Budowanie nadpisania EIP

Teraz należy złożyć dane wejściowe: dopełnienie do przesunięcia, a następnie adres JMP ESP w kolejności little-endian.

Jeśli JMP ESP znajduje się pod adresem 0x625011AF, zapisywane bajty będą odwrócone.

buf = "A"*offset + "\xaf\x11\x50\x62"  # 0x625011AF, little-endian

Weryfikowanie skoku

Należy ustawić punkt przerwania na adresie JMP ESP w debuggerze i uruchomić exploit. Gdy EIP dotrze pod ten adres i wykona skok przez ESP, będzie to potwierdzenie niezawodnego przekierowania.

W tym momencie EIP wskazuje miejsce, w którym znajdzie się shellcode.

Robienie miejsca na shellcode

Za adresem powrotu pozostała część bufora (na którą wskazuje ESP) zawiera shellcode. Jeśli miejsca jest mało, może być potrzebny krótki skok lub przeniesienie kodu.

Ślizg NOP (ciąg bajtów 0x90 oznaczających brak operacji, 0x90) przed shellcode zwiększa tolerancję, dzięki czemu skok może trafić w dowolne miejsce tego ciągu.

buf = "A"*offset + ret + "\x90"*16 + shellcode

Składanie całości

Pełna struktura exploita jest już jasna:

  • Dopełnienie do przesunięcia.
  • Adres JMP ESP (bez niedozwolonych znaków, w kolejności little-endian).
  • Ślizg NOP.
  • Shellcode.

Do uruchomienia powłoki pozostał już tylko jeden krok.

Alternatywy dla JMP ESP

JMP ESP to klasyczny sposób przekierowania, ale nie jedyny. Jeśli inny rejestr wskazuje bufor, można użyć jmp eax, call esp lub gadżetu push esp; ret.

Zasada pozostaje taka sama: należy znaleźć stabilną instrukcję, która przekaże sterowanie w miejsce, gdzie znajduje się shellcode.

Szybkie sprawdzenie

Proszę przypomnieć sobie, dlaczego JMP ESP jest preferowane zamiast wpisanego na stałe adresu stosu.

Podsumowanie

Mają już Państwo kontrolę nad przebiegiem wykonania:

  • Należy nadpisać EIP adresem gadżetu JMP ESP zamiast zawodnym adresem stosu.
  • Gadżetu należy szukać w module bez ASLR, unikając niedozwolonych znaków, takich jak 0x00.
  • Adres należy zapisać w kolejności little-endian i dodać ślizg NOP przed shellcode.

W następnym kroku wygenerują Państwo shellcode i uruchomią powłokę.

Często zadawane pytania

Czy lekcja „Kontrolowanie EIP” jest bezpłatna?

Tak — pełny tekst „Kontrolowanie EIP” 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 „Kontrolowanie EIP”?

Nadpisywanie adresu powrotu Ć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 3 z 4.

Ile czasu zajmuje lekcja „Kontrolowanie EIP”?

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

  1. Pamięć i stos
  2. Fuzzing w poszukiwaniu awarii
  3. Kontrolowanie EIP
  4. Shellcode i eksploatacja
← Powrót do Ethical Hacking Academy