2024. 8. 8. 18:53ㆍPwnable

문제를 보니 주어진 실행파일로 취약점을 찾아서
버퍼 오버플로우 공격을 하면 되는듯 하다
바로 ㄱㄱ ~!

리눅스로 baby_bof 실행 파일을
실행해 보았더니
아무거나 입력해보니
Thanks! Goodbye를 출력한다

파일의 메인을 디스어셈블 해봤다
코드를 보니 기본적으로 main 함수가 vuln 함수를 호출하고
특정 문자열을 출력한 후에 0을 반환하는 것을 확인
버퍼 오버플로우 공격을 통해 print_flag 함수를 호출하려면
vuln 함수가 스택 버퍼를 오버플로우 할 수있는지 확인하고
해당 함수가 return 지점을
print_flag 함수의 주소로 덮어써보자!

vuln 함수의 코드를 확인해 보니
스택에 64바이트(0x40)의 버퍼를 할당하고 있다
이걸로 입력 버퍼와 저장된 리턴 주소 사이의 오프셋을 계산할 수있다
gets 함수는 입력 받을 때
버퍼의 크기를 확인하지 않으므로
버퍼를 초과하는 입력값을 받으면 저장된 리턴 주소를
덮어쓸 수 있다
저장된 리턴 주소까지의 오프셋: 64바이트(버퍼) + 8바이트 (저장된 rbp) = 72바이트

print_flag 함수의 주소는 0x401176 확인
파이썬 코드로 페이로드를 짜보자

vuln 함수가 print_flag 함수를 호출하도록
리턴 주소를 덮어쓰는 버퍼 오버플로우 공격을 시도할 수 있다

파이썬으로 만든 페이로드를 실행하여
payload.txt 파일 생성 후

실행 후

flag{19dinosaurman}
flag 값 확인