[exploit writing] 1_스택 기반 오버플로우 (3)

이제 디버거를 통해 스택 오버 플로우가 일어나는 과정을 드디어 볼것이다.

목표

스택에 버퍼 오버 플로우를 일으켜 EIP 를 통제하기 하는 것을 windbg를 통해 확인한다.

과정

1. 우선 windbg -I 명령을 통해 post-motem 디버거로 등록하자. 이 기능을 사용할 경우 어플리케이션에 문제 발생 후에 해당 문제점에 대한 사후분석이 가능해진다. 즉, 오류가 발생하면 디버거가 자동으로 이를 포착한다.


꼭 windbg 가 있는 디렉토리로 들어가서 windbg -I 명령어를 써야한다! windbg 우클릭 후 속성에 가면 위치가 있을 것이니 복사해서 cd 명령어를 통해 들어가도록 하자.

2. test.pl 파일을 좀 수정해야한다.
my $junk = "\x41" x 10000; -> my $junk = "\x41" x 30000;
왜냐하면 10000은 오버 플로우가 발생하지 않는다. exploit writing 문서에는 3만 이상으로 해야 오버 플로우가 난다고 명시만 되어있다. 하지만 코드는 수정이 안됐는지 오류가 뜨지 않아서 수정해야했다.

3. 이제 converter 프로그램을 사용해서 오류가 나도록 해보자.

crash 파일을 load 하자 windbg가 오류를 감지하고 자동으로 실행되어 오류 지점을 보여준다.

4. 위 사진에서 주목해야할 부분은 eip=4141414141 과 41414141 ??  ??? 이다.
왜냐하면 우리는 방금 소목표를 이루었기 때문이다. 즉, EIP 값을 오버 플로우를 통해 41414141로 바꾸었다.

5. 우리가 앞에서 작성한 crash.m3u 파일이 버퍼로 읽혀 버퍼가 오버플로우 되는 것처럼 보인다. 버퍼로 채워지는 정확한 양을 알 수 있다면 EIP 값을 완전히 통제 가능할 것이다. 이런 형태의 취약점을 흔히 스택 오버플로우라 부른다. 여기서 중요한 것은, 정확한 버퍼 크기를 알아내, 정확하게 EIP를 덮어쓰는 것이다.


다음 소목표는 정확한 버퍼의 크기를 알아내는 것이다.

출처 : Exploit Writing By Corelan

댓글

이 블로그의 인기 게시물

윈도우 설치에서 파티션 설정 오류(NTFS)

[exploit writing] 1_스택 기반 오버플로우 (1) First

하둡 설치 오류 정리