首页 > 其他分享 >伪随机数种子爆破

伪随机数种子爆破

时间:2022-10-23 23:35:12浏览次数:43  
标签:爆破 mt seed 种子 随机数 Found php

伪随机数种子爆破

一、前言
ctf中有很多php随机数的题目,考察方式一般如下:

给定一个随机数,求产生随机数的种子。

做这种题,先了解点知识

二、基础知识
php产生随机数
php 通过 以下两个函数产生随机数

mt_srand() //播种 Mersenne Twister 随机数生成器。
mt_rand()   //生成随机数
应用代码为

<?php  
mt_srand(1234);    
echo mt_rand()."</br>";
echo mt_rand()."</br>";
echo mt_rand()."</br>";
?>  
结果如下



简单说,给定一个种子,由这个 种子 产生随机数

那 为什么是 伪随机数呢?

因为同一个种子产生的随机数只会根据调用次数的不同产生不同的数。

比如上面的例子,当种子为1234时,

种子产生的前三个随机数就都是
1741177057
1068724585
1335968403

 漏洞产生
所以显而易见,随机数的产生,基于种子。但是,可以通过产生的随机数来猜测种子,进而推测后续的随机数。

需要指明的是,不同版本的php,同一个种子产生的随机数有可能不同。

爆破种子
利用工具
php_mt_seed - PHP mt_rand() seed cracker



使用方法
这个是用C语言编写的工具,里面的一个库是Windows下没有的,推荐用Linux直接用。

我们拖入kali

解压

tar -zxvf php_mt_seed-4.0.tar.gz
进入文件夹

cd php_mt_seed-4.0.tar.gz
编译

make
爆破

./php_mt_seed 1739865909
输出结果:

root@kali:~/桌面/php_mt_seed-4.0# make
gcc -Wall -march=native -mtune=generic -O2 -fomit-frame-pointer -funroll-loops -fopenmp php_mt_seed.c -o php_mt_seed
php_mt_seed.c:47:2: warning: #warning AVX-512 not enabled. Try gcc -mavx512f (on Intel Knights Landing, Skylake-X, or some newer). [-Wcpp]
   47 | #warning AVX-512 not enabled. Try gcc -mavx512f (on Intel Knights Landing, Skylake-X, or some newer).
      |  ^~~~~~~
root@kali:~/桌面/php_mt_seed-4.0# ./php_mt_seed 1739865909
Pattern: EXACT
Version: 3.0.7 to 5.2.0
Found 0, trying 0xf8000000 - 0xfbffffff, speed 14347.4 Mseeds/s 
seed = 0xf8844e10 = 4169420304 (PHP 3.0.7 to 5.2.0)
seed = 0xf8844e11 = 4169420305 (PHP 3.0.7 to 5.2.0)
Found 2, trying 0xfc000000 - 0xffffffff, speed 14578.8 Mseeds/s 
Version: 5.2.1+
Found 2, trying 0x00000000 - 0x01ffffff, speed 0.0 Mseeds/s 
seed = 0x00abac87 = 11250823 (PHP 5.2.1 to 7.0.x; HHVM)
Found 3, trying 0x0c000000 - 0x0dffffff, speed 129.9 Mseeds/s 
seed = 0x0d8938af = 227096751 (PHP 5.2.1 to 7.0.x; HHVM)
Found 4, trying 0x96000000 - 0x97ffffff, speed 88.4 Mseeds/s  
seed = 0x979aac4e = 2543496270 (PHP 5.2.1 to 7.0.x; HHVM)
Found 5, trying 0xfe000000 - 0xffffffff, speed 83.8 Mseeds/s 
Found 5
root@kali:~/桌面/php_mt_seed-4.0# 
根据不同的php版本爆破出了不同的种子,挨个试就行了。

image-20221014113057691

然后可以利用伪随机数种子生成随机数

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

image-20221014113142132

尝试生成的随机数找到合适的

标签:爆破,mt,seed,种子,随机数,Found,php
From: https://www.cnblogs.com/GTL-JU/p/16820026.html

相关文章

  • 子域名爆破の几种方式
    子域名爆破Layer子域名挖掘机​ 在互联网上下载Layer子域名挖掘机软件,使用方法也非常简单,在对话框中输入目标域名即可进行扫描,扫描结果也很细致,有域名、解析IP、CDN列表......
  • 一个简单的 JS 抽取随机数源代码
    一个简单的JS抽取随机数源代码自己写了一个JS抽取随机数的例子。供自己以后参考,也希望可以方便到大家。源代码如下:<html><head><metahttp-equ......
  • 【自然语言处理(NLP)】随机数生成与排序
    【自然语言处理(NLP)】随机数生成与排序作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建......
  • ### 包的具体使用,软件开发目录规范,常用内置模块之collections模块,常用内置模块之时间
    包的具体使用虽然python3对包的要求降低了不需要__init__.py也可以识别但是为了兼容性考虑最好还是加上__init__.py1.如果只想用包中某几个模块那么还是按照之前的导......
  • 时间模块和随机数模块
    Day18软件开发目录规范今日内容概要包的具体使用编程思想的转变软件开发目录规范python常用内置模块今日内容详细包的具体使用虽然python3对包的要求降低了不需......
  • 内置模块之随机数模块——random
    内置模块之随机数模块——randomPythonrandom模块主要用于生成随机数。要使用random函数必须先导入:importrandom这里整理几条常用的功能:函数名功能ran......
  • Linux生成随机数
      在日常测试过程中,需要经常Mock部分数据,使其看起来具有随机性,虽然可以通过高级程序语言来进行实现,也非常高效快捷。除此之外还有没有其他办法呢?今天我们来探讨一下,在L......
  • 生成随机数
    Math.random()*10//生成0-10的随机数,包含0,不包含10Math.ceil(Math.random()*10)//ceil向上取整,即生成1-10的随机整数,取0的概率极小Math.floor(Math.......
  • NC16669 [NOIP2006]明明的随机数
    链接:https://ac.nowcoder.com/acm/problem/16669来源:牛客网题目描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的......
  • 参加[直冲"云"霄种子计划训练营]活动AWS-SAA学习心得分享
        首先非常感谢#51CTO#和#亚马逊云科技#提供的#直冲"云"霄种子计划#训练营活动,我是2022年8月初收到一条该活动的短信,然后走流程后荣幸能够加入。经过一段时间的学......