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。

    自己本地试下

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

  • 相关阅读:
    连分数法解佩尔方程特解
    hdu2281&&POJ1320——Pell方程
    Gym
    代入法求递推式
    nodemcu固件的烧录及lua开发
    ESP8266MOD、刷可以使用AT指令的固件、作为客户端向贝壳云端发送固定数据
    Quick Start NodeMCU / ESP8266 12E
    CF388C&&2018EC Final D题——博弈&&水题
    使用cookie登录网盘账号
    Spring的Bean之Bean的基本概念
  • 原文地址:https://www.cnblogs.com/zw7889/p/13703616.html
Copyright © 2011-2022 走看看