1. 문제
gets 함수를 통해 입력을 받는데, 입력값 검증을 하지 않아 버퍼 크기보다 더 많이 받을 수 있고, 따라서 bof가 발생한다.
아마 이번에도 aslr이 적용되서 주소들이 계속 바껴 nop을 줘서 풀면 될 것 같다.
2. 문제 해결 과정
그럼 버퍼와 ret 간의 offset과 버퍼의 시작 주소를 구해보도록 하자.
이때의 esp는 ret를 가르킨다.
gets 함수 호출 전에 eax를 push 하므로, eax에 buf의 시작주소가 들어있을 것이다.
버퍼와 ret 간의 offset은 268이다.
버퍼의 시작 주소 + 0x500 = 0xbffff0d0
payload는 11번과 유사하다.
ret 전까지를 dummy 값으로 채우고
뒤에 쉘코드를 넣고 쉘 코드 앞에 0x1000 만큼 nop을 준다.
그리고 ret에 buf+0x500에 해당하는 주소를 넣는다.
"A"*268 + (0xbffff0d0) + "\x90"*0x1000 + shellcode(41 byte)
3. Exploit
'Wargame > Hackerschool FTZ' 카테고리의 다른 글
[FTZ] 해커스쿨 FTZ level 14 (0) | 2021.04.12 |
---|---|
[FTZ] 해커스쿨 FTZ level 13 (0) | 2021.04.12 |
[FTZ] 해커스쿨 FTZ level 11 (0) | 2021.04.12 |
[FTZ] 해커스쿨 FTZ level 10 (0) | 2021.03.26 |
[FTZ] 해커스쿨 FTZ level 9 (0) | 2021.03.26 |