1. 程式人生 > >php偽隨機數漏洞 以及腳本php_mt_seed的使用教程

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

ali 是否 使用 序列 kali 個數 srand 腳本 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。

自己本地試下

技術分享圖片

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

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