• Уменьшение отступа

    Обратная связь

    (info@ru-sfera.pw)

ПЕНТЕСТИНГ Переполнение буфера


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 176
Хе, часто программисты совершая глупые, а может и не глупые ошибки.

И при этом все обвиняют язык программирования. Незнаю на сколько виноваты языки, но при написании защитного ПО, всегда нужно помнить про такую ошибку, как переполнение буфера.

Пример для треннировки:

Программа реализует защиту по паролю:

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

Тема стара, но не без намёка. Уже несколько раз встречаю похожую шляпу ! :)
 
Верх Низ