문제
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] passcode writeup (0) | 2018.09.15 |
[Toddler's Bottle] flag writeup (0) | 2018.09.15 |
[Toddler's Bottle] bof writeup (0) | 2018.09.15 |