Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #45, АВГУСТ 2004 г.

Зоопарк переполняющихся буферов 

Крис Касперски aka мыщъх

Спецвыпуск Xakep, номер #045, стр. 045-008-8


Почему в имени файла "CMD" (020444D43h, читаемое в обратном порядке) стоит пробел? Потому что в shell-коде не может присутствовать символ нуля – он служит завершителем строки. Если хвостовой пробел убрать, то получится 000444D43h, а это уже не входит в наши планы. Вместо этого мы делаем XOR eax, eax, обнуляя EAX на лету и запихивая его в стек для формирования нуля, завершающего строку "CMD ". Но непосредственно в самом shell-коде этого нуля нет!

Поскольку в отведенные нам 16 байт shell-код влезать никак не хочет, а оптимизировать его уже некуда, мы прибегаем к вынужденной рокировке и перемещаем shell-код в парольный буфер, отстоящий от адреса возврата на 32 байта. Учитывая, что абсолютный адрес парольного буфера равен 12FF70h (у тебя он может быть другим!), shell-код будет выглядеть так (просто переводим hex-коды в ASCII-символы, вводя непечатные буквицы через alt+num):

login :1234567890123456>alt-112<>alt-255<>alt-18<

passwd:3>alt-192<PhCMD T>alt-184<>alt-202<s>alt-233<w>alt-255<>alt-208<>alt-235<>254<

Вводим это в программу. Логин срывает стек и передает управление на парольный буфер, где лежит shell-код. На экране появляется приглашение командного интерпретатора. Все! Теперь с системой можно делать что угодно!

Заключение

Пара общих соображений напоследок. Переполняющиеся буфера – настолько интересная тема, что ей, не колеблясь, можно посвятить всю жизнь. Не отчаивайся и не раскисай при встрече с трудностями, первые проблески успеха придут лишь через несколько лет упорного чтения документации и бесчисленных экспериментов с компиляторами, дизассемблерами и отладчиками. Чтобы изучить повадки переполняющихся буферов, мало уметь ломать, необходимо еще и программировать. Кому только пришло в голову назвать хакерство вандализмом?! Это – интеллектуальная игра, требующая огромной сосредоточенности и невероятных усилий.

Из инструментов понадобятся компилятор, отладчик, дизассемблер и любой HEX-редактор по вкусу, а также принтер, пиво и остро заточенный карандаш.

Подавляющее большинство удаленных атак осуществляется путем переполнения буфера, частным случаем которого является переполнение (срыв) стека.

"UNIX Assembly Codes Development for Vulnerabilities Illustration Purposes" – великолепное руководство по технике переполнения буферов и захвату контроля удаленной машиной (http://opensores.thebunker.net/pub/mirrors/blackhat/presentations/bh-usa-01/LSD/bh-usa-01-lsd.pdf).

Назад на стр. 045-008-7  Содержание  Вперед на стр. 045-008-9