午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > 深入理解PHP中mt_rand()隨機數的安全

深入理解PHP中mt_rand()隨機數的安全

熱門標簽:襄陽房產電銷機器人招商 怎么在高德地圖標注行走軌跡 個性化地圖標注在線 百度地圖標注飯店位置怎么 深圳400電話辦理那家好 安徽移動外呼系統 施工地圖標注怎么做 百度地圖標注名編輯 清遠陽山400電話號碼如何申請

前言

在前段時間挖了不少跟mt_rand()相關的安全漏洞,基本上都是錯誤理解隨機數用法導致的。這里又要提一下php官網manual的一個坑,看下關于mt_rand()的介紹:中文版^cn 英文版^en,可以看到英文版多了一塊黃色的 Caution 警告

This function does not generate cryptographically secure values, and should not be used for cryptographic purposes. If you need a cryptographically secure value, consider using random_int(), random_bytes(), or openssl_random_pseudo_bytes() instead.

很多國內開發者估計都是看的中文版的介紹而在程序中使用了mt_rand()來生成安全令牌、核心加解密key等等導致嚴重的安全問題。

偽隨機數

mt_rand()并不是一個 真·隨機數 生成函數,實際上絕大多數編程語言中的隨機數函數生成的都都是偽隨機數。關于真隨機數和偽隨機數的區別這里不展開解釋,只需要簡單了解一點

偽隨機是由可確定的函數(常用線性同余),通過一個種子(常用時鐘),產生的偽隨機數。這意味著:如果知道了種子,或者已經產生的隨機數,都可能獲得接下來隨機數序列的信息(可預測性)。

簡單假設一下 mt_rand()內部生成隨機數的函數為: rand = seed+(i*10) 其中 seed 是隨機數種子, i 是第幾次調用這個隨機數函數。當我們同時知道 i 和 rand 兩個值的時候,就能很容易的算出seed的值來。比如 rand=21 , i=2 代入函數 21=seed+(2*10) 得到 seed=1 。是不是很簡單,當我們拿到seed之后,就能計算出當 i 為任意值時候的 rand 的值了。

PHP的自動播種

從上一節我們已經知道每一次mt_rand()被調用都會根據seed和當前調用的次數i來計算出一個偽隨機數。而且seed是自動播種的:

Note: 自 PHP 4.2.0 起,不再需要用 srand() 或 mt_srand() 給隨機數發生器播種 ,因為現在是由系統自動完成的。

那么問題就來了,到底系統自動完成播種是在什么時候,如果每次調用mt_rand()都會自動播種那么破解seed也就沒意義了。關于這一點manual并沒有給出詳細信息。網上找了一圈也沒靠譜的答案 只能去翻源碼^mtrand了:

PHPAPI void php_mt_srand(uint32_t seed)
{
 /* Seed the generator with a simple uint32 */
 php_mt_initialize(seed, BG(state));
 php_mt_reload();

 /* Seed only once */
 BG(mt_rand_is_seeded) = 1; 
}
/* }}} */

/* {{{ php_mt_rand
 */
PHPAPI uint32_t php_mt_rand(void)
{
 /* Pull a 32-bit integer from the generator state
 Every other access function simply transforms the numbers extracted here */

 register uint32_t s1;

 if (UNEXPECTED(!BG(mt_rand_is_seeded))) {
 php_mt_srand(GENERATE_SEED());
 }

 if (BG(left) == 0) {
 php_mt_reload();
 }
 --BG(left);

 s1 = *BG(next)++;
 s1 ^= (s1 >> 11);
 s1 ^= (s1  7)  0x9d2c5680U;
 s1 ^= (s1  15)  0xefc60000U;
 return ( s1 ^ (s1 >> 18) );
}

