[1pt]random

Pwnable.kr 2015. 8. 6. 22:14
#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;
}



Introduction:
  본 문제는 rand()함수를 통해 만들어진 랜덤값과 표준입력을 통해 받은 key값에 xor연산을 수행하여 나온 결과가 0xdeadbeef가 될 경우 flag를 출력

How to solve:
  일단 rand()함수에는 seed값이 들어있지 않으므로, 계속 같은 값을 생성할 것이다. ltrace명령어를 이용하면 rand()함수를 통해 생성되는 값을 볼 수 있다. 그림 1은 ltrace명령어를 통해 rand값이 0x6b8b4567임을 확인한 그림이며, 그림 2는 그림 1에서 확인한 갑과 0xdeadbeef값을 xor하여 key값을 계산한 그림이다. 이렇게 얻어낸 key값을 프로그램에 입력하면 문제가 해결된다.

<그림 1> ltrace를 이용해 랜덤값을 확인


<그림 2> key값을 계산하기 위해 랜덤값(0x6b8b4567)과 0xdeadbeef를 연산


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

[1pt]mistake  (0) 2015.08.06
[1pt]cmd1  (0) 2015.08.06
[1pt]fd  (0) 2015.08.06
[5pt]bof  (0) 2015.08.06
[2pt]lotto  (0) 2015.08.06
Posted by Hugh_K
l