0Pricing
Ethical Hacking Academy · Lekcja

Pamięć i stos

Jak działają przepełnienia

Pamięć i stos to bezpłatna lekcja Ethical Hacking Academy na CoddyKit. To lekcja 1 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.

Układ pamięci procesu

Gdy program działa, system operacyjny przydziela mu układ pamięci z wyraźnie wydzielonymi obszarami: text (kod), data/BSS (zmienne globalne), heap (alokacja dynamiczna) oraz stack.

Przepełnienia bufora najczęściej wykorzystują stos, dlatego jego zrozumienie jest niezbędne.

Czym jest stos?

Stos to obszar pamięci używany podczas wywołań funkcji. Przechowuje zmienne lokalne, argumenty funkcji i adresy powrotu.

Na platformie x86 rośnie w dół: umieszczanie danych na stosie przesuwa wskaźnik stosu w kierunku niższych adresów. Ten kierunek ma znaczenie, gdy dochodzi do przepełnienia.

Ramki stosu

Każde wywołanie funkcji tworzy ramkę stosu. Ramka zazwyczaj zawiera zmienne lokalne, zapisany wskaźnik bazowy (EBP) oraz adres powrotu (zapisany EIP).

Adres powrotu wskazuje procesorowi, gdzie wznowić wykonywanie po zakończeniu funkcji. Przejęcie nad nim kontroli jest sednem wykorzystywania przepełnienia stosu.

Najważniejsze rejestry

W 32-bitowym x86 najważniejsze rejestry to:

  • ESP: wskaźnik stosu, wskazuje szczyt stosu.
  • EBP: wskaźnik bazowy, stanowi punkt odniesienia dla bieżącej ramki.
  • EIP: wskaźnik instrukcji, zawiera adres następnej instrukcji.

Jeśli ma się kontrolę nad EIP, ma się kontrolę nad przepływem wykonywania.

Czym jest bufor?

Bufor to blok pamięci o stałym rozmiarze, na przykład lokalna tablica znaków. Program oczekuje, że dane zmieszczą się w jego obrębie.

Jeśli program kopiuje więcej danych, niż może pomieścić bufor, bez sprawdzenia długości, nadmiar przelewa się do sąsiedniego obszaru pamięci.

char buffer[64];
strcpy(buffer, user_input); // no bounds check

Przepełnienie bufora

Przepełnienie bufora występuje, gdy dane wejściowe przekraczają rozmiar bufora i nadpisują sąsiednie dane na stosie.

Ponieważ zapisany EBP i adres powrotu znajdują się tuż za lokalnymi buforami, odpowiednio duże dane wejściowe mogą nadpisać adres powrotu, przejmując kontrolę nad przebiegiem wykonania.

Niebezpieczne funkcje

Przepełnienia zwykle wynikają z użycia niebezpiecznych funkcji języka C, które nie sprawdzają długości:

  • strcpy, strcat, sprintf, gets.

Bezpieczniejsze alternatywy, takie jak strncpy czy snprintf, przyjmują limit rozmiaru, ale starszy kod jest pełen tych niebezpiecznych funkcji.

gets(buffer); // never use: no length limit at all

Co daje nadpisanie EIP

Gdy podatna funkcja kończy działanie, procesor pobiera adres powrotu (obecnie kontrolowany przez atakującego) do EIP i wykonuje skok pod ten adres.

Jeśli wskażą Państwo w EIP własny wstrzyknięty kod maszynowy (shellcode), procesor wykona go z uprawnieniami programu.

Adresowanie little-endian

Architektura x86 jest zgodna z konwencją little-endian: wartości wielobajtowe są przechowywane od najmniej znaczącego bajtu. Aby nadpisać adres powrotu wartością 0x080414C3, należy zapisać bajty w odwrotnej kolejności.

Pomylenie kolejności bajtów to częsty błąd początkujących, który powoduje ciche niepowodzenie exploitów.

address 0x080414C3 -> bytes \xc3\x14\x04\x08

Współczesne mechanizmy ochrony

Współczesne systemy stosują mechanizmy ochrony, które utrudniają wykorzystanie podatności:

  • DEP/NX: oznacza stos jako niewykonywalny.
  • ASLR: losowo zmienia adresy w pamięci.
  • Canary stosu: wykrywa nadpisania przed powrotem z funkcji.

Ten kurs koncentruje się na klasycznym przypadku (przy wyłączonych zabezpieczeniach), aby nauczyć Państwa podstaw.

Dlaczego to nadal ma znaczenie

Choć współczesne mechanizmy ochrony utrudniają klasyczne przepełnienia stosu, podstawy nadal są niezbędne. Systemy wbudowane, urządzenia IoT i starsze oprogramowanie często w ogóle nie mają tych zabezpieczeń.

Opanowanie podstawowego przypadku jest również warunkiem stosowania zaawansowanych technik, takich jak ROP, które omijają współczesne mechanizmy ochrony.

Szybkie sprawdzenie

Proszę przypomnieć sobie, nad jaką wartością atakujący chce ostatecznie przejąć kontrolę.

Podsumowanie

Znają już Państwo podstawy:

  • Stos przechowuje zmienne lokalne, zapisany EBP i adres powrotu, a rośnie w dół.
  • ESP, EBP, EIP to najważniejsze rejestry x86; kontrolowanie EIP oznacza kontrolowanie wykonania.
  • Niebezpieczne funkcje, takie jak strcpy i gets, powodują przepełnienia.
  • Architektura x86 jest zgodna z konwencją little-endian; współczesne zabezpieczenia to DEP, ASLR i canary.

W następnym kroku przeprowadzą Państwo fuzzing programu, aby znaleźć przesunięcie powodujące awarię.

Często zadawane pytania

Czy lekcja „Pamięć i stos” jest bezpłatna?

Tak — pełny tekst „Pamięć i stos” 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 „Pamięć i stos”?

Jak działają przepełnienia Ć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 1 z 4.

Ile czasu zajmuje lekcja „Pamięć i stos”?

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