-
[b01lers ] gambler-overflowCTF/pwn 2022. 5. 8. 23:14
gambler-baby와 마찬가지로 main함수에서는 casino 함수를 실행시킨다.
baby와 다른 점은 srand로 seed를 바꿔준다는 점이다.
실행시킬 때마다 랜덤으로 생성된 단어가 달라지는 것을 확인할 수 있다.
이름부터 예상할 수 있듯이 이번 문제는 Buffer Overflow(bof)를 이용해야한다.
18번째 줄을 보면 입력값 개수에 제한을 두지 않는 gets 함수를 통해 입력받는 것을 확인할 수 있다.
Return Oriented Programming(ROP)를 이용하기에는 canary가 걸려있다.
그럼 어떡해야할까?
다시 함수를 잘 봐보자.
랜덤으로 생성된 글자는 배열 s에 담겨있고, 우리가 입력할 곳은 배열 s2이다.
s의 위치는 rbp-0x10, s2의 위치는 rbp-0x18로 s2를 통해 s의 영역을 침범할 수 있다.
페이로드이다. a 4글자를 입력해 준 뒤 NULL을 넣어준다.
NULL을 넣는 이유는 strcmp 함수는 NULL을 만나기 전까지 비교해주기 때문이다.
그 뒤 정답이 담겨있는 배열까지 접근하기 위해 3 byte의 더미값을 넣어준다
그 뒤 다시 a 4글자를 넣어주어 원래는 정답이 담겨있어야 할 곳에 우리가 원하는 임의의 값으로 조작해줄 수 있다.
이를 90번 반복하여 돈을 많이 따주면 된다.
'CTF > pwn' 카테고리의 다른 글
[bcactf] Format Fortune (0) 2022.06.08 [bcactf] Got libc? (0) 2022.06.08 [bcactf] Jump Rope (0) 2022.06.08 [bcactf] BOF Shop (0) 2022.06.08 [b01lers ] gambler-baby1 (0) 2022.05.08