[toddler's bottle] random

폭풍저그머성찡 ㅣ 2018. 11. 30. 19:33

#include <stdio.h>


int main(){

        unsigned int random;

        random = rand();        // random value!


        unsigned int key=0;

        scanf("%d", &key);


        if( (key ^ random) == 0xdeadbeef ){

                printf("Good!\n");

                system("/bin/cat flag");

                return 0;

        }


        printf("Wrong, maybe you should try 2^32 cases.\n");

        return 0;

}


코드가 아주 간단하다.

랜덤값 하나 받아놓고 특정 값과 베타 논리합을 통해서 키값을 구하는 문제다.

c 좀만 해보면 그냥 보자마자 알 수 있고 사실 몰라도 여러번 하다보면 알아챌 수 밖에 없다.

이 코드에는 난수를 생성할 때 seed가 없다. 때문에 실행할 때 마다 항상 같은 난수가 나온다. 

이렇게 말하니까 난수도 아니다. 그냥 어떤 값 하나 놓고 실행 시키는거다.

그럼 이제 그 '어떤 값'을 찾아 내기만 하면 된다.


rbp - 0x4에 저장시키는것 같다. 400609에 bp를 걸고 살펴보겠다.



이렇게 난수(?)가 나온다. 이 몇번을 실행시켜도 이 값이 나온다.


0xdeadbeef에 xor연산을 하면 답이 나온다. 난수가 접속할때마다는 달라지는지 어쩐지 몰라서 그냥 여기까지만 적겠다.

'write-up > pwnable.kr' 카테고리의 다른 글

[toddler's bottle] input  (0) 2018.11.30
[toddler's bottle] mistake  (0) 2018.11.30
[toddler's bottle] passcode  (0) 2018.11.30
[toddler's bottle] flag  (0) 2018.11.30
[toddler's bottle] bof  (0) 2018.11.30