/* scatbufo.c */
/* Hal Flynn
/* December 31, 2001 */
/* scatbufo.c demonstrates the problem */
/* with the strcat function which */
/* is part of the c library. This */
/* program demonstrates strcat not */
/* sufficiently checking input. When */
/* executed with a 7 byte argument, a */
/* buffer overflow occurs. */
#include
#include
int main(int argc, char *argv[])
{
overflow_function(*++argv);
return (0);
}
void overflow_function(char *b)
{
char c[8] = «0»;
strcat(c, b);
return;
}Данные командной строки из массива
/* getsbufo.c */
/* Hal Flynn
/* December 31, 2001 */
/* This program demonstrates how NOT */
/* to use the gets function. gets */
/* does not sufficient check input */
/* length, and can result in serious */
/* problems such as buffer overflows. */
#include
int main
{
get_input;
return (0);
}
void get_input(void)
{
char c[8];
printf(“Enter a string greater than seven bytes: ”);
gets(c);
return;
}В исходном тексте программы можно найти функцию
Подробнее с проблемой переполнения буфера можно познакомиться в главе 8.
Ошибки проверки входных данныхПричина других типичных ошибок программирования кроется в недостаточной проверке входных данных программы. В результате уязвимость программы может проявиться при передаче ей различных типов данных, как, например, это происходит с программами Web CGI.
Ошибки проверки входных данных программы могут привести к
/* fmtstr.c */
/* Hal Flynn
/* December 31, 2001 */
/* fmtstr.c demonstrates a format */
/* string vulnerability. By supplying */
/* format specifiers as arguments, */
/* attackers may read or write to */
/* memory. */
#include
int main(int argc, char *argv[])
{
printf(*++argv);
return (0);
}