문제의 c 코드입니다.
win() 함수에 셸 코드가 들어있습니다.
checksec으로 보호 기법을 확인할 수 있습니다.
메인 함수를 디어셈블하면
버퍼의 주소로부터 $rbp사이의 거리가 0x70임을 알 수 있습니다.
gdb를 통해 win 함수의 주소를 확인할 수 있습니다.
(여러 번 시도해도 같은 걸 보니 ASLR이 적용되지 않은 듯 합니다)
위 정보를 바탕으로 페이로드를 작성해줍니다.
실행하면 EOF가 터집니다.
EOF가 발생하는 이유는 stack alignment가 깨져서 그렇다고 합니다
(아래 링크 참조)
https://hackyboiz.github.io/2020/12/06/fabu1ous/x64-stack-alignment/
win 함수를 디스어셈블 해보면
0x40124b에서 /bin/sh 문자열을 인자로 가져오고
0x401250에서 system함수를 콜 합니다.
그래서 0x40124b에서 시작하게 되면 system("/bin/sh")를 실행할 수 있습니다.
주소를 바꿔주고 실행하면
플래그가 나옵니다!
추가로 가젯을 이용한 풀이도 가능하다고 합니다.
'write-up(pwn) > G04T' 카테고리의 다른 글
[G04T] Simple BOF 3 (0) | 2022.09.08 |
---|---|
[G04T] Simple FSB 3 (0) | 2022.09.08 |
[G04T] Simple FSB 1 (0) | 2022.09.07 |
[G04T] Simple FSB 2 (0) | 2022.09.06 |
[G04T] Simple BOF 2 (0) | 2022.09.05 |