전체 글
-
-
[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를..
-
[b01lers ] gambler-baby1CTF/pwn 2022. 5. 8. 22:54
main 함수이다. casino 함수를 실행시키고 끝나는 간단한 코드이다 casino 함수이다. 랜덤한 알파벳을 4개 생성하여 추측하고 일정 이상의 돈을 지니면 flag를 출력하는 프로그램이다. bof도 불가능 하고, pie가 걸려있어 주소 leak도 되지 않아 언뜻 보면 어떻게 맞출지 막막하겠지만 이 코드에는 치명적인 오류가 있다. 그건 seed 값을 초기화 시키지 않아 프로그램을 몇 번을 실행시켜도 같은 순서로 랜던값이 생성된다. 이를 이용해 10번의 기회를 이용해 10개의 단어를 알아내고 프로그램을 종료시킨다. 다음 실행 때는 10번 + 10번으로 이후의 10개의 단어를 알아내고 또 다음 실행 때는 20번 + 10번으로 이케저케 반복 작업을 통해 단어를 알아낸다. 위의 내용을 바탕으로 한 페이로드이다.