ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 0x05.pwnable.kr - random
    0x.Wargame/pwnable.kr 2018. 7. 2. 16:09

    0x05.pwnable.kr - random



    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

    댓글

Designed by Tistory.