Как заточить exploit под себя


         

список ошибок, выдаваемый компилятором gcc


beta.cpp:185: error: `strnicmp' undeclared (first use this function)

beta.cpp:245: error: `isalnum' undeclared (first use this function)

beta.cpp:250: error: `isprint' undeclared (first use this function)

beta.cpp:339: error: invalid conversion from `void*' to `char*'

beta.cpp:356: error: `O_BINARY' undeclared (first use this function)

beta.cpp:361: error: `lseek' undeclared (first use this function)

beta.cpp:377: error: invalid conversion from `void*' to `char*'

beta.cpp:384: error: `read' undeclared (first use this function)

beta.cpp:398: error: `close' undeclared (first use this function)

Листинг 1  список ошибок, выдаваемый компилятором gcc при попытке трансляции файла beta.cpp

Ну, с ошибкой 34 все понятно — программа усиленно косит под форточки, не понятно за каким хреном таща за собой файл <windows.h>, но тут же использует стандартные POSIX- вызовы: open (со странным флагом O_BINARY), lseek, read и close, которых ни в самом windows, ни в одном из win32-компиляторов никогда не существовало (см. ошибки 356, 361, 384 и 398). Убираем строку "#include <windows.h>", заменяя ее на "#include <unistd.h>" и удаляем глупый флаг O_BINARY, поскольку по умолчанию файл уже является двоичным (узнать какие заголовочные файлы соответствуют данной функции можно из man'а, например, "man 2 open"). Для избавления от ругательства "this file include <malloc.h> witch is deprecated, use <stdlib.h> instead" удаляем и "#include <malloc.h>".

Ошибки 245 и 250 устраняются подключением их "родного" заголовочного файла, в котором они были объявлены "#include <ctype.h>" (см. "man isalnum"). А вот функций stricmp и strnicmp в gcc действительно нет, однако, они могут быть заменены на аналогичные им strcmp и strncmp

даже без коррекции аргументов!

Ошибки 339 и 377 исправляется еще проще: достаточно взять строку "buffer=malloc(MAX_BUFFER_SIZE)" и добавить явное преобразование типов, так же называемое ксатингом: "buffer=(char*)malloc(MAX_BUFFER_SIZE)".

Исправленный вариант лежит в файле beta-fixed.cpp и компилируется безо всяких нареканий.

Короче, будем считать, что с идентификацией транслятора мы разобрались и exploit откомпилировался нормально, но... это еще не конец, а только начало. Ведь программный листинг это только оболочка (образна говоря "тетива"), а разящие острие — загадочный и таинственный shell-код, засунутый в строковой "иероглифический" массив "\x29\xc9\x83…\xe9\xb0\xd9" или типа того. Что делать, если он не работает, или работает не так, как нам этого хочется?


Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий