2010-04-04 2 views
1

이제 기사 http://www.tenouk.com/Bufferoverflowc/Bufferoverflow4.html을 기반으로 자신의 PC (Ubuntu 9.10, gcc-4.4.1)에서 스택 버퍼 오버플로 공격 테스트를 수행하고 있습니다. 그러나 나는 목표를 달성하지 못했습니다. 세분 오류가 발생할 때마다 몇 가지 오류 정보가 첨부됩니다.암시 적 함수 __strcpy_chk() 호출

소스 코드를 컴파일하고 objdump를 사용하여 추가 정보를 얻고 싶습니다. __strcpy_chk 함수는 덤프 된 어셈블리 코드에서 호출되며 "__strcpy_chk() 함수는 소스 표준에 없으며 이진 표준에만 있습니다." 컴파일러가 런타임 스택을 보호하기 위해 사용하는 메커니즘입니까? 테스트를 끝내려면 어떻게해야 보호 기능을 무시할 수 있습니까?

감사합니다.

+0

ASLR을 사용하도록 설정 했습니까? -fno-stack-protector 플래그로 컴파일합니까? -execstack -Z 플래그로 컴파일합니까? –

+0

아니요, 플래그없이 코드를 컴파일하고 ASLR이 켜져 있습니다. –

답변

3

이 함수는 우연히 (즉, 함수의 반환 주소를 덮어 쓰는) 물건을 너무 심하게 부숴 버리지 않으며 그 지정이 아닌 strcpy 구현의 일부인지 확인하려고 시도하고 있습니다. strcpy의 문제에 대한 부분 패치 일 뿐이지 만 웹 페이지가 말한 문제에 대해 공정한 대비를하며 적은 비용으로 보호 해줍니다.

당신이 그것을 피하려면 strcpy의 자신의 버전을 작성하십시오. "처음"생각하는 순진한 구현은 문제가 있어야하며 데모 용으로 훌륭하게 수행됩니다.