ID : level16
password : about to cause mass
1) 코드를 먼저 분석하도록 하자!
보아하니
재귀함수로 인하여
Hello there 만 출력될것같다.
실행하여 확인해보자
2) 예상한것과 같이, 재귀적으로 hello there 만 출력한다.
shell 함수로 넘어가게끔 공격하면 된다.
다행히 fgets 함수를 이용해보자!
3) 일단 메인 함수먼저 분석을 하도록 한다,
main+3 을 보니, 56 byte 만큼 할당한것을 볼수있다,
buf 사이즈는 20 이다.
또한, main+6 열에서, printit 함수를 호출하는것을 볼수있다.
확인해보자
4) printit 함수의 시작주소가 0x8048500 임을 확인할수 있다,
5) 그에 반해, shell 함수의 시작주소는
0x80484d0 임을 확인할수 있을것이다.
main 함수의 내용을 보면,
56 byte 를 할당받고,
ebp-16 지점부터, 주소값이 들어가면, 해당 주소값으로 이동하는것을 볼수있다.
문제에서 ebp-16 지점부터 printit 함수의 시작주소가 들어가 있으므로,
입력을 통해
BOF를 이용하여 ebp-16 지점부터는 0x80484d0 가 들어가게 설정하면,
shell 함수로 넘어갈 것이다.
buf 의 시작 지점부터 ebp 끝까지의 거리는 56 byte
주소값이 전달되는 지점은 ebp-16 이므로,
56 - 16 = 40,
40바이트를 아무 문자로 채우고, 41번째 자리부터 0x80484d0 를 넣어주면 shell 로 넘어간다.
6) 다음과 같이 입력하여 보자
7) level17의 비밀번호 획득
"king poetic"