![article thumbnail image](https://blog.kakaocdn.net/dn/XkmIz/btq2krbRF1Z/MMRQ3CVwmWXx5uRL6vtgi0/img.png)
1. 문제
strcpy() 에서 입력값 검증을 하지 않아 buf 크기보다 더 입력을 받을 수 있어 bof 가 발생한다.
다만, buf 근처에 있는 i 변수를 통해 i 값이 변조되었을 경우 bof가 발생했음을 알리고 프로그램을 종료한다.
이때 어떻게 하면 쉘을 얻을 수 있을까?
앞에 11, 12번 문제와 유사한데 거기서 더해서 i 값만 유지해주면 bof를 일으켜도 괜찮을 것 같다.
2. 문제 해결 과정
이제 그럼 필요한 것들을 구해보도록 하자.
1. ret와 buf 사이의 offset
이때 esp는 ret를 가르키고 있다.
strcpy 하기 전에 eax를 push 하기에 eax에 buf의 시작 주소가 들어있을 것이다.
ret와 buf의 offset은 1052이다.
2. 변수 i 의 위치
i : ebp-12
buf : ebp - 1048
-> 버퍼와 1036 만큼 떨어져있다.
3. buf + 0x500의 주소
payload는 다음과 같을 것이다.
"A"*1036 + 0x1234567 + "B"*12 + (0xbffff5c0) + "\x90"*0x1000 + shellcode(41 byte)
3. 익스플로잇
'Wargame > Hackerschool FTZ' 카테고리의 다른 글
[FTZ] 해커스쿨 FTZ level 15 (0) | 2021.04.12 |
---|---|
[FTZ] 해커스쿨 FTZ level 14 (0) | 2021.04.12 |
[FTZ] 해커스쿨 FTZ level 12 (0) | 2021.04.12 |
[FTZ] 해커스쿨 FTZ level 11 (0) | 2021.04.12 |
[FTZ] 해커스쿨 FTZ level 10 (0) | 2021.03.26 |