본문 바로가기

High Level Technique/System Hacking

Bypass Canary

Bypass Canary




개념


BOF가 발생할 수 있는 환경이지만 buffer를 모두 채운 뒤에 다음 4바이트가 Canary로 채워져 있어 해당 값이 변경이 될 때 에러를 출력하면서 프로그램이 종료되는데, 이 Canary를 유추해서 우회를 하는 방법을 말한다.



설명



1. Brute Force


buffer를 모두 채운 후 다음 4바이트가 Canary로 채워져 있는데 1바이트를 넘어가도록 buffer를 채운다.

그러면 Canary 영역에 1바이트가 침범하여 값이 다를 경우 에러를 출력하는데 이때 이 1바이트를 0x00 ~ 0xFF(256)까지 모두 넣어서 뜨지 않는 경우를 찾아낸다.


이렇게 4바이트를 모두 찾아낸다.





2. recv, strncpy


recv와 strncpy 함수는 문자열을 입력받을 시 NULL이 들어가지 않는다.


이를 이용하여 buffer내에 printf() 기능을 넣고 buffer를 채워준다면 printf()는 NULL이 있는 곳 까지 찍어낼 수 있으므로 canary값 까지 출력한다.




3. Canary 루틴 노출


Canary를 만드는 루틴이 노출될 경우 역연산을 통해서 canary를 알아낼 수 있다.