2012-02-09 5 views
1

libc에 return을 사용하여 버퍼 오버플로를 만들려고합니다.libc로 돌아 가면 세그먼트 화 오류가 발생합니다.

다음은 공격자 코드입니다. http://codepad.org/TtoLjAHc. 페이로드를 만들어 badfile이라는 파일에 저장합니다.

다음은 취약한 코드입니다 : http://codepad.org/DZ7AQy4D. 그것은 badfile에서 읽고 쉘을 생성하기로되어 있습니다.

ASLR 및 스택 보호가 꺼져 있습니다.

공격자 코드가 작동합니다. 그러나 취약한 코드는 segfault를 발생시킵니다.

누구든지 내가 잘못 가고 있다고 설명 할 수 있습니까? 이용자 코드

관련 섹션은 :

memset(buffer, "\x90", 52); 
memcpy(buffer,"BUF=",4); 
memcpy(buffer+36, systemAddr,4); 
memcpy(buffer+40,exitAddr,4); 
memcpy(buffer+44, shAddr,4); 
memcpy(buffer+48, nullPad, 4); 

이 변수 버퍼 지금 FREAD를 사용 취약한 프로그램 판독 BADFILE라는 파일에 기록된다(). 취약한 프로그램의 관련 섹션 :

char buffer[12]; 
length = fread (buffer, sizeof (char), 52, badfile); 
+1

코드의 _relevant_ 부분을 여기에 인라인으로 게시하고 디버거에서 악용 사례를 실행하여 배운 내용을 게시하십시오. – Mat

+0

매트, 지금 글을 살펴보실 수 있나요? 나는 관련 코드 섹션을 물어 보았다. 미리 감사드립니다. Roy – user916315

+3

오버런 공격은 매우 민감합니다. 디버거와 시간을 보내고, 스택 레이아웃을 이해하고, 버퍼의 위치, 리턴 주소의 위치, 오버런이 정확히 발생한 정도와 정확히 무슨 일이 일어 났는지를 확인해야합니다. 포럼을 통한 디버깅이 제대로 작동하지 않을 것이라고 생각합니다. – ugoren

답변

-1

당신은 buffer 메모리의 12 진수를 할당 한,하지만 당신은 52 진수를 작성하려고합니다. 따라서 세그먼트 오류가 발생하는 배열에서 나갑니다.

시도 :

*char buffer[12]; 
length = fread (buffer, sizeof (char), **12**, badfile);* 

하고 잘 작동합니다.

+0

의도적 인 부분입니다. OP가 악용하려는 고의적 인 버퍼 오버 플로우 취약점입니다. – interjay

관련 문제