缓冲区溢出攻击,可以重建随机金丝雀?

时间:2017-10-26 19:40:47

标签: random buffer overflow

我正在开发一个主题为:buffe roverflow attack的系统安全项目。 我有一个程序和源代码我应该获得root权限。 我遇到的问题是由一个随机的金丝雀引起的,在程序开始时,随机数生成器被初始化:

srand(time(NULL) ^ (getpid() << 16));

稍后在金丝雀上由

设定
canary = rand();

我的问题:是否有可能重建金丝雀?我想重新生成salt(time(NULL)返回自1970年以来的时间,以秒为单位,pid在程序启动时保持不变),然后通过调用rand()获取canary。 我不熟悉任何脚本语言,并且没有很多Linux经验,所以我希望不要浪费时间使用永远不会有效的解决方案。 先感谢您! :)

1 个答案:

答案 0 :(得分:0)

是的,这是可能的。您需要知道的是程序的开始时间和进程ID。您可以通过输入ps -eo pid,cmd,lstart | grep «program-name»从命令行获取此信息。例如,假设您感兴趣的程序名为test

$ ps -eo pid,cmd,lstart | grep test
  26798 ./test                      Thu Oct 26 22:03:52 2017

输出行开头的数字是进程ID,此进程开始的时间是该行的结尾。您可以轻松地将其转换为Unix时间戳:

$ date --date='Thu Oct 26 22:03:52 2017' '+%s'
1509055432

上次我检查时,PHP仍在使用相同的随机数生成器。所以你可以用PHP来计算金丝雀:

$ php -r 'srand(1509055432 ^ (26798 << 16)); echo rand()."\n";'
1670313680

(如果你没有PHP,你可以轻松地推出自己的C应用程序来为你做这个计算。)

如果您想要生成难以猜测的值,那么srand(time(NULL))应该是没有用的。更好的方法是从\dev\urandom获取字节。