-
0x05.pwnable.kr - random0x.Wargame/pwnable.kr 2018. 7. 2. 16:09
Daddy, teach me how to use random value in programming!
ssh random@pwnable.kr -p 2222 (pw:guest)
이번 문제는 random 함수와 관련된 문제인 것 같다.
원격으로 서버에 접속하였더니 random.c가 존재하였다. 해당 소스코드를 확인해보았다.
소스코드를 보니 random이라는 변수가 rand()를 이용하여 랜덤한 값을 할당 받고, 사용자는 Key를 입력한다. 만약 사용자가 입력한 값과 random의 값을 XOR연산을 한 값이 0xdeadbeef면 flag를 가질 수 있다.
srand()와 다르게 rand()는 고정된 시드값을 가지기 때문에 매번 같은 랜덤값을 가진다. 그렇기에 어떤 값이 random 변수에 매번 저장되는지를 알 수 있다면 xor할 값을 알아낼 수 있다.
메인 함수 부분을 살펴보니 xor 부분에서 rbp-0x8 부분과 rbp-0x4 부분을 비교한다.
Key 값으로 1을 넣으니 [rbp-0x8] 값에 1이 들어갔고, rbp-0x4값으로 0x6b8b4567이 들어갔다.
값은 방식으로 2를 넣으니, [rbp-0x4]의 값은 변하지 않았다. 이를 통해 rand의 값은 0x6b7b4567이라는 것을 알 수 있다.
0x6b7b4567 과 0xdeadbeef를 XOR 연산한 값을 넣어주면 'Mommy, I thought libc random is unpredictable...' 이라는 flag를 확인할 수 있다.'0x.Wargame > pwnable.kr' 카테고리의 다른 글
0x07.pwnable.kr - leg (0) 2018.07.04 0x06.pwnable.kr - input (0) 2018.07.02 0x04.pwnable.kr - passcode (0) 2018.07.02 0x03.pwnable.kr - flag (0) 2018.07.02 0x02.pwnable.kr - bof (0) 2018.07.01 댓글