Страницы

Поиск по вопросам

суббота, 11 апреля 2020 г.

Переполнение буфера при помощи “jmp esp” в gnu/linux

#linux #ассемблер

                    
Я пытаюсь написать программу для переполнения буфера в ОС gnu/linux.

В одной статье, посвящённой этой проблеме, нашла следующий способ:

[мусор]+[адрес инструкции jmp/call esp]+[шеллкод]          


Дизассемблирование уязвимой программы не помогает.

Каким образом можно найти адрес инструкции jmp %esp в gnu/linux?
    


Ответы

Ответ 1



по вот этой инструкции собрал бинарник на 32-битной системе (на 64-битной ошибка: Error: operand type mismatch for 'jmp', см. обновление ниже). текст программы: $ cat vuln.c #include #include // hard coded jmp *esp function ;-) void jmpesp() { __asm__("jmp *%esp"); } int main(int argc, char *argv[]) { char buffer[100]; strcpy(buffer, argv[1]); printf("buffer: [%s].\n", buffer); return 0; } сборка бинарника vuln: $ gcc vuln.c -o vuln -ggdb -fno-stack-protector -z execstack а вот она, инструкция: $ objdump -d vuln | grep 'ff e4' 804844f: ff e4 jmp *%esp обновление на 64-битной системе, видимо, вместо esp следует использовать rsp: __asm__("jmp *%rsp"); тогда сборка проходит удачно. и инструкция присутствует: $ objdump -d vuln | grep 'ff e4' 40054a: ff e4 jmpq *%rsp

Комментариев нет:

Отправить комментарий