ipwn

[pwnable.kr] random 본문

Write up/Pwnable.kr

[pwnable.kr] random

ipwn 2018. 1. 1. 23:12

이번 문제는 random문제이다. 글은 딱히 읽어볼 필요 없는 것 같다.


서버에 접속해보자.



코드를 보니 rand함수로 random변수에 값을 넣어주고 그 값과 우리가 입력해준 key값을 xor한 값이 0xdeadbeef와 


같을 경우에 flag를 읽어와준다. 그리고 같지 않을 경우에 2의 32제곱의 케이스만큼 시도해야할 것이라고 우리에게 말한다.


하지만 이 코드에는 결함이 있다. 바로 srand함수가 없다는 것인데, 이 srand함수로 seed 값을 정해줄 수 있다.


이 seed값에 따라 rand 함수를 실행해서 나온 값이 달라진다. 그래서 이 srand함수로 seed값을 time으로 넣어준다면 


시간이 경과할 때 마다 seed값이 달라지므로 실행할 경우 계속해서 결과값이 달라진다. 즉 srand 함수가 없다면 rand 함수를 


실행시켜도 처음 실행 이후에는 여러번 프로그램을 실행 종료를 반복해도 결국 같은 값이 들어간다는 것이다.


그러므로 이 프로그램에서 random변수에 들어간 값만 알아내면 간단히 클리어 할 수 있는 문제이다.



첫 번째 밑줄 친 부분을 보면 rand의 return값이 rbp-0x4에 들어가는 것을 확인할 수 있고, 두 번째 밑줄 친 부분을 보면


rbp-0x8 부분에 0을 대입하는 것을 보아 key값이라는 것을 유추해 낼 수 있다. 즉 main+21 부분에 break point를 걸어주고 


rbp-0x4의 값을 확인, 그 값과 0xdeadbeef를 xor한 값이 key값에 넣어줄 값이 되겠다.



random의 값은 0x6b8b4567이라는 것을 알아냈다.


이제 0x6b8b4567과 0xdeadbeef을 xor한 값을 구하면 된다.



xor한 값은 3039230856이다. 정말 flag가 읽어와지는지 한 번 확인해보자.



성공적으로 flag를 구했다.


'Write up > Pwnable.kr' 카테고리의 다른 글

[pwnable.kr] lotto  (0) 2018.01.03
[pwnable.kr] blackjack  (0) 2018.01.03
[pwnable.kr] passcode  (0) 2018.01.01
[pwnable.kr] flag  (0) 2017.12.31
[pwnable.kr] bof  (0) 2017.12.31
Comments