먼저 파일을 실행해 보았다.
문자를 입력받으면 그 문자를 출력하는 형태인것 같다.
보호기법이 뭐가 있는지 확인해 보았다.
NX가 걸려있다. 쉘코드를 사용하지 못한다.
IDA를 이용해서 뜯어보자
s를 입력받고 v5에는 s의 길이가 들어가고 printf를 통해 s를 출력한다.
s를 입력받을때 그 길이가 제한되어 있지 않으므로 여기서 오버플로우가 발생할 수 있다.
s의 크기는 0x110=272바이트이다.
예전에 이런 문제를 풀었는데 이때 함수를 이용하여 문제를 풀었다.
따라서 함수가 뭐가 있는지 확인한다.
callMeMaybe라는 함수가 있다.
이 함수의 주소는 0x400606이다.
자세히 살펴보자
이 함수는 쉘을 실행시키는 함수이다.
따라서 이 함수의 주소를 ret에 넣어준다면 풀릴 것이다.
s의 크기는 272바이트이고 sfp크기는 8바이트이다.
payload는 dummy값을 280바이트로 채운다음 그다음에 함수의 주소를 넣어주면 된다.