1. 程式人生 > 實用技巧 >php偽隨機數漏洞利用

php偽隨機數漏洞利用

php偽隨機數

相關函式

mt_rand()

mt_rand函式有兩個可選引數 min 和 max,如果沒有提供可選引數,mt_rand函式將返回返回 0 到 mt_getrandmax() 之間的偽隨機數。例如想要 5 到 15(包括 5 和 15)之間的隨機數,用 mt_rand(5, 15)。

mt_srand()

用於播下一個更好的隨機數發生器種子,用 seed 來給隨機數發生器播種。 沒有設定 seed 引數時,會被設為隨時數。自 PHP 4.2.0 起,不再需要用 srand()mt_srand() 給隨機數發生器播種 ,因為現在是由系統自動完成的。

簡單來說mt_scrand()通過分發seed種子,然後種子有了後,靠mt_rand()生成隨機數

這張圖能幫助我們更好的瞭解php偽隨機數

img

程式碼測試

我們輸入種子12345 ,發現不管什麼時候,回顯的隨機數都是一樣的。其實,這就是偽隨機數的漏洞,存在可預測性。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-KsnK8llB-1602323705066)(C:\Users\Asus\AppData\Roaming\Typora\typora-user-images\image-20201010174106195.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-1vN9FIqr-1602323705068)(C:\Users\Asus\AppData\Roaming\Typora\typora-user-images\image-20201010174118319.png)]

總的來說,我們知道種子後,可以確定你輸出偽隨機數的序列。 知道你的隨機數序列,可以確定你的種子。

根據隨機數預測種子

以上面生成的隨機數為例,假設我們知道了第一個生成的隨機數,那我們怎麼預測種子呢?
那就要用到php_mt_seed這個工具了。

php_mt_seed使用方法

kali下,進入目錄,make

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-RPw1Z8ni-1602323705071)(C:\Users\Asus\AppData\Roaming\Typora\typora-user-images\image-20201010174632583.png)]

./php_mt_seed 第一個隨機數 ,(假設我們知道序列的第一個隨機數是 1507887240)

可以得到種子

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-AvHXwAOa-1602323705072)(C:\Users\Asus\AppData\Roaming\Typora\typora-user-images\image-20201010174851252.png)]

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

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-2LvT7msP-1602323705075)(C:\Users\Asus\AppData\Roaming\Typora\typora-user-images\image-20201010175003472.png)]

可以看到 1507887240 就是第一個隨機數,可以確定我們原先的種子就是 1142896771

相關習題

平臺:ctfshow web入門 web25

下面放出 此題的wp :

https://blog.i0bin.cn/index.php/archives/50/

參考部落格 :https://www.cnblogs.com/zaqzzz/p/9997855.html

​ https://blog.csdn.net/zss192/article/details/104327432