Я сейчас практикую переполнение буфера и реверс-инжиниринг. Мой код содержит неиспользуемую функцию. Я собираюсь вызвать неиспользуемую функцию, изменив регистр 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
Адрес функции помощника (изображение)
Я перевернул его, чтобы отправить его в буфер, как показано ..
Перевернутый текст для вызова вспомогательной функции (изображение)
При запуске , Программа запускает процесс и завершает работу. TXT-файл не создается должным образом.
Программа запускает процесс и завершает работу (изображение)
Как исправить это Ребята?
Примечание: Я нашел смещение для изменения регистра EIP с помощью модуля шаблона в инструментах peda.
Инструменты шаблона в peda (изображение)
Файл EXE был построен как 32-битный исполняемый файл на 64-битной ОС с использованием флага -m32 с компилятором g cc.
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)