Lord of BOF_12_Darkknight


핵심 알고리즘은 다음과 같다.
argv[1]을 buffer에 복사한다. overflow 가능- return address에 스택 주소는 불가능
- 스택 주소를 return address로 사용할 수 없다.
힌트에서는 RTL을 이용하라고 한다. 이는 return to library로, return address에 라이브러리 함수 주소를 이용하는 것이다. 라이브러리 주소 아래쪽으로는 return address와 적절한 함수 인자들을 넣어준다.
스택에 /bin/sh 문자열을 저장하고, 스택 주소를 인자로 넣어 system 함수를 호출하는 방식으로 exploit 하겠다.

gdb로 system 함수의 주소를 알아보았다. LOB에는 ASLR이 걸려있지 않아 이 주소를 그대로 이용해도 된다. /bin/sh 문자열은 system 함수 인자 뒤쪽에 넣도록 했다. srtcpy가 null 문자로 인해 끝나는 것을 방지하기 위함이다.
잘못된 값을 넣어 core 파일을 생성하였다. /bin/sh 문자열이 들어가는 스택 주소를 알아내기 위함이다.

/bin/sh 문자열은 0xbffffc3c에서 시작한다.

A는 스택을 채우기 위한 쓰레기 값, B는 ebp backup(쓰레기 값), 다음 주소는 return address로 system 함수 주소, C는 system 함수에서 이용할 return address, 다음 주소는 /bin/sh 문자열 주소, 마지막으로 /bin/sh 문자열을 넣었다.

bugbear의 비밀번호는 new divide 이다.
tags: writeup, pwnable, buffer overflow, stack overflow, memory corruption, elf file, linux, return to library, c lang, x86asm