기본적인 방어기법이 모두 enable된 것을 확인할 수 있고, 64bit 바이너리이다. 해당 바이너리도 취약점은 어렵지 않게 찾을 수 있다. marimo 구조체의 heap 영역 주소를 저장하는 buffer의 길이는 BuyMarimo 함수에서 27번째 줄에 따라 15인 것을 확인할 수 있다. 하지만 여기서 단순히 15만 확인하고 있다는 것도 중요한 취약 포인트이다. show_marimo 함수에서 10번째 줄에 새로 할당한 marimo를 List에 넣고 Offset을 1 증가시키는데 Buy랑 달리 Offset을 체크하는 루틴이 전혀 존재하지 않는다. 따라서 Out-of-bound 취약점이 발생하고, 데이터 영역에서 이 취약점을 통해 Memory corruption이 가능하다. 공격 방법Out-of-bound..
checksec을 통해 확인해보면 Stack Canary가 풀려있는 것을 확인할 수 있고, 64bit 바이너리이다. 그 외의 값은 default 값이므로 중요하지 않다. 취약점은 매우 간단하다. 처음 입력 받는 함수에서 바로 stack buffer overflow 취약점이 존재한다. 따라서 여기서 Return Address를 덮는 것으로, 64bit ROP만 하면 끝난다. exploit 코드123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263#!/usr/bin/pythonfrom pwn import * def main(): elf = ELF("./B..