Невозможно выполнить функцию системы путем изменения регистра EIP - PullRequest
0 голосов
/ 29 апреля 2020

Я сейчас практикую переполнение буфера и реверс-инжиниринг. Мой код содержит неиспользуемую функцию. Я собираюсь вызвать неиспользуемую функцию, изменив регистр 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)

1 Ответ

0 голосов
/ 29 апреля 2020

Я получил адрес функции "помощника", как показано ниже, с помощью gdb

Адрес, который вы получили: 0x565561b9 означает, что вы скомпилировали независимый от позиции исполняемый файл , который загружается по разному адресу при каждом запуске (кроме как в GDB, поскольку GDB отключает рандомизацию адреса).

В качестве первого шага вы должны перестроить свой исполняемый файл с флагами -fno-pie -no-pie и запустить его с отключенным ASLR (точно так же, как он работает под GDB):

setarch `uname -m` -R /root/vulnerable

Как только вы это заработаете, вам нужно выяснить, как заставить его работать с включенным ASLR (ASLR предназначен именно для этого атакуй сильнее).

...