문제에 접속해보겠습니다.


소스 코드를 읽어보면 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

+ Recent posts