Ошибка сегментации для школьной лаборатории Shellcode BufferOverflow - PullRequest
1 голос
/ 16 октября 2011

Я использую FedoraCore6 в соответствии с указаниями проф. Я пытаюсь просто запустить этот шелл-код, предоставленный лабораторными инструкциями, и продолжаю получать ошибку сегментации. Нам говорят, что мы можем скомпилировать с отключенным gaurd стека с помощью команды gcc-fno-stack-protector call_shellcode.c В любом случае, я просто скомпилирую код, используя gcc -o shell call_callshellcode.c, или воспользуюсь командой -fno-stack-protector. Я получаю ошибку сегментации при запуске кода вместо вызываемой оболочки. Поэтому мне предоставлен код для этой лаборатории:

#include <stdlib.h>
#include <stdio.h>

    const char code[] = 
    "\x31\xc0"
    "\x50"
    "\x68""//sh"
    "\x68""\bin"
    "\x89\xe3"
    "\x50"
    "\x53"
    "\x89\xe1"
    "\x99"
    "\xb0\x0b"
    "\xcd\x80"
    ; 

int main(int argc, char **argv)
{
    char buf[sizeof(code)];
    strcpy(buf, code);
    ((void(*) ( ))buf)();
}

1 Ответ

4 голосов
/ 16 октября 2011
  • Прежде всего, вы должны определить, где ваша программа SEGFAULTs. Один из способов сделать это - запустить dmesg| tail. Последняя строка в этом выводе будет показывать, где был указатель инструкции, когда произошел SEGFAULT.
  • Другой способ - скомпилировать программу с установленным флагом -ggdb.
  • Запустите ulimit -c unlimited на вашей оболочке, чтобы убедиться, что дамп ядра генерируется, когда программа SEGFAULTs.
  • Запустите вашу программу без изменения кода, и он должен сказать Segmentation Fault (core dumped). В вашем локальном каталоге вы должны увидеть новый файл с именем core.
  • Запустите gdb -c core, чтобы проанализировать дамп ядра.
  • Оказавшись внутри gdb, введите bt или backtrace, чтобы точно определить, где произошел SEGFAULT.
  • Вы также можете использовать такие команды, как info registers, info locals, info args для анализа имеющихся у вас значений. Используйте x/x $esp (или любое другое имя регистра), чтобы проверить, что содержат отдельные регистры.

    Удачи!
...