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。

    自己本地试下

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

  • 相关阅读:
    LightningChartJS2.0即将火热推出,敬请期待!
    html转word
    Windows上使用Python2.7安装pip
    人工智能?.netcore一样胜任!
    远程浏览服务器上的文件
    C# winform间窗体传值简单Demo
    C#发送QQ邮箱
    各种文件用JS转Base64之后的data类型
    当你的VS2019没法自动补全了,或者自动补全按回车直接换行的时候
    easyUI filebox 获取文件对象
  • 原文地址:https://www.cnblogs.com/zw7889/p/13703616.html
Copyright © 2011-2022 走看看