버퍼오버플로우

Posted by 알 수 없는 사용자
2015. 6. 8. 20:19 네트워크및보안&해킹/보안&해킹

버퍼 오버플로우

버퍼(buffer) - 어떤 데이터가 한곳에서 다른곳으로 이동할 때, 그 데이터가 일시적으로 보관되는 임시기억공간.

오버플로우(overflow) -사용자가 입력한 데이터의 크기가 너무 과하여 제한된 버퍼의 용량을 넘어서 버린것.

즉 버퍼오버플로우는 사용자가 입력한 데이터의 크기가 너무과하여 제한된 버퍼의 용량에서 넘쳐버림 이라는 뜻이된다.

사용자로부터 어떠한 입력을 받는,또 그입력값에 따라 프로그램의 실행결과가 달라지는 프로그램들이 버퍼 오버플로우의 공격대상이 된다

위는 버퍼오버 플로우의 공격대상으로 아주 좋은 소스코드이다 . 


먼저 정상적인 입력을 했을때 결과를 보면 다음과같다.

패스워드 값을 알수없으니 당연한 결과이다.

그럼 비정상적인 값(passwd의 크기를 넘어서는 값) 을 입력해보자.

위의 결과를 이해하기위해서는 먼저 메모리주소를 알아야한다.










먼저 선언된 변수가 나중에 선언된 변수보다 높은 주소값을 가지게된다, 따라서 passwd보다 auth 변수가 더 높은 주소값을 가진다.

그리고 auth변수는 선언과동시에 0으로 초기화 되었으므로 사용자의 입력전에는 위와같은 상태가된다 




먼저 정상적인 값을 입력했을때 위와같이 낮은주소부터 차례대로 입력된다.

다음은 비정상적인 입력을 했을때 상태이다 .




입력값이 passwd의 크기를 넘어서 auth의 값을 덮어버렸다 .

위와같이 되는 이유는 

gets함수의 특성 떄문이다.

gets함수는 사용자가 엔터를 치기 전까지의 입력을 메모리 주소값에 저장한다.

따라서 입력크기에 제한이없다.

gets함수는 입력값이 변수크기를 초과하게되면 그변수보다 한단계 높은 주소에 있는 변수의 값에 덮어쓰기 식으로 

저장이 되기 때문에 auth변수를 직접 건드리지 않고 값을 바꿀수있는것이다.

지금까지 위의 내용이 버퍼오버플로우의 기본원리이다.

이를 이용하여 일반 사용자권한을 최고 관리자권한으로 상승시키거나 원격상의 다른 pc의 접근권한을 획득할수도 있다.



출처 - www.hackerschool.org



'네트워크및보안&해킹 > 보안&해킹' 카테고리의 다른 글

[시스템해킹]버퍼오버플로우 실습  (329) 2015.08.28
CrackMe2 문제풀이  (6) 2015.07.17
DLL Injection  (6) 2015.06.21
CrackMe 문제풀이 (리버싱 기초)  (6) 2015.06.08
리버스 엔지니어링  (3) 2015.06.08