题目描述
Daddy, teach me how to use random value in programming!
ssh random@pwnable.kr -p2222 (pw:guest)
程序源码如下:
include <stdio.h>
int main(){
unsigned int random;
random = rand(); // random value!
printf("%d",random);
unsigned int key=0;
scanf("%d", &key);
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函数是伪随机,所以其值在每次运行是固定的。但是rand函数的具体实现会根据libc版本不同而不同,例如在我的mac和linux虚拟机中运行结果不同。于是就写了一个printf出随机数的小程序放在服务器的/tmp文件夹下运行查看其rand函数的运行结果,将其与0xdeadbeef异或即可得到key值。