Level18
level18의 계정으로 접속한 후, hint를 확인합니다.
코드를 살펴보면, string 배열에 100개 이상의 문자가 들어가게 되면 what are you trying to do? 라는 문자열이 출력되고 check 변수에 0xdeadbeef가 들어가면 shellout()을 실행시켜 level19권한의 shell이 실행됩니다. 코드 분석이 맞는지 확인하기 위해 A를 100개 넣어봤습니다.
예상했듯이, what are you trying to do? 라는 문자열이 출력됨을 확인할 수 있습니다. 이제 변수들간의 위치 관계를 파악하기 위해 다음과 같은 코드를 사용하였습니다.
위 코드를 컴파일한 후, 실행한 결과는 다음과 같습니다.
위 결과를 바탕으로 스택을 도식화해보면 다음과 같습니다.
스택구조에서 알 수 있듯이, count변수가 string변수보다 낮은 주소에 위치하기 때문에, BOF를 이용한 방법으로는 조작하기가 쉽지 않습니다. level19 권한의 shell은 check변수에 0xdeadbeef만 들어가면 되기 때문에, 포인터를 조작하여 check변수의 값을 바꾸는 방향으로 진행하였습니다.
check변수는 string[-4]와 동일하므로, count를 4만큼 낮추기 위해 "\x08"을 4번 넣어주어 포인터를 이동시킨 후, 0xdeadbeef를 넣어주었습니다.
shellout()이 실행되어 level19의 shell이 실행되었고, my-pass를 이용해 level19의 Password를 획득할 수 있습니다.
No comments:
Post a Comment