2011-03-13 5 views
7

는 일반적으로 우리 모두가 가지고있는 기본 버퍼 오버 플로우 형식을 참조하십시오 - NOPs + shellcode + return_address버퍼 오버 플로우 공격 형식

왜 우리가 사용 해달라고, 우리는 쉘 코드의 시작 리턴 어드레스 점을 NOPs + return_address + shellcode??

취약점이 main()에있는 경우 스택 세그먼트 외부에 데이터를 쓰려고 시도했을 가능성이 있습니다. 내가 맞습니까? 그게 유일한 이유 야?

오, 그렇습니다. 나는 return-to-libc, ptrace 등을 사용하는 다른 종류의 공격을 언급하지 않고 있습니다. 나는 왜 가장 기본적인 버퍼 오버 플로우 공격이 모든 곳에서 두 번째가 아닌 첫 번째 방법으로 증명되었는지 알고 싶습니다.

답변

10

반송 주소는 shellcode+nop sled 이전 또는 이후에 올 수 있습니다. 예를 들어, 스택의 맨 위에있는 변수를 쓰는 경우 충분한 공간이 없기 때문에 nop sled+shell code을 리턴 주소 (EIP) 뒤에 써야 할 수 있습니다.

그러나 NOP 슬 레드는 항상 쉘 코드 옆에 있습니다. 그 이유는 쉘 코드의 대상을 최대한 크게 만들기 위해 썰매를 사용하지 않기 때문입니다. EIP가 쉘 코드에서 + = 100 바이트를 가리키고 있다면 목표를 맞추기 위해 100 바이트 이상의 nop 슬 레드를 사용해야합니다. 따라서 NOPs + return_address + shellcode은 유효하지 않습니다. 일반적인 문자열은 다음과 같이됩니다 악용 :

JUNK + return_address + NOPs + shellcode

그리고 당연히 "return-to-libc" 스타일의 공격 쉘 코드 또는 NOP 썰매를 필요로하지 않습니다.

이 간단한 스택 기반 버퍼 오버 플로우 공격은 최신 시스템에서는 작동하지 않습니다. NX 존, 스택 카나리 및 ASLR로 인해 Alpeh-One 's Smashing The Stack for Fun 및 Profit이 더 이상 작동하지 않습니다.이 모두는 Windows 및 Linux에서 기본적으로 사용됩니다.

당신의 사본을 데리러해야합니다 상세한 답변

enter image description here

+2

감사합니다! –