弄清一下概念。
mt_srand()
php_mt_seed爆破工具下载地址: https://www.openwall.com/php_mt_seed/
解压后进入目录,编译
1 |
make |
随机上生成两个数,用第一个数作为php_mt_seed参数去爆破,用爆破出来的seed,然后验证结果,可以找到相同的序列。 同时可以猜测在php中产生一系列的随机数时,只进行了一次播种!
例题1
njctf中的一个例子,只贴部分关键代码:
1 |
<?php |
我们的目标是猜测出filename.
这里 $seed 是 rand(0,999999999)生成的,我们不知道,但是$hash = md5(session_id() . $ss);我们却是知道的,在 cookie的SESSION中,当把cookie中的 PHPSESSID 设为空的时候,session_id()就也是空了,通过结hash,就可以获得 mt_rand() 产生的第一个随机数,然后用 php_mt_seed这工工具爆破种子,就可以直接算出文件名了
例题2
1 |
iNoUoNVRYN |
解题
1 |
|
用php_mt_seed
最后还原
1 |
|
rand()
php5 中的rand函数调用的是glibc中的random()。其实现算法可以简化为如下代码。
1 |
#include <stdio.h> |
产生的随机数可以用下面这个公式预测 : state[i] = state[i-3] + state[i-31] (一般预测值可能比实际值要差1)
1 |
<?php |
例题
1 |
|
伪加密,爆破种子
1 |
|
找个php7一下版本,运行一下
1 |
|
参考文章:
Cracking PHP rand() http://www.sjoerdlangkemper.nl/2016/02/11/cracking-php-rand/
php的随机数的安全性分析
http://wonderkun.cc/index.html/?p=585%EF%BC%8C%E9%9A%8F%E6%9C%BA%E6%95%B0%E4%B9%8B%E5%89%8D%E4%B9%9F%E6%98%AFctf%E7%9A%84%E5%B8%B8%E8%A7%81%E5%A7%BF%E5%8A%BF
php里的随机数
https://5alt.me/2017/06/php%E9%87%8C%E7%9A%84%E9%9A%8F%E6%9C%BA%E6%95%B0/
FROM :blog.cfyqy.com | Author:cfyqy
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论