ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Cusco
    Wargame/Microcorruption 2014. 7. 31. 10:37

    login 함수를 살펴보면, 마찬가지로 getsn함수로 값을 입력받는데 버퍼보다 큰 값을 입력받는다. ( 0x30 )

    Hanoi와 같은 buffer overflow 문제라는 것을 알 수 있다.

    4500 <login>
    ...
    4514:  3e40 3000      mov	#0x30, r14
    4518:  0f41           mov	sp, r15
    451a:  b012 9645      call	#0x4596 <getsn>


    이해를 위해 우선 0x30 ( 48 ) 만큼 A를 입력해보자.

    이후 login 함수의 제일 마지막 부분인 ret 부분에 break point를 걸고 실행해보자.

    그럼 위와 같이 sp가 사용자가 입력한 값인 4141부분을 가르치고 있는것을 알 수 있다.


    이후 ret를 실행하면 당연히 이 값이 pc (eip) 부분에 들어가게 되고,

    이는 올바른 주소가 아니므로, insn address unaligned 라는 에러와 함께 더이상 실행되지 않는다.

    이것이 바로 RET를 덮어 프로그램의 실행순서를 바꾸는 buffer overflow 공격기법이다.


    그렇다면 답은 나왔다. 바로 unlock_door 함수의 시작주소인 4446 로 프로그램 실행순서를 바꾸면 된다.

    4446 <unlock_door>
    4446:  3012 7f00      push	#0x7f
    444a:  b012 4245      call	#0x4542 <INT>
    444e:  2153           incd	sp
    4450:  3041           ret

    RET는 16 Byte 바로 뒤에 있으므로, 키는 16 Byte의 아무런 데이터 + 4644가 된다.

    'Wargame > Microcorruption' 카테고리의 다른 글

    Johannesburg  (0) 2014.07.31
    Reykjavik  (0) 2014.07.31
    Hanoi  (0) 2014.07.30
    Sydney  (0) 2014.07.30
    New Orleans  (0) 2014.07.30
Designed by Tistory.