0Pricing
Ethical Hacking Academy · Lekcja

Fuzzing w poszukiwaniu awarii

Znajdowanie przesunięcia

Fuzzing w poszukiwaniu awarii to bezpłatna lekcja Ethical Hacking Academy na CoddyKit. To lekcja 2 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 fuzzing

Fuzzing polega na wysyłaniu do programu niepoprawnych lub zbyt dużych danych wejściowych w celu wywołania nieoczekiwanego zachowania, zwłaszcza awarii. Awaria często wskazuje na błąd związany z uszkodzeniem pamięci.

W przypadku przepełnień bufora pierwszym celem jest doprowadzenie do awarii celu, aby potwierdzić istnienie przepełnienia.

Przebieg działania

Klasyczny przebieg wykorzystywania podatności wygląda następująco:

  • Przeprowadzić fuzzing, aby doprowadzić program do awarii.
  • Znajdź dokładne przesunięcie względem adresu powrotu.
  • Przejąć kontrolę nad EIP.
  • Przekierować wykonanie do shellcode.

Ta lekcja obejmuje dwa pierwsze kroki.

Podłączanie debuggera

Aby obserwować awarie, należy podłączyć debugger (na przykład Immunity Debugger lub x64dbg w systemie Windows albo GDB w systemie Linux) do celu.

Gdy program ulegnie awarii, debugger pokaże stan rejestrów, zwłaszcza EIP, co pozwoli ustalić, czy adres powrotu został nadpisany.

Wysyłanie coraz większych danych

Prosty fuzzer wysyła coraz dłuższe ciągi znaków, aż program ulegnie awarii. Często zaczyna się od wysłania wielu znaków „A” (0x41).

Jeśli po awarii EIP zawiera 41414141, oznacza to potwierdzenie przejęcia kontroli nad adresem powrotu.

python -c 'print("A"*2000)' | ./vuln

Potwierdzanie awarii

Gdy aplikacja ulega awarii, a EIP jest równy 41414141, oznacza to, że przepełnienie dotarło do zapisanego adresu powrotu.

Nadal jednak nie wiadomo dokładnie, ile bajtów poprzedza EIP. Wysłanie samych identycznych bajtów informuje, że można kontrolować EIP, ale nie wskazuje jego położenia.

Znajdowanie przesunięcia: wzorce cykliczne

Aby znaleźć dokładne przesunięcie, należy zamiast samych znaków „A” wysłać unikalny, niepowtarzający się wzorzec. Każde 4 bajty tworzą inną sekwencję, więc wartość, która trafi do EIP, wskazuje przesunięcie.

Metasploit zawiera narzędzie pattern_create.rb.

msf-pattern_create -l 2000

Odczytywanie przesunięcia

Po awarii wywołanej wzorcem należy odczytać wartość EIP. Po przekazaniu jej do pattern_offset.rb narzędzie zwróci dokładną liczbę bajtów poprzedzających EIP.

To przesunięcie określa rozmiar dopełnienia przed bajtami adresu powrotu.

msf-pattern_offset -l 2000 -q 39654138

Weryfikowanie przesunięcia

Zawsze należy przeprowadzić weryfikację. Proszę zbudować dane wejściowe zawierające offset bajtów „A”, a następnie cztery bajty „B” (0x42). Jeśli EIP zmieni się na 42424242, przesunięcie jest dokładne.

Takie potwierdzenie pozwala uniknąć wielogodzinnego debugowania błędu wynikającego z przesunięcia różniącego się o kilka bajtów.

"A"*offset + "B"*4   # EIP should become 42424242

Identyfikowanie ESP

Po przejęciu kontroli nad EIP należy również sprawdzić, gdzie wskazuje ESP w chwili awarii. ESP zwykle wskazuje miejsce tuż za nadpisanym adresem powrotu, wewnątrz pozostałej części bufora.

To właśnie tam można później umieścić shellcode.

Podsumowanie narzędzi

Przydatne narzędzia do fuzzingu i pracy ze wzorcami to między innymi:

  • Spike i boofuzz: fuzzery protokołów sieciowych.
  • pattern_create / pattern_offset: znajdowanie przesunięcia EIP.
  • mona.py w Immunity: automatyzacja zadań związanych ze wzorcami, przesunięciem i niedozwolonymi znakami.
!mona pattern_create 2000

Powtarzalność ma znaczenie

Przydatna awaria musi być powtarzalna. Należy zapisać dokładne dane wejściowe, które ją wywołują, i uruchomić program ponownie w czystym stanie, aby potwierdzić stabilność przesunięcia.

Niespójne awarie często oznaczają, że błąd nie jest typowym przepełnieniem stosu albo że pewien warunek (czas, długość lub zawartość) zmienia się między uruchomieniami.

Szybkie sprawdzenie

Proszę przypomnieć sobie, dlaczego wzorzec cykliczny jest lepszy od ciągu identycznych bajtów.

Podsumowanie

Wiedzą już Państwo, jak znaleźć przesunięcie powodujące awarię:

  • Przeprowadzić fuzzing z coraz większymi danymi wejściowymi, aby wywołać awarię; potwierdzić ją wartością 41414141 w EIP.
  • Użyć wzorca cyklicznego wraz z pattern_create / pattern_offset, aby znaleźć dokładne przesunięcie.
  • Zweryfikować wynik za pomocą dopełnienia i czterech bajtów „B” (42424242).
  • Sprawdzić, gdzie wskazuje ESP, aby później umieścić shellcode.

W następnym kroku przejmą Państwo pełną kontrolę nad EIP i przekierują wykonanie.

Często zadawane pytania

Czy lekcja „Fuzzing w poszukiwaniu awarii” jest bezpłatna?

Tak — pełny tekst „Fuzzing w poszukiwaniu awarii” 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 „Fuzzing w poszukiwaniu awarii”?

Znajdowanie przesunięcia Ć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 2 z 4.

Ile czasu zajmuje lekcja „Fuzzing w poszukiwaniu awarii”?

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