이전 level11과 다른점을 보면 gets함수를 사용하는 것을 확인할 수 있습니다. gets 함수는 문자열 길이를 검사하지 않기 때문에 버퍼 오버플로우에 취약한 함수입니다. attackme 파일을 tmp/attackme 에 복사했습니다. gdb도구를 통해 분석해보면 다음과 같습니다. level11에서와 같이 스택영역에 0x108, 10진수로 264byte 공간을 할당하고 있습니다. 264byte의 공간을 할당했지만, 소스에서는 256byte의 크기를 줬기 때문에 8byte 크기의 dummy값도 있다는 것을 알 수 있겠네요. level12에서는 RET에 Shell 코드 시작 주소를 넣어 프로그램이 비정상종료되면 쉘코드를 실행시키는 방법을 RTL 기법을 사용할 것입니다. 하지만 rtl 기법을 막기위하여 ASLR 우회기법이 적용됩니다.
RTL : 환경변수에 쉘코드 담아 실행하는 것을 말합니다. ASLR : 스택 주소를 랜덤으로 생성하여 str주소 값이 계속 변경되는 것을 말합니다.
환경...
#
ASLR
#
FTZ
#
level12
#
RTL
#
shellcode
#
shellcode주소
#
버퍼오버플로우