Хе, часто программисты совершая глупые, а может и не глупые ошибки.
И при этом все обвиняют язык программирования. Незнаю на сколько виноваты языки, но при написании защитного ПО, всегда нужно помнить про такую ошибку, как переполнение буфера.
Пример для треннировки:
Программа реализует защиту по паролю:
Как взломать такую программу не зная пароля ?
Очень просто:
Можно обойти при помощи уязвимости в функции strcpy(). Эта функция копирует пароль, предоставленный пользователем, в буфер ‘passwd’, не проверяя, достаточно ли в этом буфере места.
Предположим, что пользователь введет случайный пароль, имеющий длину достаточную для того, чтобы заполнить как буфер ‘passwd’, так и перезаписать область памяти, содержащую изначальное значение ‘0’ переменной ‘flag’.
В этом случае, даже если сравнение введенной строки и пароля не пройдет, то все равно проверка флага, который изначально имел нулевое значение, станет ненулевым, и таким образом, защита будет “взломана”.
Пример:
Тема стара, но не без намёка. Уже несколько раз встречаю похожую шляпу ! :)
И при этом все обвиняют язык программирования. Незнаю на сколько виноваты языки, но при написании защитного ПО, всегда нужно помнить про такую ошибку, как переполнение буфера.
Пример для треннировки:
Программа реализует защиту по паролю:
C:
#include <stdio.h>
int main(int argc, char *argv[])
{
int flag = 0;
char passwd[10];
memset(passwd,0,sizeof(passwd));
strcpy(passwd, argv[1]);
if(0 == strcmp("Ru-Sfera", passwd))
{
flag = 1;
}
if(flag)
{
printf("\n Password cracked \n");
}
else
{
printf("\n Incorrect passwd \n");
}
return 0;
}
Как взломать такую программу не зная пароля ?
Очень просто:
Можно обойти при помощи уязвимости в функции strcpy(). Эта функция копирует пароль, предоставленный пользователем, в буфер ‘passwd’, не проверяя, достаточно ли в этом буфере места.
Предположим, что пользователь введет случайный пароль, имеющий длину достаточную для того, чтобы заполнить как буфер ‘passwd’, так и перезаписать область памяти, содержащую изначальное значение ‘0’ переменной ‘flag’.
В этом случае, даже если сравнение введенной строки и пароля не пройдет, то все равно проверка флага, который изначально имел нулевое значение, станет ненулевым, и таким образом, защита будет “взломана”.
Пример:
Код:
./psswd 888888888888888
Password cracked
Тема стара, но не без намёка. Уже несколько раз встречаю похожую шляпу ! :)