可以看到每次調用mt_rand()都會先檢查是否已經播種。如果已經播種就直接產生隨機數,否則調用php_mt_srand來播種。也就是說每個php cgi進程期間,只有第一次調用mt_rand()會自動播種。接下來都會根據這個第一次播種的種子來生成隨機數。而php的幾種運行模式中除了CGI(每個請求啟動一個cgi進程,請求結束后關閉。每次都要重新讀取php.ini 環境變量等導致效率低下,現在用的應該不多了)以外,基本都是一個進程處理完請求之后standby等待下一個,處理多個請求之后才會回收(超時也會回收)。

寫個腳本測試一下

?php
//pid.php
echo getmypid();
?php
//test.php
$old_pid = file_get_contents('http://localhost/pid.php');
$i=1;
while(true){
 $i++;
 $pid = file_get_contents('http://localhost/pid.php');
 if($pid!=$old_pid){
 echo $i;
 break;
 }
}

測試結果:(windows+phpstudy)

apache 1000請求

nginx 500請求

當然這個測試僅僅確認了apache和nginx一個進程可以處理的請求數,再來驗證一下剛才關于自動播種的結論:

?php
//pid1.php
if(isset($_GET['rand'])){
 echo mt_rand();
}else{
 echo getmypid();
}
?php
//pid2.php
echo mt_rand();
?php
//test.php
$old_pid = file_get_contents('http://localhost/pid1.php');
echo "old_pid:{$old_pid}\r\n";
while(true){
 $pid = file_get_contents('http://localhost/pid1.php');
 if($pid!=$old_pid){
 echo "new_pid:{$pid}\r\n";
 for($i=0;$i20;$i++){
  $random = mt_rand(1,2);
  echo file_get_contents("http://localhost/pid".$random.".php?rand=1")." ";
 }

 break;
 }
}

通過pid來判斷,當新進程開始的時候,隨機獲取兩個頁面其中一個的 mt_rand() 的輸出:

old_pid:972 new_pid:7752 1513334371 2014450250 1319669412 499559587 117728762 1465174656 1671827592 1703046841 464496438 1974338231 46646067 981271768 1070717272 571887250 922467166 606646473 134605134 857256637 1971727275 2104203195

拿第一個隨機數 1513334371 去爆破種子:

smldhz@vm:~/php_mt_seed-3.2$ ./php_mt_seed 1513334371 Found 0, trying 704643072 - 738197503, speed 28562751 seeds per second seed = 735487048 Found 1, trying 1308622848 - 1342177279, speed 28824291 seeds per second seed = 1337331453 Found 2, trying 3254779904 - 3288334335, speed 28811010 seeds per second seed = 3283082581 Found 3, trying 4261412864 - 4294967295, speed 28677071 seeds per second Found 3

爆破出了3個可能的種子,數量很少 手動一個一個測試:

?php
mt_srand(735487048);//手工播種
for($i=0;$i21;$i++){
 echo mt_rand()." ";
}

輸出:

前20位跟上面腳本獲取的一模一樣,確認種子就是 1513334371 。有了種子我們就能計算出任意次數調用mt_rand()生成的隨機數了。比如這個腳本我生成了21位,最后一位是 1515656265 如果跑完剛才的腳本之后沒訪問過站點,那么打開 http://localhost/pid2.php 就能看到相同的 1515656265 。

所以我們得到結論:

php的自動播種發生在php cgi進程中第一次調用mt_rand()的時候。跟訪問的頁面無關,只要是同一個進程處理的請求,都會共享同一個最初自動播種的種子。

php_mt_seed

我們已經知道隨機數的生成是依賴特定的函數,上面曾經假設為 rand = seed+(i*10)  。對于這樣一個簡單的函數,我們當然可以直接計算(口算)出一個(組)解來,但 mt_rand() 實際使用的函數可是相當復雜且無法逆運算的。有效的破解方法其實是窮舉所有的種子并根據種子生成隨機數序列再跟已知的隨機數序列做比對來驗證種子是否正確。php_mt_seed^phpmtseed就是這么一個工具,它的速度非常快,跑完2^32位seed也就幾分鐘。它可以根據單次mt_rand()的輸出結果直接爆破出可能的種子(上面有示例),當然也可以爆破類似mt_rand(1,100)這樣限定了MIN MAX輸出的種子(下面實例中有用到)。

