php僞隨機數漏洞 以及腳本php_mt_seed的使用教程

前幾天在羣裏看到了一個題目,發現本身沒有接觸過這個僞隨機數這個漏洞,在此記錄下。php

搜索這兩個函數函數

mt_scrand()
mt_rand()

mt_scrand(seed)這個函數的意思,是經過分發seed種子,而後種子有了後,靠mt_rand()生成隨機數。code

咱們來寫段代碼。class

<?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/>";
?>

咱們再次訪問:im

162946439腳本

247161732img

1463094264di

1878061366

394962642

如今細心的人可能已經發現,第一個數162946439存在貓膩了。

爲何生成隨機數會同樣呢?咱們屢次訪問。震驚:
仍是

162946439

247161732

1463094264

1878061366

394962642

其實,這就是僞隨機數的漏洞,存在可預測性。

生成僞隨機數是線性的,你能夠理解爲y=ax,x就是種子,知道種子和一組僞隨機數不是就能夠推y(僞隨機數了嗎),固然實際上更復雜確定。
我知道種子後,能夠肯定你輸出僞隨機數的序列。
知道你的隨機數序列,能夠肯定你的種子。

用到的是爆破,已經有寫好的C腳本了。

這裏簡單的介紹下這個腳本咋用

kali下,進入目錄,make  
time ./php_mt_seed 第一個隨機數

爆破出來兩個種子,一個是12345679,另外一個是1039460795。

本身本地試下

驗證種子是否同樣,就看看輸出序列是否同樣

相關文章
相關標籤/搜索