|
Техника сетевых атакНо в некоторых случаях можно обойтись и без этого [326]. Пусть, например, имеется следующая программа, содержащая ошибку переполнения буфера (на диске, прилагаемом к книге, она находится в файле “/SRC/buff.cmd.c”): · #include «stdio.h» · #include «string.h» · · · auth() · { · char pass[32]; · printf("Passw:"); gets( amp;pass[0]); · if (!strcmp( amp;pass[0],"KPNC*")) · return 1; · return 0; ·} · · main() · { · printf("CMD Shell Demo\n"); · if (auth()) · printf("Password ok\n"); · else · printf("Invalid password\n"); · ·} Если откомпилировать этот файл с помощью Microsoft Visual Studio 6.0 и запустить под отладчиком, установив точку останова в начале процедуры auth(), можно узнать адрес буфера в стеке, размер кадра стека и значение регистров при выходе из функции (разумеется, для этого необходимо трассировать код, пока не встретится команда ret). Отладчик в этот момент может выглядеть так (смотри рисунок 076): Рисунок 076 Выяснение адреса буфера Значение регистра ESP в момент выхода из функции равно 0x12FF7C [327], а размер кадра стека 0x20+0x4 = 0x24 байт (четыре байта занимает сохраненное в стеке значение регистра EBP) ...» |
Код для вставки книги в блог HTML
phpBB
текст
|
|