언인텐으로 푼 듯한데.. 이유를 모르겠습니다.
풀이를 할 때,
payload = "%p "*15 payload += p32(getshell)
이런식으로 작성하고 실행하니 쉘을 획득할 수 있었습니다.
heap_buf의 크기는 0x80, stack_buf의 크기는 0x90이고
위의 페이로드에 작성한대로 실행하면
heap_buf에는 0xa0의 크기가 들어갑니다.
마찬가지로 stack_buf에도 0xa0의 크기가 들어가게되어 return 주소를 덮어 쓸 수 있는데 원인을 모르겠습니다...
#pwnable
작성자 정보
답변
1
fow
대표 업적 없음
안녕하세요!
heap_buf
에는 포맷 스트링 변환 과정을 거치기 이전 문자열이 들어가고, stack_buf
에는 sprintf()
에서 heap_buf
의 포맷 스트링을 변환한 결과가 복사되어 저장되기 때문에 overwrite가 일어나게 됩니다.
gdb를 이용해 sprintf()
실행 이후 heap_buf
와 stack_buf
에 각각 어떤 문자열이 저장되는지 확인해보시면 이해에 도움이 될 것 같습니다!