php偽隨機數漏洞 以及腳本php_mt_seed的使用教程
阿新 • • 發佈:2018-11-21
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的使用教程