how to bypass canary by leaking with OOB
우리는 canary를 만나면 단순히 RA overwrite만 막힌다고 생각하지만 canary는 아예 스택을 이용한 공격을 막는다고 봐도 무방하다. ( ex. stack leak , FPO ) 상위 스택을 건드리면 exit함수로 나가기 때문이다.
그렇다면 어떻게 canary를 bypass 할 수 있을까? 이번에는 leak을 이용한 bypass 중에 스택에서 OOB를 이용하는 방법에 대해 알아 보겠다.
스택에는 지역변수들이 존재한다. 따라서 일반적인 문자열 버퍼또한 스택에 존재하며, canary 또한 스택에 존재한다. 따라서 스택안에서 OOB 취약점이 존재한다면 canary값을 읽어 올 수 있다.
예를 들어
C
printf("Element of index %d is : %02x\n", idx, box[idx]);다음과 같은 코드에서 idx를 내가 입력할 수 있다면, 스택내에 box 위치와 canary 위치를 계산해서 알 수 있다.