random - 1 pt
Daddy, teach me how to use random value in programming!
ssh random@pwnable.kr -p2222 (pw:guest)
접속을 하고, 소스를 확인해 봅시다.
random@ubuntu:~$ ls -l
total 20
-r--r----- 1 random_pwn root 49 Jun 30 2014 flag
-r-sr-x--- 1 random_pwn random 8538 Jun 30 2014 random
-rw-r--r-- 1 root root 301 Jun 30 2014 random.c
random@ubuntu:~$ cat 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;
}
어? 랜덤값이면 모든 경우의 수를 시도해 봐야 하는 거야? :3 라고 하실 수 있지만, rand()함수는 매번 바뀌는 시드값을 주지 않으면 항상 일정한 값을 반환하게 됩니다. 이 일정하게 나오는 값을 알아내면 답을 구할 수 있습니다.
gdb를 통해 값을 확인해 봅시다.
random@ubuntu:~$ gdb -q random
Reading symbols from random...(no debugging symbols found)...done.
(gdb) set disassembly-flavor intel
(gdb) disas main
0x000000000040062c <+56>: xor eax,DWORD PTR [rbp-0x4]
0x000000000040062f <+59>: cmp eax,0xdeadbeef
random@ubuntu:~$ ./random
3039230856
Good!
Mommy, I thought libc random is unpredictable...
FLAG : Mommy, I thought libc random is unpredictable...
'WAR GAME > Pwnable.kr' 카테고리의 다른 글
pwnable.kr [leg] 풀이 (0) | 2018.03.07 |
---|---|
pwnable.kr [input] 풀이 (0) | 2018.03.06 |
pwnable.kr [passcode] 풀이 (0) | 2018.02.26 |
pwnable.kr [flag] 풀이 (0) | 2018.02.26 |
pwnable.kr [bof] 풀이 (1) | 2018.02.26 |