Level15
level15의 계정으로 접속하여 hint를 확인해보면 다음과 같습니다.
이전 레벨까지의 bof문제와 조금 다른점은, 변수로 선언된 check 가 포인터 변수로 선언되어 있다는 점입니다.
포인터 변수는 해당 메모리의 주소값을 가지는 변수입니다. 즉, check 라는 변수 안에는 메모리의 주소로 인식되
어 집니다. 코드를 보면, check 포인터 변수가 가리키는 메모리 주소에 0xdeadbeef를 넣어주면 level16의
shell이 실행되어지도록 되어 있습니다.
3가지 변수의 관계를 알아보기 위해 코드 한줄을 추가해 실행시켜 보았습니다.
추가로 스택구조를 알아보기 위해서 gdb로 분석을 해보았습니다.
메모리 공간의 크기는 0x38( 56byte )임을 알 수 있습니다. 또한, [ebp-16]의 값을 eax에 넣고, 넣은 값을 0xdeadbeef와 비교함을 알 수 있습니다.
위 내용을 토대로 스택의 구조를 도식화해보면 다음과 같습니다.
앞에서 eax에 넣어진 값과 0xdeadbeef를 비교하므로, 프로그램에 0xdeadbeef가 들어있는 위치를 찾아보았습니다.
0x080484b2에 0xdeadbeef가 들어가있음을 확인할 수 있습니다. 40byte만큼 임의의 문자를 넣어주고
0x080484b2를 넣어주면, check 포인터 변수에 0xdeadbeef가 들어갈 것입니다.
Level16의 Password인 about to cause mase를 획득할 수 있습니다.
3가지 변수의 관계를 알아보기 위해 코드 한줄을 추가해 실행시켜 보았습니다.
추가로 스택구조를 알아보기 위해서 gdb로 분석을 해보았습니다.
메모리 공간의 크기는 0x38( 56byte )임을 알 수 있습니다. 또한, [ebp-16]의 값을 eax에 넣고, 넣은 값을 0xdeadbeef와 비교함을 알 수 있습니다.
위 내용을 토대로 스택의 구조를 도식화해보면 다음과 같습니다.
앞에서 eax에 넣어진 값과 0xdeadbeef를 비교하므로, 프로그램에 0xdeadbeef가 들어있는 위치를 찾아보았습니다.
0x080484b2에 0xdeadbeef가 들어가있음을 확인할 수 있습니다. 40byte만큼 임의의 문자를 넣어주고
0x080484b2를 넣어주면, check 포인터 변수에 0xdeadbeef가 들어갈 것입니다.
Level16의 Password인 about to cause mase를 획득할 수 있습니다.
No comments:
Post a Comment