문제

Daddy, teach me how to use random value in programming!

ssh random@pwnable.kr -p2222 (pw:guest)


분석

random.c의 내용

#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;
}

rand함수를 이용해서 임의의 수를 하나 받아온다. 그리고 key값을 입력받은 뒤 random과 xor연산, 그 결과가 0xdeadbeef와 같으면 flag를 준다.

랜덤 넘버를 이용하기 때문에 자칫 어려워 보일 수 있으나 전혀 그렇지 않다.

보통의 경우 이렇게 그냥 rand()함수를 이용할 경우 프로그램을 실행할 때 마다 같은 수가 반환되기 때문.

실제로 gdb를 이용해 프로그램을 돌려보면 rand 함수의 결과로 항상 0x6b8b4567이 반환됨을 알 수 있다.

key ^ 0x6b8b4567 = 0xdeadbeef를 만족하는 key는 3039230856


FL4G

끝!

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

[Toddler's Bottle] leg writeup  (0) 2018.09.16
[Toddler's Bottle] input writeup  (0) 2018.09.16
[Toddler's Bottle] random writeup  (0) 2018.09.15
[Toddler's Bottle] passcode writeup  (0) 2018.09.15
[Toddler's Bottle] flag writeup  (0) 2018.09.15
[Toddler's Bottle] bof writeup  (0) 2018.09.15

+ Recent posts