安全問題

說了這么多,那到底隨機數怎么不安全了呢?其實函數本身沒有問題,官方也明確提示了生成的隨機數不應用于安全加密用途(雖然中文版本manual沒寫)。問題在于開發者并沒有意識到這并不是一個 真·隨機數 。我們已經知道,通過已知的隨機數序列可以爆破出種子。也就是說,只要任意頁面中存在輸出隨機數或者其衍生值(可逆推隨機值),那么其他任意頁面的隨機數將不再是“隨機數”。常見的輸出隨機數的例子比如驗證碼,隨機文件名等等。常見的隨機數用于安全驗證的比如找回密碼校驗值,比如加密key等等。一個理想中的攻擊場景:

夜深人靜,等待apache(nginx)收回所有php進程(確保下次訪問會重新播種),訪問一次驗證碼頁面,根據驗證碼字符逆推出隨機數,再根據隨機數爆破出隨機數種子。接著訪問找回密碼頁面,生成的找回密碼鏈接是基于隨機數的。我們就可以輕松計算出這個鏈接,找回管理員的密碼…………XXOO

實例

PHPCMS MT_RAND SEED CRACK致authkey泄露 雨牛寫的比我好,看他的就夠了

Discuz x3.2 authkey泄露 這個其實也差不多。官方已出補丁,有興趣的可以自己去分析一下。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • PHP安全配置優化詳解
  • PHP網站常見安全漏洞,及相應防范措施總結
  • 6個常見的 PHP 安全性攻擊實例和阻止方法
  • PHP安全之register_globals的on和off的區別
  • PHP開發api接口安全驗證操作實例詳解
  • Linux下PHP+Apache的26個必知的安全設置
  • php解決安全問題的方法實例
  • 實例分析10個PHP常見安全問題
  • 針對PHP開發安全問題的相關總結
  • PHP網頁安全認證的實例詳解
  • php常見的網絡攻擊及防御方法

標簽:延邊 欽州 阜陽 南昌 中衛 黑河 臨夏 駐馬店

