В настоящее время я практикую переполнение буфера и обратный инжиниринг. Мой код содержит неиспользуемую функцию. Я намерен вызвать неиспользуемую функцию, изменив регистр EIP. Но когда я это делаю, программа запускает процесс и завершает работу. Кажется, что функция вызывается, но текстовый файл не был создан, как предполагалось.
Мой код:
#include <stdio.h>
#include <unistd.h>
int helper(){
system("touch pwn.txt");
}
int overflow() {
char buffer[500];
int userinput;
userinput = read(0, buffer, 700);
printf("\nUser provided %d bytes. Buffer content is: %s\n", userinput, buffer);
return 0;
}
int main(int argc, char *argv[]) {
overflow();
return 0;
}
Я получил адрес «вспомогательной» функции, как показано ниже, с помощью gdb.
Адрес вспомогательной функции (изображение)
Я перевернул его, чтобы отправить в буфер, как показано.
Перевернутый текст для вызова вспомогательной функции (изображение)
При запуске Программа запускает процесс и завершает работу. Текстовый файл не создается, как предполагалось.
Программа запускает процесс и завершает работу (изображение)
Как исправить, ребята?
Примечание. Я нашел смещение для изменения регистра EIP с помощью модуля шаблона в инструментах peda.
Инструменты шаблонов в педа (изображение)
EXE-файл был создан как 32-битный исполняемый файл в 64-битной ОС с использованием флага -m32 с компилятором gcc.
OS : PRETTY_NAME="Kali GNU/Linux Rolling"
NAME="Kali GNU/Linux"
ID=kali
VERSION="2020.2"
VERSION_ID="2020.2"
VERSION_CODENAME="kali-rolling"
ID_LIKE=debian
GCC : gcc version 9.3.0 (Debian 9.3.0-10)