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"

+ Recent posts