Level17
level17의 계정으로 접속한 후, hint를 확인해보면 다음과 같습니다.
이전의 문제와 다른 점은, 앞의 문제에서는 프로그램 안에 shell을 실행시키는 함수가 존재했지만, 이 프로그램에서는 존재하지 않습니다. 공격 방향을 잡기 위해 먼저 gdb로 분석을 하였습니다.
메모리 공간으로 총 56byte를 할당 받습니다. ebp-16에 printit의 시작주소를 넣고, call 함수를 통해서 printit을 실행시킵니다.
저는 call 함수가 system()함수를 실행시키기도록하고, system()함수가 "/bin/sh"를 실행시키도록 하겠습니다. call()이 위치한 곳에 system()함수의 주소를 대입하고, call함수가 끝나고 위치하는 곳이 ebp+4인 점을 이용하여 배열의 시작부분에 /bin/sh의 주소를 대입하였습니다. system()의 주소나 /bin/sh의 주소를 구하는 방법은 level11에서 다루었었기 때문에 생략합니다.
No comments:
Post a Comment