zoukankan      html  css  js  c++  java
  • php伪随机数漏洞 以及脚本php_mt_seed的使用教程

    前几天在群里看到了一个题目,发现自己没有接触过这个伪随机数这个漏洞,在此记录下。


    搜索这两个函数

    mt_scrand()
    mt_rand()  
    

    mt_scrand(seed)这个函数的意思,是通过分发seed种子,然后种子有了后,靠mt_rand()生成随机数。

    我们来写段代码。

    <?php  
    mt_srand(12345);    
    echo mt_rand()."<br/>";
    ?>  
    

    我们访问,输出162946439。

    现在代码改为

    <?php  
    mt_srand(12345);    
    echo mt_rand()."<br/>";
    echo mt_rand()."<br/>";
    echo mt_rand()."<br/>";
    echo mt_rand()."<br/>";
    echo mt_rand()."<br/>";
    ?>    
    

    我们再次访问:

    162946439

    247161732

    1463094264

    1878061366

    394962642

    现在细心的人可能已经发现,第一个数162946439存在猫腻了。  
    

    为什么生成随机数会一样呢?我们多次访问。震惊:
    还是

    162946439

    247161732

    1463094264

    1878061366

    394962642

    其实,这就是伪随机数的漏洞,存在可预测性。

    生成伪随机数是线性的,你可以理解为y=ax,x就是种子,知道种子和一组伪随机数不是就可以推y(伪随机数了吗),当然实际上更复杂肯定。
    
    我知道种子后,可以确定你输出伪随机数的序列。
    知道你的随机数序列,可以确定你的种子。  
    

    用到的是爆破,已经有写好的C脚本了。

    这里简单的介绍下这个脚本咋用

    kali下,进入目录,make  
    time ./php_mt_seed 第一个随机数  
    

    爆破出来两个种子,一个是12345679,另一个是1039460795。

    自己本地试下

    验证种子是否一样,就看看输出序列是否一样

  • 相关阅读:
    codeforces round#600
    第三章:数据操作
    1143 Lowest Common Ancestor (30 分)
    游标
    1151 LCA in a Binary Tree (30 分)
    jQuery之setInterval()定时器
    C程序第四次作业
    C程序第三次作业
    C程序第二次作业
    C程序第一次作业
  • 原文地址:https://www.cnblogs.com/zw7889/p/13703616.html
Copyright © 2011-2022 走看看