Страницы

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

пятница, 5 июля 2019 г.

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

Я пытаюсь написать программу для переполнения буфера в ОС gnu/linux
В одной статье, посвящённой этой проблеме, нашла следующий способ:
[мусор]+[адрес инструкции jmp/call esp]+[шеллкод]
Дизассемблирование уязвимой программы не помогает.
Каким образом можно найти адрес инструкции jmp %esp в gnu/linux?


Ответ

по вот этой инструкции собрал бинарник на 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].
", 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

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

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