write-up(pwn)/G04T

[G04T] Simple BOF 1

ssongk 2022. 9. 5. 12:01

문제의 c 코드입니다.

win() 함수에 셸 코드가 들어있습니다.

checksec으로 보호 기법을 확인할 수 있습니다.

메인 함수를 디어셈블하면

버퍼의 주소로부터 $rbp사이의 거리가 0x70임을 알 수 있습니다.

gdb를 통해 win 함수의 주소를 확인할 수 있습니다.

(여러 번 시도해도 같은 걸 보니 ASLR이 적용되지 않은 듯 합니다)

위 정보를 바탕으로 페이로드를 작성해줍니다.

실행하면 EOF가 터집니다.

EOF가 발생하는 이유는 stack alignment가 깨져서 그렇다고 합니다

(아래 링크 참조)

https://hackyboiz.github.io/2020/12/06/fabu1ous/x64-stack-alignment/

 

hackyboiz

hack & life

hackyboiz.github.io

win 함수를 디스어셈블 해보면

0x40124b에서 /bin/sh 문자열을 인자로 가져오고

0x401250에서 system함수를 콜 합니다.

그래서 0x40124b에서 시작하게 되면 system("/bin/sh")를 실행할 수 있습니다.

주소를 바꿔주고 실행하면

플래그가 나옵니다!


추가로 가젯을 이용한 풀이도 가능하다고 합니다.