FTZ-level9
드디어 등장했습니다 BoF(버퍼오버플로우) 거의 시스템 해킹에서 가장 유명한 기법이라고 불리는 해킹 기법입니다. 왜 등장을 안하지 했는데 level9에서 등장을 하네요.
하지만 이번 문제는 굉장히 쉬운 BOF였던 것 같습니다. BOF의 개념만 알고 있으면 풀 수 있을 것입니다. 저도 hackschool의 BOF 왕기초편을 예전에 보고 변수가 스택에 어떻게 어떤 순서로 저장되는지를 배웠습니다.
저 두번째 그림을 잠깐 설명하자면 bof[10]은 에서 12byte의 범위를 벗어나면 가운데 쓰레기 값이들어있는 약간의 byte, bof2[10]까지 뒤집어 쓸수 있게 됩니다. 예전에는 변수 사이에 쓰레기 값이 없었는데 gcc 2.06버젼부터 생겼다고 합니다.
그리고 하나 중요한 것은 char bof[10]이면 10byte인데 왜 12byte의 범위를 벗어나야하냐??
이는 예전에 궁금해서 여러 자료를 찾아봤는데 답은 메모리가 1word 단위로 저장되기 때문입니다. 즉 4byte단위로 저장되기 때문입니다.
여기까지 알면 BOF를 이용하여 답을 찾을 수가 있습니다. 하지만 변수사이의 쓰레기값이 몇byte인지는 gdb를 이용하여 찾을 수가 있지만 여기서는 그럴 수 없기 때문에 일일이 하나씩 너보는 수 밖에 없습니다.
따라서
[level9@ftz level9]$ /usr/bin/bof
It can be overflow : 012345678901go
[level9@ftz level9]$ /usr/bin/bof
It can be overflow : 0123456789012go
[level9@ftz level9]$ /usr/bin/bof
It can be overflow : 01234567890123go
[level9@ftz level9]$ /usr/bin/bof
It can be overflow : 012345678901234go
[level9@ftz level9]$ /usr/bin/bof
It can be overflow : 0123456789012345go
Good Skill!
[level10@ftz level9]$ my-pass
쓰레기 값은 3byte였네요~~~
0 개의 댓글