level 13
2020. 9. 1. 15:51
이번에는 검증값이 있는 문제군요.
i에 들어있는 0x1234567이 바뀌면 BOF 공격을 감지하는 프로그램입니다.
이를 우회하는 문제인거 같네요.
처음에 0x418 == 1048 바이트의 공간을 할당하고, i변수는 $ebp-0xc에서 가져오네요. long이 4바이트의 크기를 가지고 있는 것을 감안하면 나머지 8바이트는 dummy 겠죠? 이를 idummy라고 칭하겠습니다.
또한 1048-12 == 1036인데, buf변수는 1024바이트였습니다.
따라서, 나머지 12바이트는 dummy라는 것을 알 수 있고 이를 bufdummy라고 칭하겠습니다.
buf(1024) + bufdummy(12) + 0x1234567(4) + idummy(8) + SFP(4) + RET(4)
이제 argv[1]이 위치하는 곳이 어딘지 확인해야겠군요.
한참에서야 찾았습니다 ㅋㅋ
이제 0xbffff83a라는 주소를 가지고 BOF를 터트려보겠습니다.
NOP*1011 + ShellCode*25 + bufdummy(12) + RET(4)
성공적으로 쉘을 획득했습니다.