巨人網絡通訊聲明:本文標題《深入理解PHP中mt_rand()隨機數的安全》,本文關鍵詞  深入,理解,PHP,中,rand,隨機數,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《深入理解PHP中mt_rand()隨機數的安全》相關的同類信息!
  • 本頁收集關于深入理解PHP中mt_rand()隨機數的安全的相關信息資訊供網民參考!
  • 推薦文章
    高清无码视频直接看| 久久久精品人妻一区二区三区| 可以看毛片的网址| 日韩av手机在线免费观看| 精品无码久久久久成人漫画| 无码人妻aⅴ一区二区三区69岛| 一区二区不卡在线观看| 亚洲 日韩 国产第一区| 久久久久久69| 日本一区二区三区在线观看| 97国产精品久久久| 粉嫩av懂色av蜜臀av分享| 亚洲精品久久久蜜桃动漫| 97精品超碰一区二区三区| 国产精品久久久久一区| 日韩在线视频网| 黄色手机在线视频| 国产亚洲自拍一区| 成人免费视频视频在| 亚洲精品视频一区二区三区| 国产 日韩 亚洲 欧美| 最新国产精品自拍| 国产真实乱偷精品视频| 久久国产高清视频| 久久久999免费视频| 久久久精品动漫| 日韩免费在线播放| 男女av免费观看| 一级特黄色大片| 91女神在线视频| 色哟哟亚洲精品| 美女精品国产| 日韩中文字幕在线观看视频| 国产剧情一区在线| 26uuu久久综合| 亚洲精品电影在线观看| 国产精品亚洲网站| 欧美日韩精品电影| 亚洲免费视频中文字幕| 国产亚洲成av人在线观看导航 | 欧美mv日韩mv亚洲| 91九色精品视频| 日本xxxx免费| 日韩专区中文字幕一区二区| 亚洲精品久久久一区二区三区| 亚洲综合清纯丝袜自拍| 亚洲美女爱爱视频| 亚洲免费不卡| 国产xxxxxxxxx| 国产又粗又猛又爽又黄的视频一| 中文字幕第21页| 亚洲综合在线网站| 久久久久久久久久久久久久久国产| 久久无码人妻一区二区三区| 暴力调教一区二区三区| 色综合久久综合网欧美综合网| 国新精品乱码一区二区三区18| 波多野结衣一二区| 欧美日韩一二三四五区| 欧美乱妇高清无乱码| 国产精品10p综合二区| 韩国三级hd中文字幕有哪些| 蜜桃久久久久久久| 91精品国产综合久久小美女| 色老汉一区二区三区| 欧美人牲a欧美精品| 日韩欧美中文字幕一区| 51精品国产黑色丝袜高跟鞋| 日韩人妻精品中文字幕| 国产精品女主播av| 四虎一区二区| 午夜国产福利一区二区| 国产农村老头老太视频| 成人av在线资源网| 在线观看免费视频综合| 亚洲伊人成综合成人网| aa在线观看视频| 性欧美精品男男| 国产乱人乱偷精品视频a人人澡| 午夜视频免费在线| 久久久久久一级片| 日韩欧美一级精品久久| 奇米4444一区二区三区| 四虎成人在线播放| 午夜久久久久久久久久| 国产偷v国产偷v亚洲高清| 国产欧美精品在线观看| 国产精品丝袜91| 亚洲成人网久久久| 欧美另类极品videosbestfree| 天天摸夜夜添狠狠添婷婷| 中文字幕无码不卡免费视频| 在线观看久久av| 欧美成人精品欧美一级乱黄| 秋霞午夜一区二区| 精品欧美久久久| 青草青草久热精品视频在线网站| a一级免费视频| 欧美性感一区二区三区| 国产91精品黑色丝袜高跟鞋 | 久久综合色视频| 欧美日韩国产小视频| xxxx国产视频| 欧美色图片你懂的| 日av中文字幕| 六月婷婷色综合| 激情视频一区二区| 国产欧美日产一区| 加勒比在线一区| 日韩黄色片视频| 欧美日韩成人精品| 国产女人18毛片水真多成人如厕| 中文字幕在线亚洲三区| 成人免费视频一区| 日韩欧美三级电影| 成人成人成人在线视频| 能看毛片的网站| 男人天堂网在线视频| 欧美精品久久久久久久| 麻豆国产精品官网| 免费亚洲精品视频| 亚洲欧美综合另类在线卡通| 天美星空大象mv在线观看视频| 国产精品白丝jk白祙| 日本丰满少妇裸体自慰| 欧美一级国产精品| 在线视频 91| 一级黄色片国产| 亚洲综合在线做性| 欧美高清hd18日本| 青草av.久久免费一区| 亚洲精蜜桃久在线| 国产日韩欧美在线一区| 北条麻妃在线视频| 亚洲成av人片在线观看无码| a级大片在线观看| 91国产视频在线观看| 成人黄色免费网站在线观看| av女人的天堂| 尤物av一区二区| 青青影院一区二区三区四区| 欧美日韩色婷婷| 国产免费a视频| 国产91精品网站| 99久久精品99国产精品| 九九视频免费看| 性色av浪潮av| 欧美中文字幕在线观看视频| 91久久国产婷婷一区二区| 成人午夜在线播放| 大桥未久一区二区三区| 亚洲成人av中文| avhd101老司机| 91精品国产综合久久香蕉922| 日本在线不卡视频| 有码中文亚洲精品| 色屁屁草草影院ccyy.com| 欧美日韩亚洲视频| 看欧美ab黄色大片视频免费| 久久资源免费视频| 精品一区二区三区的国产在线播放| 91久久久亚洲精品| 欧美自拍偷拍一区| 蜜臀久久99精品久久久| 亚洲精品中文字幕乱码三区91| 91精品国产高清91久久久久久 | www..com日韩| 亚洲精品日韩欧美| 亚洲色偷精品一区二区三区| 亚洲免费成人在线视频| 国内精品中文字幕| 欧美性猛交xxxxx免费看| av在线免费观看国产| 国产一区二区福利| 亚洲午夜精品久久久久久浪潮| 成人一道本在线| wwwjizzjizzcom| 精品视频在线导航| 90岁老太婆乱淫| 日本久久精品视频| 日本丰满少妇一区二区三区| 日韩精品91亚洲二区在线观看| 中文字幕在线观看第二页| 国产第一页在线播放| 丰满少妇在线观看| 超碰在线免费观看97| 精品国内亚洲在观看18黄| 久久久一区二区三区捆绑**| 九九热国产在线| 日韩少妇中文字幕| 日韩视频在线免费| 久久国产欧美日韩精品| 在线播放中文一区| 免费激情视频网站| 日韩av电影一区| 中文字幕一二三四| 久久久久久国产精品无码| 亚洲一区三区电影在线观看| 国产亚洲精品久久久久久777| 国产女主播在线播放| 佐佐木明希av| 欧美xxxx14xxxxx性爽| 性色av一区二区三区| 99热精品在线播放| 亚洲国产精品视频一区| 精品欧美aⅴ在线网站| 欧美成aaa人片在线观看蜜臀| 日韩精品极品在线观看播放免费视频| 26uuu欧美| 瑟瑟视频在线免费观看| 国产白嫩美女无套久久| 在线观看免费av网址| 免费观看成人在线| 日韩一区二区三区电影 | 一区二区三区四区五区精品| 玖玖玖精品中文字幕| 日韩一卡二卡三卡| 色综合天天天天做夜夜夜夜做| 国产精品水嫩水嫩| 国产乱码77777777| 欧美精品自拍视频| 老子影院午夜伦不卡大全| 欧美一级爽aaaaa大片| 91精品国产综合久久精品麻豆| 久草这里只有精品视频| 国产精品久久久久久久一区探花 | 午夜福利一区二区三区| 我的公把我弄高潮了视频| 日韩二区三区在线| 免费不卡在线观看| 国产亚洲精品成人a| 国产福利视频一区| 欧美国产一区二区在线观看| 日韩精品123区| 久久er99热精品一区二区三区| 日韩欧美国产高清91| 91丨九色丨丰满| 成人黄色av片| 欧美大奶子在线| 久久女同互慰一区二区三区| 欧美福利在线视频| 欧美日韩精品免费观看| 精品美女在线播放| 国内精品久久久久影院色| 男女一区二区三区| 1区1区3区4区产品乱码芒果精品| 精品magnet| www.国产三级| 伊人免费视频二| 国产精品久久久久久久久久99| 亚洲高清免费观看| 国产av一区二区三区精品| 青青草精品视频在线观看| 97成人精品区在线播放| 亚洲成人自拍网| www.xxx国产| 久久久久99人妻一区二区三区| 国产精品主播视频| 色噜噜久久综合| 日韩精品一二三四| 成人免费网站黄| 欧洲一区二区在线观看| 日韩精品在线观看一区| 91在线视频官网| 一区二区三区福利视频| 老司机午夜av| 国产日韩视频在线观看| 欧美日本在线一区| 国产风韵犹存在线视精品| 18岁成人毛片| 91成人在线观看喷潮教学| 欧美夜福利tv在线| 欧美性xxxxxx少妇| 国产做a爰片久久毛片| 欧美另类视频在线观看| 91视频最新入口| 国产精品嫩草视频| 日韩女优av电影| 久久免费午夜影院| 国产免费av观看| 国产毛片毛片毛片毛片毛片毛片| 欧美性大战久久久久| xvideos成人免费中文版| 亚洲激情网站免费观看| 日本精品久久久久| 亚洲人做受高潮| 阿v天堂2017| 国产欧美日韩视频| 日韩精品在线免费观看| 亚洲女人****多毛耸耸8| 亚洲aaa在线观看| 国产激情av在线| 日韩a∨精品日韩在线观看| 国产情人节一区| 日韩精品免费看| 一区二区成人在线观看| 免费看日韩精品| 黄色激情视频在线观看| 久久久久久久久久毛片| 日产精品高清视频免费| 国外成人免费在线播放| 欧美成人精品1314www| 国产精品白丝在线| 美腿丝袜亚洲综合| 国产做受高潮漫动| 中文成人无字幕乱码精品区| 国产成人亚洲综合无码| 亚洲永久在线观看| 欧美成人精品一区二区| 日韩午夜激情视频| 亚洲综合偷拍欧美一区色| 国产剧情一区二区| 国产v片在线观看| 美国黄色片视频| 久久精品无码一区二区三区毛片| 中文视频一区视频二区视频三区| 国产精品久久久久9999| 色噜噜狠狠狠综合曰曰曰88av | 青草网在线观看| 91色中文字幕| 午夜精品理论片| 亚洲一区二区久久| 欧美日韩国产bt| 依依成人综合视频| 成人一二三区视频| 免费人成精品欧美精品| 亚洲最大色网站| 91免费小视频| 久久成人免费电影| 动漫av一区二区三区| 日本一区二区三区精品| 四虎永久免费在线观看| 福利视频999| 欧美二区在线视频| 中文字幕一区综合| 黄色国产精品一区二区三区| 国产精品美女免费看| 欧美二区在线播放| 国产一区二区三区在线播放免费观看| 91久久精品一区二区| 亚洲综合一二三区| 国产精品欧美一级免费| www.99精品| 国产一区不卡精品| 美国三级日本三级久久99| 91好色先生tv| 天天干,天天干| 日本五十熟hd丰满| 九九视频在线免费观看| 日韩av片在线免费观看| 亚洲成人网在线播放| 午夜剧场免费看| 精品国产aⅴ一区二区三区东京热| 精品久久久久久中文字幕2017| 国产a级片网站| 轻点好疼好大好爽视频| 国产欧美自拍视频| www亚洲国产| 六月婷婷激情网| 裸体大乳女做爰69| 亚洲精品国产精品国自产| 天天人人精品| 亚洲毛片aa| 免费成人进口网站| 91精品一区二区三区四区| av电影一区二区三区| 黑人巨茎大战欧美白妇| av日韩在线看| 国产精品一区二区免费在线观看| 国产免费黄色小视频| 99色精品视频| 天天操天天爽天天射| 免费av不卡在线| 中国老熟女重囗味hdxx| av网页在线观看| 无码一区二区三区在线| 性色国产成人久久久精品| 九九热最新地址| 九九热在线视频播放| 中文字幕欧美在线观看| 精品久久久久久亚洲综合网站| 成人免费视频国产免费麻豆| 石原莉奈一区二区三区在线观看 | 国产吃瓜黑料一区二区| 成人18视频日本| 成人免费xxxxx在线观看| 手机在线看片1024| 久久久国产精品免费| 波多野结衣电车痴汉| 中文字幕免费国产精品| 日本一区二区在线观看视频| 96av麻豆蜜桃一区二区| 国产一区二区三区久久悠悠色av| 国产成人av一区二区| 国产三级精品视频| 亚洲一区二区四区蜜桃| 色综合激情久久| 日韩欧美国产一区二区三区| 亚洲片在线观看| 欧美精品手机在线| 91精品国产成人www| 91久久精品美女高潮| 日韩精品一区二区三区丰满| 9191国产视频| 欧美激情国内自拍| www成人啪啪18软件| 波多野结衣影片| 毛片一区二区三区| 国产精品电影一区二区| 欧美日韩黄色一区二区|