-
FTZ 13번 Write-up표튜터와 함께하는 Pwnable/FTZ Write-up (11~20) 2019. 2. 5. 04:47
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다.
이번문제 FTZ 13번의 코드이다.
strcpy로 인한 스택 오버플로우 취약점이 보인다.
하지만 이전 문제들과 다른점이 있다.
바로 i 라는 변수값이 0x01234567이 아니면 프로그램이 종료된다.
마치 Stack Canary 처럼 뭔가 버퍼의 값이 바뀌는 것을
코드를 통해 체크하여 종료시키는 느낌이다ㅎㅎ
그렇기 때문에 버퍼오버플로우를 이용하면서
i의 값은 0x01234567로 가져가면 될 것 같다.
4번째 줄에서 볼 수 있듯이 ebp-12에 0x01234567의 값이 채워짐을 알 수 있었고
저 주소가 변수 i라는 것을 알 수 있었다.
strcpy에 breakpoint를 걸고 버퍼의 크기보다 약간 적은 값 1000을 넣어보았다.
ret 주소가 0x42015574였고 그 위에 바로 0x01234567이 보였다.
위에서 확인된대로 0x01234567이 들어가 있다.
어셈코드에서처럼 0x01234567은 ebp-12(변수 i)의 값과 비교하고 있었기 때문에
버퍼오버플로우로 다른 값을 채워주면서
i 값은 그대로 유지하며 ret값을 변조하면 된다고 생각했다.
우선 버퍼의 시작주소와 0x01234567 까지의 차이가 1036개이고
0x01234567(i)에서 ret까지의 거리가 12임을 알았다.
마지막으로 eggshell을 이용해서 쉘코드 실행주소를 구했고
필요한 모든 것을 다 구했다.
1036개의 문자를 넣고 0x01234567 값을 그대로 넣어주어
비교문을 건너띈 뒤 다시 12개를 채워고 ret값을 변조하도록
진행하였더니 다음단계로 넘어갈 수 있었다!!
반응형'표튜터와 함께하는 Pwnable > FTZ Write-up (11~20)' 카테고리의 다른 글
FTZ 16번 Write-up (0) 2019.02.05 FTZ 15번 Write-up (0) 2019.02.05 FTZ 14번 Write-up (0) 2019.02.05 FTZ 12번 Write-up (0) 2019.02.05 FTZ 11번 Write-up (0) 2019.02.04 댓글