ID : level17

password : king poetic

 

1) 코드를 먼저 살펴보자!

 

16번과 비슷하다, 

11 번에서 했던 환경변수를 이용하여 오버플로를 발생시키면 풀수있는 문제로 보인다.

 

2) 역시나, 그냥 실행하면

Hello there! 라는 문장만 뜰뿐,

18권한을 획득하지만, 프로그램이 종료되며, 권한을 다시 뺏기게 된다,

 

3) 어셈블리 코드를 확인해보면,

16번 문제와 굉장히 비슷하다, 

buf 부터 sfp 까지의 거리는 56 바이트이고, 

ebp-16 지점부터, 주소값을 받아, 해당 주소를 실행한다.

저 주소값은 역시나 printit 함수의 시작점 일것이다.

 

 

4) 예상대로 시작주소가 맞다.

 

buf 부터 sfp 까지의 거리가 56 바이트 이므로,

56 부터 60까지 의 4바이트는 ret 의 값이다.

 

환경변수에서 쉘을 불러내도록 해보자!

 

5) 너무 쉬울리가 없다...

세그멘테이션 오류가 발생한다.

이 방법은 아닌거같고..

고민을 해보자

 

6) 멍청한..

ebp-16 지점부터 주소를 받아, 해당 주소를 실행한다;;;

저 주소에다가 환경변수의 주소를 넣어주면 되었다...

 

아무튼 18레벨의 비밀번호는

 

"why did you do it"

+ Recent posts