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。

    自己本地试下

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

  • 相关阅读:
    算法导论习题
    org.apache.subversion.javahl.ClientException: Item is not readable 解决办法
    nginx安装部署
    tomcat+jdk安装部署
    sql基本知识
    javascript权威指南学习笔记
    JAVA设计模式之---工厂模式
    Effective Java 之 --- 用私有构造器或者枚举类型强化Singleton属性
    接口中定义变量必须为public static final的原因
    对List中每个对象元素按时间顺序排序
  • 原文地址:https://www.cnblogs.com/zaqzzz/p/9997855.html
Copyright © 2011-2022 走看看