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。

    自己本地试下

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

  • 相关阅读:
    关于将so 打包入APK的问题
    求 在独立service 中 调用contentprovider的方法
    ndk 环境下 c版 md5
    请教大牛们一个问题
    编写 service 与导出 jar 时注意的问题
    引入已编译好的动态库
    PHP 日期格式说明
    Ocaml 插件
    【转】简单至极的 PHP 缓存类
    PHP mysqlnd cannot connect to MySQL 4.1+ using old authentication
  • 原文地址:https://www.cnblogs.com/zaqzzz/p/9997855.html
Copyright © 2011-2022 走看看