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版本爆破出了不同的种子,挨个试就行了。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值