Narzędzie ujawniło różnice pomiędzy programami korzystającymi z funkcji ViewStudentGrades, jak pokazano poniżej:
Szybka kontrola dekompilacji funkcji obu wersji ujawnia, że podczas analizowania danych wejściowych użytkownika za pomocą funkcji atoi nie sprawdzono granic indeksu tablicy studentów. Oznacza to, że możemy wybrać dowolny dodatni lub ujemny numer indeksu, co pozwala nam traktować dowolny adres z wyrównaniem do 32 bajtów jako strukturę danych Ucznia. Opcja „Zmień oceny” pozwala na zmianę ocen uczniów, jeśli ustawione zostanie prawidłowe hasło. Okazuje się, że tę podatność możemy wykorzystać na swoją korzyść. Jeśli przejdziemy do Windows | Tabela symboli i wyszukaj admin_password symbol, zauważymy, że znajduje się on pod offsetem 0x001040a0. To jest dokładnie 64 bajty przed bazowym adresem tablicy uczniów (0x001040e0). Co by się stało, gdybyśmy skorzystali z opcji „Wyświetl oceny” i wybrali ucznia o numerze -2?
Jak widać, traktowanie pamięci admin_password jako zmiennej typu struktury Studenta zakończy się tym, że hasło będzie znajdować się dokładnie w pozycji „nazwa” struktury. Znaleźliśmy prymityw wykorzystywania odczytu i możemy teraz odczytać 24 bajty z dowolnej wartości pamięci wyrównanej do 32 bajtów. Ale to nie wszystko. Zwróć uwagę, jak kontrolujemy wartość indeksu i wartość składową ocen dla struktury uczniów w funkcji ChangeStudentGrades. Oznacza to, że możemy zapisać 4 bajty w dowolnym miejscu i 28 bajtów z dowolnego 32-bajtowego adresu pamięci.