본문으로 바로가기

[D+4] C언어 소개 (3)

category 해킹&보안/C언어 2017. 2. 9. 20:22
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

5) 표준 입력 함수


▣ gets

- 함수 원형 : char * gets(char * buffer);

ex) gets(변수명);

- 기능 : 문자열을 입력받아 buffer에 넣는다. 개행문자는 버림.

#include <stdio.h>

int main()
{
	char string[10];

	printf("Enter the string : ");
	gets(string);

	printf("input string : %s\n", string);

	return 0;
}

- 실행화면

- BOF(Buffer Overflow)

☞ string 변수는 크기를 10으로 설정해뒀으므로 그보다 긴 길이의 문자열을 넣으면

   에러메시지를 출력하며 프로그램을 종료한다. => 버그

☞ 그러나 종종 에러메시지를 출력하지 않고 프로그램이 이상동작을 하는 경우 => 분석 시작 및 해킹

☞ 가끔 어떤 pc에서는 입력 스트링을 "Enter the string"으로 넣는다면 종료되지 않고 계속해서 

   스트링을 무한 입력을 받는 경우가 발생한다. = 실행 흐름이 바뀜 (해킹)

☞ 왜??    우연히 입력한 글자의 끝이 main 함수의 종료코드가 있는 메모리를 덮어버려서 무한 반복하게 됨.

☞ 이러한 버퍼오버플로우를 방지하기 위해서 현재는 _s가 달린 함수를 쓰도록 권장. 

ex) gets_s(string, 10); // 10은 문자열의 길이









i2sec 대구지점 23기 수료생.

'해킹&보안 > C언어' 카테고리의 다른 글

[D+8] C언어 기초 (2)  (0) 2017.02.16
[D+7] C언어 기초 (1)  (0) 2017.02.15
[D+5] C언어 소개 (4)  (0) 2017.02.13
[D+3] C언어 소개 (2)  (0) 2017.02.08
[D+2] C언어 소개 (1)  (0) 2017.02.07