
64비트 리눅스 환경에서 GDB 및 BOF 취약점을 이용하여 Welcome! 메시지가 화면에 출력되도록 하는 과정을 보이는 포스트를 작성하시오.
올바른 패스워드를 입력하여 나오는 Welcome! 메시지는 인정하지 않는다.
32비트 환경이나 바이너리도 인정하지 않는다.
[hw.c]
#include <stdio.h>
#include <string.h>
void ShowWelcomeMessage (void)
{
puts ("Welcome!");
}
int CheckPassword (void)
{
char aBuffer [32];
printf ("Password: ");
scanf ("%s", aBuffer);
return strcmp (aBuffer, "tltmxpaqhdkstlftmq");
}
int main (int argc, char * argv [])
{
CheckPassword () ? puts ("Access Denied.") : ShowWelcomeMessage ();
return 0;
}

먼저 디버깅을 하기 전 gcc를 통해 컴파일을 진행하였고 hw.c는 교수님이 올려주신 파일을 이용하였다.
gcc -g -o [이름][컴파일을 할 파일]


gdb접속 후 disass 명령어를 이용하여 main과 CheckPassword를 확인해보았다.
이 코드에서 CheckPassword 함수가 먼저 실행하고 36번째 라인의 __isoc99_scanf@plt 함수 사용으로 취약점이 존재한다고 생각했다.

따라서 break 명령어로 break point를 잡았다.

그 후 x/8gx $rsp를 통해 버퍼의 상태를 확인하려고 했는데 사진과 같이 오류로 인해 볼 수 없었다.
찾아보니 내가 쓰고 있는 맥북의 아키텍쳐가 arm이라 gdb 사용법이 조금 다른 것 같았다. arm와 amd가 사용하고있는 빅엔디안(?) 방식이 다르다고 한다.
일단은 현재 사용할 수 있는 환경이 Mac 뿐이라 여기서 멈췄지만 다른 방법을 더 찾아봐야겠다.