문제에 접속해보겠습니다.
소스 코드를 읽어보면 rand 함수를 random이라는 변수에 초기화 시켜줍니다.
사용자에게 입력을 받고 그 값을 random과 XOR 했을때 0xdeadbeef가 되면 flag파일을 읽도록 합니다.
key ^ random = 0xdeadbeef 인데 식을 바꾸면
key = random ^ 0xdeadbeef 로 key를 알아낼 수 있습니다. rand()함수에 seed값을 주지 않으면 항상 같은 값이 나옵니다.(랜덤이라고 할 수 없겠죠.)
gdb로 random에 들어간 값을 찾아보겠습니다.
브레이크 포인트를 main+43에 걸고 파일을 실행하여 rbp-0x4에 들어있는 값을 보면 0x6b8b4567 입니다.
이 값과 0xdeadbeef를 XOR 연산하여 key 값으로 입력하면 flag파일을 열 수 있습니다.
0x6b8b4567 ^ 0xdeadbeef = 0xb526fb88 이군요 이를 10진수로 변환하면
=> 3039230856 입니다.
(추가)다른 풀이가 존재하여 적습니다.
ltrace 라는 툴을 이용해 rand값을 찾을 수 있습니다.
rand 함수의 라이브러리를 호출합니다. 뒤의 0x6b8b4567이라는 random 값이 있습니다.
'Wargame > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] mistake 1p (0) | 2016.08.19 |
---|---|
[pwnable.kr] uaf 8p (0) | 2016.08.15 |
[pwnable.kr] passcode 10p (0) | 2016.07.29 |
[pwnable.kr 2번] collision 3pt (0) | 2016.07.27 |
[pwanble.kr 1번] fd 1pt (0) | 2016.07.27 |