ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [b01lers ] gambler-overflow
    CTF/pwn 2022. 5. 8. 23:14

    main 함수
    setup 함수 중

    gambler-baby와 마찬가지로 main함수에서는 casino 함수를 실행시킨다.

    baby와 다른 점은 srand로 seed를 바꿔준다는 점이다.

     

    실행시킬 때마다 랜덤으로 생성된 단어가 달라지는 것을 확인할 수 있다.

     

    casino 함수

    이름부터 예상할 수 있듯이 이번 문제는 Buffer Overflow(bof)를 이용해야한다.

    18번째 줄을 보면 입력값 개수에 제한을 두지 않는 gets 함수를 통해 입력받는 것을 확인할 수 있다.

     

    보호기법

    Return Oriented Programming(ROP)를 이용하기에는 canary가 걸려있다.

     

    그럼 어떡해야할까?

     

    다시 함수를 잘 봐보자.

    랜덤으로 생성된 글자는 배열 s에 담겨있고, 우리가 입력할 곳은 배열 s2이다.

    s의 위치는 rbp-0x10, s2의 위치는 rbp-0x18로 s2를 통해 s의 영역을 침범할 수 있다.

     

    payload

    페이로드이다. 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

    댓글

Hi