-
CuscoWargame/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