워게임(wargame)/Protostar
[Protostar] stack1
보안&인공지능
2021. 1. 4. 15:47
gdb를 사용하여 디스어셈블리를 진행한 결과 위와 같이 나온다.
해당 문제는 argument를 사용하여 값을 입력 받는다. ex) ./stack1 AAAA
그러므로 argument의 주소를 확인해보면 main+71에서 eax와 ABCD를 검증하는 것을 확인할 수 있는데, 이때, eax는 esp+0x5c이 되므로 esp+0x5c의 값을 abcd로 바꾸어야 한다.
참고로 현재 esp+0x5c에는 <main+35>를 통해 0이 들어있는 것을 확인할 수 있다.
해당 함수를 보면 argv[1]의 주소인 esp+0xc를 strcpy에 저장될 변수인 0x1c에 주소를 저장하게 된다.
그러므로, 0x5c-0x1c = 0x40이 되며, 64byte만큼 버퍼를 채운 후, 뒤를 abcd로 채우면 된다.
buffer (64byte) |
0x61626364로 바꾸어야 하는 변수 (4byte) |
ebp |
이때, 리틀 엔디안 방식이므로 'A'*64+'dcba'가 되어야 abcd로 읽게 된다.
반응형