level17은 지금까지 푼 BOF문제(level11~)중에 가장 빠르고 쉽게 풀었던 것 같다.
코드를 분석하자면 *call이 printit함수의 주소를 가리키고, fgets에서 입력을 받은뒤 call을 실행하는 구조이다.
main을 disassemble해보니 이번에도 역시 ebp-16이 보이는걸 알 수 있다.
이번에도 역시 40자리를 A로 채우고 그 뒤의 ret을 오버플로우 하면 되는 것으로 보인다.
이번엔 코드 내부에 /bin/sh를 실행하는 코드가 없으므로 쉘코드를 환경변수로 만들었다.
그리고 이 환경변수의 주소를 알아보기 위해 간단한 코드를 짰다.
gcc로 컴파일 한 후 실행해 보니
이 환경변수의 주소가 0xbffffc2e인것을 알 수 있었다.
따라서 40자를 채운 후 이 환경변수로 ret을 바꾸면 쉘을 얻을 수 있다.