Czas zresetować system wirtualny i uruchomić poprzedni skrypt. Pamiętaj, aby szybko podłączyć się do wsshd.exe i nacisnąć klawisz F9, aby uruchomić program. Pozwól programowi osiągnąć początkowy wyjątek. Kliknij w dowolnym miejscu sekcji demontażu i naciśnij klawisze CTRL-G, aby wyświetlić okno dialogowe Wprowadź wyrażenie do wykonania. Wprowadź adres z Mona, którego używasz do przejścia do ESP, jak pokazano poniżej. W tym przykładzie było to 0x7c345c30 z MSVCR71.dll. Naciśnij klawisz F9, aby osiągnąć punkt przerwania.
Jeśli program ulega awarii zamiast osiągnąć punkt przerwania, istnieje prawdopodobieństwo, że masz zły znak w kodzie powłoki lub w skrypcie występuje błąd. Problemy ze złymi znakami zdarzają się od czasu do czasu, ponieważ podatny program (lub program klienta SCP w tym przypadku) może reagować na pewne znaki i powodować przerwanie lub inną modyfikację exploita. Aby znaleźć zły znak, musisz przejrzeć zrzut pamięci debugera i dopasować ten zrzut pamięci do rzeczywistego kodu powłoki wysłanego przez sieć. Aby skonfigurować tę inspekcję, musisz powrócić do systemu wirtualnego i ponownie wysłać skrypt ataku. Gdy zostanie osiągnięty początkowy wyjątek, kliknij sekcję stosu i przewiń w dół, aż zobaczysz litery A. Kontynuuj przewijanie w dół, aby znaleźć kod powłoki, a następnie wykonaj ręczne porównanie. Innym prostym sposobem wyszukiwania złych znaków jest wysyłanie wszystkich możliwych kombinacji pojedynczego bajtu sekwencyjnie jako danych wejściowych. Możesz założyć, że 0x00 to zły znak, więc wpisz coś takiego:
UWAGA: Może być konieczne wielokrotne powtórzenie procesu wyszukiwania złych znaków, aż kod zostanie wykonany poprawnie. Generalnie należy wykluczyć wszystkie znaki odstępu: 0x00, 0x20, 0x0a, 0x0d, 0x1b, 0x0b i 0x0c. Należy wykluczać po jednym znaku na raz, aż wszystkie oczekiwane bajty pojawią się w segmencie stosu.
Gdy to będzie działać poprawnie, należy osiągnąć punkt przerwania ustawiony w instrukcjach PUSH ESP i RETN. Naciśnij klawisz F7, aby wykonać pojedynczy krok. Wskaźnik instrukcji powinien teraz wskazywać na wypełnienie NOP. Krótkie sanki lub wypełnienie powinny być widoczne w sekcji deasemblera, jak pokazano tutaj:
Naciśnij F9, aby kontynuować wykonywanie. Na ekranie powinien pojawić się kalkulator, jak pokazano poniżej, pokazując w ten sposób wykonanie kodu powłoki w naszym działającym exploicie! Zademonstrowaliśmy teraz podstawowy proces rozwoju exploita Windows na rzeczywistym exploicie.
Więliśmy podatną na ataki aplikację Windows i napisaliśmy działający exploit, aby naruszyć system docelowy. Celem było zwiększenie Twojej znajomości Immunity Debugger i wtyczki Mona od Corelan Team, a także wypróbowanie podstawowych technik powszechnie stosowanych przez twórców exploitów w celu skutecznego naruszenia bezpieczeństwa aplikacji. Identyfikując moduły, które nie uczestniczyły w różnych kontrolach ograniczających ataki, takich jak ASLR, byliśmy w stanie użyć ich do uzyskania niezawodnego exploita. Następnie przyjrzymy się bliżej różnym zabezpieczeniom pamięci i technikom obejścia.